XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet

MyDimension-Lord

【我的世界】我的维度附属模组:维度之主

公开
关注 0 Fork 0 Star 0
UTF-8
// Native Minecraft 1.21.11
package com.xfestudio.mydimensionlord.platform;

import com.mojang.blaze3d.framegraph.FramePass;
import net.minecraft.client.Minecraft;
import net.minecraft.client.DeltaTracker;
import net.minecraft.client.renderer.LevelTargetBundle;
import net.minecraft.client.renderer.culling.Frustum;
import net.minecraft.client.renderer.state.LevelRenderState;
import net.minecraft.resources.Identifier;
import net.minecraft.world.phys.Vec3;
import net.minecraftforge.client.FramePassManager;
import net.minecraftforge.client.event.AddFramePassEvent;
import org.joml.Matrix4f;
import org.joml.Quaternionf;

public record RenderFrame(Vec3 camera, Frustum frustum, float partialTick, Matrix4f getModelViewMatrix) {
    public static void register(AddFramePassEvent event) {
        event.addPass(Identifier.fromNamespaceAndPath("mydimension", "builder_preview"), new FramePassManager.PassDefinition() {
            private float partial;
            @Override public void extracts(LevelTargetBundle targets, FramePass pass, DeltaTracker delta) {
                targets.main = pass.readsAndWrites(targets.main);
                partial = delta.getGameTimeDeltaPartialTick(false);
            }
            @Override public void executes(LevelRenderState state) {
                Minecraft minecraft = Minecraft.getInstance();
                var camera = state.cameraRenderState;
                Matrix4f view = new Matrix4f().rotation(new Quaternionf(camera.orientation).conjugate());
                float fov = minecraft.gameRenderer.getFov(minecraft.gameRenderer.getMainCamera(), partial, true);
                Frustum frustum = new Frustum(view, minecraft.gameRenderer.getProjectionMatrixForCulling(fov));
                frustum.prepare(camera.pos.x, camera.pos.y, camera.pos.z);
                com.xfestudio.mydimensionlord.client.builder.BuilderPreviewRenderer.render(new RenderFrame(camera.pos, frustum, partial, view));
            }
        });
    }
}