Начинающий
- Статус
- Онлайн
- Регистрация
- 21 Фев 2024
- Сообщения
- 194
- Реакции
- 1
Кодик MixinGameRenderer:
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 не работает брал ориг код с залупой через официальный сайт чекал что это вставлял ошибка и это пиздец надеюсь объяснил
Последнее редактирование: