Подписывайтесь на наш Telegram и не пропускайте важные новости! Перейти

Вопрос Что не так?

Начинающий
Начинающий
Статус
Онлайн
Регистрация
21 Фев 2024
Сообщения
194
Реакции
1
Кодик MixinGameRenderer:
Expand Collapse Copy
package dev.client.mixins.hooks;

import com.llamalad7.mixinextras.sugar.Local;
import com.mojang.blaze3d.systems.RenderSystem;
import dev.client.WildClient;
import dev.client.event.classes.ShaderEvent;
import dev.client.mixins.other.IMixinGameRenderer;
import dev.client.modules.impl.util.NoRender;
import dev.client.util.render.RenderUtil3D;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import net.minecraft.block.enums.CameraSubmersionType;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.gl.Framebuffer;
import net.minecraft.client.gl.SimpleFramebuffer;
import net.minecraft.client.render.Camera;
import net.minecraft.client.render.GameRenderer;
import net.minecraft.client.render.RenderTickCounter;
import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.entity.Entity;
import net.minecraft.entity.LivingEntity;
import net.minecraft.util.math.MathHelper;
import net.minecraft.util.math.RotationAxis;
import org.joml.Matrix4f;
import org.lwjgl.opengl.GL43;
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.Unique;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.Redirect;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;

import static dev.client.util.IUtil.tickCounter;

@Environment(EnvType.CLIENT)
@Mixin(GameRenderer.class)
public abstract class MixinGameRenderer implements IMixinGameRenderer {
    @Shadow private boolean renderingPanorama;
    @Shadow private float lastFovMultiplier;
    @Shadow private float fovMultiplier;

    @Unique private SimpleFramebuffer wild$beforeHandFbo = null;
    @Unique private SimpleFramebuffer wild$withHandFbo = null;
    @Shadow @Final
    MinecraftClient client;

    public float getFov2(Camera camera, float tickDelta, boolean changingFov) {
        if (this.renderingPanorama) {
            return 90.0F;
        }

        float fov = 70.0F;
        if (changingFov) {
            fov = (float) (int) MinecraftClient.getInstance().options.getFov().getValue();
            fov *= MathHelper.lerp(tickDelta, this.lastFovMultiplier, this.fovMultiplier);
        }

        Entity focused = camera.getFocusedEntity();
        if (focused instanceof LivingEntity living) {
            if (living.isDead()) {
                float deathTime = Math.min((float) living.deathTime + tickDelta, 20.0F);
                fov /= (1.0F - 500.0F / (deathTime + 500.0F)) * 2.0F + 1.0F;
            }
        }

        CameraSubmersionType submersion = camera.getSubmersionType();
        if (submersion == CameraSubmersionType.LAVA || submersion == CameraSubmersionType.WATER) {
            float scale = ((Double) MinecraftClient.getInstance().options.getFovEffectScale().getValue()).floatValue();
            fov *= MathHelper.lerp(scale, 1.0F, 0.85714287F);
        }

        return fov;
    }

    @Inject(method = "renderWorld", at = @At("HEAD"))
    public void hookWorldRender(RenderTickCounter tickCounter, CallbackInfo ci) {
        Camera camera = this.client.gameRenderer.getCamera();
        MatrixStack matrixStack = new MatrixStack();

        matrixStack.multiplyPositionMatrix(new Matrix4f(RenderSystem.getProjectionMatrix()));

        matrixStack.translate((float) -camera.getPos().x, (float) -camera.getPos().y, (float) -camera.getPos().z);

        RenderUtil3D.getInstance().savedCamPos = camera.getPos();


        WildClient.INSTANCE.getEventManager().getWorldRenderEvent().update(tickCounter, matrixStack);
        WildClient.INSTANCE.getEventManager().hookEvent(WildClient.INSTANCE.getEventManager().getWorldRenderEvent());

        RenderUtil3D.getInstance().lastWorldSpaceMatrix = matrixStack.peek();
        RenderUtil3D.getInstance().onRender3D();
    }


    @Inject(
            method = "render",
            at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/WorldRenderer;render(Lnet/minecraft/client/render/RenderTickCounter;ZLnet/minecraft/client/render/Camera;Lnet/minecraft/client/render/GameRenderer;Lnet/minecraft/client/render/LightmapTextureManager;Lorg/joml/Matrix4f;Lorg/joml/Matrix4f;)V")
    )
    private void onRender3d(RenderTickCounter tickCounter, boolean renderBlockOutline, Camera camera, Matrix4f projectionMatrix, Matrix4f modelViewMatrix, CallbackInfo ci) {
        MatrixStack stack = new MatrixStack();
        stack.multiplyPositionMatrix(modelViewMatrix);
        RenderUtil3D.getInstance().savedCamPos = camera.getPos();
        WildClient.INSTANCE.getEventManager().getWorldRenderEvent().update(tickCounter, stack);
        WildClient.INSTANCE.getEventManager().hookEvent(WildClient.INSTANCE.getEventManager().getWorldRenderEvent());
        RenderUtil3D.getInstance().lastWorldSpaceMatrix = stack.peek();
        RenderUtil3D.getInstance().onRender3D();
    }

    @Redirect(
            method = "renderWorld",
            at = @At(value = "INVOKE", target = "Lnet/minecraft/util/math/MathHelper;lerp(FFF)F")
    )
    private float renderWorldHook(float delta, float first, float second) {
        NoRender noRender = (NoRender) WildClient.INSTANCE.getModuleManager().getByClass(NoRender.class);
        if (noRender.isEnabled() && noRender.options.getValueByName("Nausea")) {
            return 0.0F;
        }
        return MathHelper.lerp(delta, first, second);
    }

    @Inject(method = "tiltViewWhenHurt", at = @At("HEAD"), cancellable = true)
    private void tiltViewWhenHurtHook(MatrixStack matrices, float tickDelta, CallbackInfo ci) {
        NoRender noRender = (NoRender) WildClient.INSTANCE.getModuleManager().getByClass(NoRender.class);
        if (noRender.isEnabled() && noRender.options.getValueByName("NoHurtCam")) {
            ci.cancel();
        }
    }

    @Inject(method = "renderHand", at = @At("HEAD"))
    private void morbid$beforeHand(Camera camera, float tickDelta, Matrix4f matrix4f, CallbackInfo ci) {
        Framebuffer main = MinecraftClient.getInstance().getFramebuffer();
        if (main.getColorAttachment() != 0) {
            this.wild$beforeHandFbo = this.morbid$ensureFbo(this.wild$beforeHandFbo, main);
            this.morbid$copyGL(main, this.wild$beforeHandFbo);
        }
    }

    @Inject(method = "renderHand", at = @At("TAIL"))
    private void morbid$afterHand(Camera camera, float tickDelta, Matrix4f matrix4f, CallbackInfo ci) {
        Framebuffer main = MinecraftClient.getInstance().getFramebuffer();
        if (main.getColorAttachment() != 0 && this.wild$beforeHandFbo != null) {
            this.wild$withHandFbo = this.morbid$ensureFbo(this.wild$withHandFbo, main);
            this.morbid$copyGL(main, this.wild$withHandFbo);
            WildClient.INSTANCE.getEventManager().hookEvent(new ShaderEvent(this.wild$beforeHandFbo, this.wild$withHandFbo));
        }
    }

    @Unique
    private SimpleFramebuffer morbid$ensureFbo(SimpleFramebuffer fbo, Framebuffer ref) {
        if (fbo == null) {
            return new SimpleFramebuffer(ref.textureWidth, ref.textureHeight, false);
        }
        if (fbo.textureWidth != ref.textureWidth || fbo.textureHeight != ref.textureHeight) {
            fbo.resize(ref.textureWidth, ref.textureHeight);
        }
        return fbo;
    }

    @Unique
    private void morbid$copyGL(Framebuffer src, SimpleFramebuffer dst) {
        if (src.getColorAttachment() != 0 && dst.getColorAttachment() != 0) {
            GL43.glCopyImageSubData(
                    src.getColorAttachment(), 3553, 0, 0, 0, 0,
                    dst.getColorAttachment(), 3553, 0, 0, 0, 0,
                    src.textureWidth, src.textureHeight, 1
            );
        }
    }
}

Caused by: org.spongepowered.asm.mixin.transformer.throwables.MixinTransformerError: An unexpected critical error was encountered
Caused by: org.spongepowered.asm.mixin.injection.throwables.InjectionError: Critical injection failure: Callback method onRender3d(ZLnet/minecraft/client/render/Camera;Lorg/joml/Matrix4f;Lorg/joml/Matrix4f;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V in wild.client.mixins.json:MixinGameRenderer from mod wild failed injection check, (0/1) succeeded. Scanned 0 target(s). No refMap loaded.

Думаю понятно что я имел ввиду
Хочу объяснить для людей который скажут через ии почини 3 дня подряд занимаюсь этой хуетой и если ии фиксить то просто помогает хотя бы запустить а даже chinahat не работает брал ориг код с залупой через официальный сайт чекал что это вставлял ошибка и это пиздец надеюсь объяснил
 
Последнее редактирование:
Кодик MixinGameRenderer:
Expand Collapse Copy
package dev.client.mixins.hooks;

import com.llamalad7.mixinextras.sugar.Local;
import com.mojang.blaze3d.systems.RenderSystem;
import dev.client.WildClient;
import dev.client.event.classes.ShaderEvent;
import dev.client.mixins.other.IMixinGameRenderer;
import dev.client.modules.impl.util.NoRender;
import dev.client.util.render.RenderUtil3D;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import net.minecraft.block.enums.CameraSubmersionType;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.gl.Framebuffer;
import net.minecraft.client.gl.SimpleFramebuffer;
import net.minecraft.client.render.Camera;
import net.minecraft.client.render.GameRenderer;
import net.minecraft.client.render.RenderTickCounter;
import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.entity.Entity;
import net.minecraft.entity.LivingEntity;
import net.minecraft.util.math.MathHelper;
import net.minecraft.util.math.RotationAxis;
import org.joml.Matrix4f;
import org.lwjgl.opengl.GL43;
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.Unique;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.Redirect;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;

import static dev.client.util.IUtil.tickCounter;

@Environment(EnvType.CLIENT)
@Mixin(GameRenderer.class)
public abstract class MixinGameRenderer implements IMixinGameRenderer {
    @Shadow private boolean renderingPanorama;
    @Shadow private float lastFovMultiplier;
    @Shadow private float fovMultiplier;

    @Unique private SimpleFramebuffer wild$beforeHandFbo = null;
    @Unique private SimpleFramebuffer wild$withHandFbo = null;
    @Shadow @Final
    MinecraftClient client;

    public float getFov2(Camera camera, float tickDelta, boolean changingFov) {
        if (this.renderingPanorama) {
            return 90.0F;
        }

        float fov = 70.0F;
        if (changingFov) {
            fov = (float) (int) MinecraftClient.getInstance().options.getFov().getValue();
            fov *= MathHelper.lerp(tickDelta, this.lastFovMultiplier, this.fovMultiplier);
        }

        Entity focused = camera.getFocusedEntity();
        if (focused instanceof LivingEntity living) {
            if (living.isDead()) {
                float deathTime = Math.min((float) living.deathTime + tickDelta, 20.0F);
                fov /= (1.0F - 500.0F / (deathTime + 500.0F)) * 2.0F + 1.0F;
            }
        }

        CameraSubmersionType submersion = camera.getSubmersionType();
        if (submersion == CameraSubmersionType.LAVA || submersion == CameraSubmersionType.WATER) {
            float scale = ((Double) MinecraftClient.getInstance().options.getFovEffectScale().getValue()).floatValue();
            fov *= MathHelper.lerp(scale, 1.0F, 0.85714287F);
        }

        return fov;
    }

    @Inject(method = "renderWorld", at = @At("HEAD"))
    public void hookWorldRender(RenderTickCounter tickCounter, CallbackInfo ci) {
        Camera camera = this.client.gameRenderer.getCamera();
        MatrixStack matrixStack = new MatrixStack();

        matrixStack.multiplyPositionMatrix(new Matrix4f(RenderSystem.getProjectionMatrix()));

        matrixStack.translate((float) -camera.getPos().x, (float) -camera.getPos().y, (float) -camera.getPos().z);

        RenderUtil3D.getInstance().savedCamPos = camera.getPos();


        WildClient.INSTANCE.getEventManager().getWorldRenderEvent().update(tickCounter, matrixStack);
        WildClient.INSTANCE.getEventManager().hookEvent(WildClient.INSTANCE.getEventManager().getWorldRenderEvent());

        RenderUtil3D.getInstance().lastWorldSpaceMatrix = matrixStack.peek();
        RenderUtil3D.getInstance().onRender3D();
    }


    @Inject(
            method = "render",
            at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/WorldRenderer;render(Lnet/minecraft/client/render/RenderTickCounter;ZLnet/minecraft/client/render/Camera;Lnet/minecraft/client/render/GameRenderer;Lnet/minecraft/client/render/LightmapTextureManager;Lorg/joml/Matrix4f;Lorg/joml/Matrix4f;)V")
    )
    private void onRender3d(RenderTickCounter tickCounter, boolean renderBlockOutline, Camera camera, Matrix4f projectionMatrix, Matrix4f modelViewMatrix, CallbackInfo ci) {
        MatrixStack stack = new MatrixStack();
        stack.multiplyPositionMatrix(modelViewMatrix);
        RenderUtil3D.getInstance().savedCamPos = camera.getPos();
        WildClient.INSTANCE.getEventManager().getWorldRenderEvent().update(tickCounter, stack);
        WildClient.INSTANCE.getEventManager().hookEvent(WildClient.INSTANCE.getEventManager().getWorldRenderEvent());
        RenderUtil3D.getInstance().lastWorldSpaceMatrix = stack.peek();
        RenderUtil3D.getInstance().onRender3D();
    }

    @Redirect(
            method = "renderWorld",
            at = @At(value = "INVOKE", target = "Lnet/minecraft/util/math/MathHelper;lerp(FFF)F")
    )
    private float renderWorldHook(float delta, float first, float second) {
        NoRender noRender = (NoRender) WildClient.INSTANCE.getModuleManager().getByClass(NoRender.class);
        if (noRender.isEnabled() && noRender.options.getValueByName("Nausea")) {
            return 0.0F;
        }
        return MathHelper.lerp(delta, first, second);
    }

    @Inject(method = "tiltViewWhenHurt", at = @At("HEAD"), cancellable = true)
    private void tiltViewWhenHurtHook(MatrixStack matrices, float tickDelta, CallbackInfo ci) {
        NoRender noRender = (NoRender) WildClient.INSTANCE.getModuleManager().getByClass(NoRender.class);
        if (noRender.isEnabled() && noRender.options.getValueByName("NoHurtCam")) {
            ci.cancel();
        }
    }

    @Inject(method = "renderHand", at = @At("HEAD"))
    private void morbid$beforeHand(Camera camera, float tickDelta, Matrix4f matrix4f, CallbackInfo ci) {
        Framebuffer main = MinecraftClient.getInstance().getFramebuffer();
        if (main.getColorAttachment() != 0) {
            this.wild$beforeHandFbo = this.morbid$ensureFbo(this.wild$beforeHandFbo, main);
            this.morbid$copyGL(main, this.wild$beforeHandFbo);
        }
    }

    @Inject(method = "renderHand", at = @At("TAIL"))
    private void morbid$afterHand(Camera camera, float tickDelta, Matrix4f matrix4f, CallbackInfo ci) {
        Framebuffer main = MinecraftClient.getInstance().getFramebuffer();
        if (main.getColorAttachment() != 0 && this.wild$beforeHandFbo != null) {
            this.wild$withHandFbo = this.morbid$ensureFbo(this.wild$withHandFbo, main);
            this.morbid$copyGL(main, this.wild$withHandFbo);
            WildClient.INSTANCE.getEventManager().hookEvent(new ShaderEvent(this.wild$beforeHandFbo, this.wild$withHandFbo));
        }
    }

    @Unique
    private SimpleFramebuffer morbid$ensureFbo(SimpleFramebuffer fbo, Framebuffer ref) {
        if (fbo == null) {
            return new SimpleFramebuffer(ref.textureWidth, ref.textureHeight, false);
        }
        if (fbo.textureWidth != ref.textureWidth || fbo.textureHeight != ref.textureHeight) {
            fbo.resize(ref.textureWidth, ref.textureHeight);
        }
        return fbo;
    }

    @Unique
    private void morbid$copyGL(Framebuffer src, SimpleFramebuffer dst) {
        if (src.getColorAttachment() != 0 && dst.getColorAttachment() != 0) {
            GL43.glCopyImageSubData(
                    src.getColorAttachment(), 3553, 0, 0, 0, 0,
                    dst.getColorAttachment(), 3553, 0, 0, 0, 0,
                    src.textureWidth, src.textureHeight, 1
            );
        }
    }
}

Caused by: org.spongepowered.asm.mixin.transformer.throwables.MixinTransformerError: An unexpected critical error was encountered
Caused by: org.spongepowered.asm.mixin.injection.throwables.InjectionError: Critical injection failure: Callback method onRender3d(ZLnet/minecraft/client/render/Camera;Lorg/joml/Matrix4f;Lorg/joml/Matrix4f;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V in wild.client.mixins.json:MixinGameRenderer from mod wild failed injection check, (0/1) succeeded. Scanned 0 target(s). No refMap loaded.

Думаю понятно что я имел ввиду
Хочу объяснить для людей который скажут через ии почини 3 дня подряд занимаюсь этой хуетой и если ии фиксить то просто помогает хотя бы запустить а даже chinahat не работает брал ориг код с залупой через официальный сайт чекал что это вставлял ошибка и это пиздец надеюсь объяснил
wildclient
 
Назад
Сверху Снизу