add fabric 1.21.9 support
This commit is contained in:
@@ -104,13 +104,6 @@ public class FabricClientProxy implements AbstractModInitializer.IEventProxy
|
||||
LOGGER.info("Registering Fabric Client Events");
|
||||
|
||||
|
||||
#if MC_VER < MC_1_21_9
|
||||
// old versions still run like normal
|
||||
#else
|
||||
if (true)
|
||||
throw new UnsupportedOperationException("DH doesn't support 1.21.9 yet because the Fabric Rendering API is missing required events. Please wait for the Fabric team to update their API.");
|
||||
#endif
|
||||
|
||||
|
||||
//========================//
|
||||
// register mod accessors //
|
||||
@@ -230,91 +223,77 @@ public class FabricClientProxy implements AbstractModInitializer.IEventProxy
|
||||
#if MC_VER < MC_1_21_9
|
||||
WorldRenderEvents.AFTER_SETUP.register((renderContext) ->
|
||||
{
|
||||
Mat4f projectionMatrix = McObjectConverter.Convert(renderContext.projectionMatrix());
|
||||
ClientApi.RENDER_STATE.mcProjectionMatrix = McObjectConverter.Convert(renderContext.projectionMatrix());
|
||||
|
||||
Mat4f modelViewMatrix;
|
||||
#if MC_VER < MC_1_20_6
|
||||
modelViewMatrix = McObjectConverter.Convert(renderContext.matrixStack().last().pose());
|
||||
ClientApi.RENDER_STATE.mcModelViewMatrix = McObjectConverter.Convert(renderContext.matrixStack().last().pose());
|
||||
#else
|
||||
modelViewMatrix = McObjectConverter.Convert(renderContext.positionMatrix());
|
||||
ClientApi.RENDER_STATE.mcModelViewMatrix = McObjectConverter.Convert(renderContext.positionMatrix());
|
||||
#endif
|
||||
|
||||
#if MC_VER < MC_1_21_1
|
||||
ClientApi.RENDER_STATE.frameTime = renderContext.tickDelta();
|
||||
#else
|
||||
ClientApi.RENDER_STATE.frameTime = renderContext.tickCounter().getGameTimeDeltaTicks();
|
||||
#endif
|
||||
|
||||
//LOGGER.info("\n\n" +
|
||||
// "Level Render\n" +
|
||||
// "Mc MVM: \n" + modelViewMatrix.toString() + "\n" +
|
||||
// "Mc Proj: \n" + projectionMatrix.toString()
|
||||
//);
|
||||
ClientApi.RENDER_STATE.clientLevelWrapper = ClientLevelWrapper.getWrapperIfDifferent(ClientApi.RENDER_STATE.clientLevelWrapper, renderContext.world());
|
||||
|
||||
|
||||
this.clientApi.renderLods(ClientLevelWrapper.getWrapper(renderContext.world()),
|
||||
modelViewMatrix,
|
||||
projectionMatrix,
|
||||
#if MC_VER < MC_1_21_1
|
||||
renderContext.tickDelta()
|
||||
#else
|
||||
renderContext.tickCounter().getGameTimeDeltaTicks()
|
||||
#endif
|
||||
);
|
||||
this.clientApi.renderLods();
|
||||
});
|
||||
|
||||
|
||||
WorldRenderEvents.AFTER_ENTITIES.register((renderContext) ->
|
||||
{
|
||||
Mat4f projectionMatrix = McObjectConverter.Convert(renderContext.projectionMatrix());
|
||||
ClientApi.RENDER_STATE.mcProjectionMatrix = McObjectConverter.Convert(renderContext.projectionMatrix());
|
||||
|
||||
Mat4f modelViewMatrix;
|
||||
#if MC_VER < MC_1_20_6
|
||||
modelViewMatrix = McObjectConverter.Convert(renderContext.matrixStack().last().pose());
|
||||
ClientApi.RENDER_STATE.mcModelViewMatrix = McObjectConverter.Convert(renderContext.matrixStack().last().pose());
|
||||
#else
|
||||
modelViewMatrix = McObjectConverter.Convert(renderContext.positionMatrix());
|
||||
ClientApi.RENDER_STATE.mcModelViewMatrix = McObjectConverter.Convert(renderContext.positionMatrix());
|
||||
#endif
|
||||
|
||||
this.clientApi.renderFadeOpaque(
|
||||
modelViewMatrix,
|
||||
projectionMatrix,
|
||||
#if MC_VER < MC_1_21_1
|
||||
renderContext.tickDelta(),
|
||||
#else
|
||||
renderContext.tickCounter().getGameTimeDeltaTicks(),
|
||||
#endif
|
||||
ClientLevelWrapper.getWrapper(renderContext.world())
|
||||
);
|
||||
#if MC_VER < MC_1_21_1
|
||||
ClientApi.RENDER_STATE.frameTime = renderContext.tickDelta();
|
||||
#else
|
||||
ClientApi.RENDER_STATE.frameTime = renderContext.tickCounter().getGameTimeDeltaTicks();
|
||||
#endif
|
||||
|
||||
ClientApi.RENDER_STATE.clientLevelWrapper = ClientLevelWrapper.getWrapperIfDifferent(ClientApi.RENDER_STATE.clientLevelWrapper, renderContext.world());
|
||||
|
||||
|
||||
this.clientApi.renderFadeOpaque();
|
||||
});
|
||||
|
||||
// TODO add to forge and neo
|
||||
WorldRenderEvents.AFTER_TRANSLUCENT.register((renderContext) ->
|
||||
{
|
||||
Mat4f projectionMatrix = McObjectConverter.Convert(renderContext.projectionMatrix());
|
||||
ClientApi.RENDER_STATE.mcProjectionMatrix = McObjectConverter.Convert(renderContext.projectionMatrix());
|
||||
|
||||
Mat4f modelViewMatrix;
|
||||
#if MC_VER < MC_1_20_6
|
||||
modelViewMatrix = McObjectConverter.Convert(renderContext.matrixStack().last().pose());
|
||||
ClientApi.RENDER_STATE.mcModelViewMatrix = McObjectConverter.Convert(renderContext.matrixStack().last().pose());
|
||||
#else
|
||||
modelViewMatrix = McObjectConverter.Convert(renderContext.positionMatrix());
|
||||
ClientApi.RENDER_STATE.mcModelViewMatrix = McObjectConverter.Convert(renderContext.positionMatrix());
|
||||
#endif
|
||||
|
||||
#if MC_VER < MC_1_21_1
|
||||
ClientApi.RENDER_STATE.frameTime = renderContext.tickDelta();
|
||||
#else
|
||||
ClientApi.RENDER_STATE.frameTime = renderContext.tickCounter().getGameTimeDeltaTicks();
|
||||
#endif
|
||||
|
||||
ClientApi.RENDER_STATE.clientLevelWrapper = ClientLevelWrapper.getWrapperIfDifferent(ClientApi.RENDER_STATE.clientLevelWrapper, renderContext.world());
|
||||
|
||||
|
||||
|
||||
|
||||
#if MC_VER < MC_1_21_6
|
||||
// rendered in MixinLevelRenderer
|
||||
#else
|
||||
ClientApi.INSTANCE.renderDeferredLodsForShaders(ClientLevelWrapper.getWrapper(renderContext.world()),
|
||||
ClientApi.RENDER_STATE.mcModelViewMatrix,
|
||||
ClientApi.RENDER_STATE.mcProjectionMatrix,
|
||||
ClientApi.RENDER_STATE.frameTime
|
||||
);
|
||||
ClientApi.INSTANCE.renderDeferredLodsForShaders(ClientLevelWrapper.getWrapper();
|
||||
#endif
|
||||
|
||||
this.clientApi.renderFade(
|
||||
modelViewMatrix,
|
||||
projectionMatrix,
|
||||
#if MC_VER < MC_1_21_1
|
||||
renderContext.tickDelta(),
|
||||
#else
|
||||
renderContext.tickCounter().getGameTimeDeltaTicks(),
|
||||
#endif
|
||||
ClientLevelWrapper.getWrapper(renderContext.world())
|
||||
);
|
||||
this.clientApi.renderFade();
|
||||
});
|
||||
#endif
|
||||
|
||||
|
||||
+71
@@ -0,0 +1,71 @@
|
||||
/*
|
||||
* This file is part of the Distant Horizons mod
|
||||
* licensed under the GNU LGPL v3 License.
|
||||
*
|
||||
* Copyright (C) 2020 James Seibel
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, version 3.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
package com.seibel.distanthorizons.fabric.mixins.client;
|
||||
|
||||
#if MC_VER < MC_1_21_9
|
||||
import net.minecraft.world.entity.Entity;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
|
||||
@Mixin(Entity.class)
|
||||
public class MixinChunkSectionsToRender
|
||||
{ /* rendering before was handled via Fabric API events */ }
|
||||
#else
|
||||
|
||||
import com.seibel.distanthorizons.common.wrappers.world.ClientLevelWrapper;
|
||||
import com.seibel.distanthorizons.core.api.internal.ClientApi;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.renderer.chunk.ChunkSectionLayerGroup;
|
||||
import net.minecraft.client.renderer.chunk.ChunkSectionsToRender;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.injection.At;
|
||||
import org.spongepowered.asm.mixin.injection.Inject;
|
||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||
|
||||
@Mixin(ChunkSectionsToRender.class)
|
||||
public class MixinChunkSectionsToRender
|
||||
{
|
||||
|
||||
|
||||
// needs to fire at HEAD otherwise it will be canceled by Sodium
|
||||
@Inject(at = @At("HEAD"), method = "renderGroup")
|
||||
private void renderGroup(ChunkSectionLayerGroup chunkSectionLayerGroup, CallbackInfo ci)
|
||||
{
|
||||
if (!ClientApi.RENDER_STATE.canRender()) // TODO is this needed?
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
ClientApi.RENDER_STATE.clientLevelWrapper = ClientLevelWrapper.getWrapperIfDifferent(ClientApi.RENDER_STATE.clientLevelWrapper, Minecraft.getInstance().levelRenderer.level);
|
||||
|
||||
|
||||
if (chunkSectionLayerGroup == ChunkSectionLayerGroup.OPAQUE)
|
||||
{
|
||||
ClientApi.INSTANCE.renderFadeOpaque();
|
||||
}
|
||||
else if (chunkSectionLayerGroup == ChunkSectionLayerGroup.TRANSLUCENT)
|
||||
{
|
||||
ClientApi.INSTANCE.renderDeferredLodsForShaders();
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
+4
-1
@@ -12,12 +12,15 @@ import java.util.List;
|
||||
@Mixin(DebugScreenOverlay.class)
|
||||
public class MixinDebugScreenOverlay
|
||||
{
|
||||
|
||||
#if MC_VER < MC_1_21_9
|
||||
@Inject(method = "getSystemInformation", at = @At("RETURN"))
|
||||
private void addCustomF3(CallbackInfoReturnable<List<String>> cir)
|
||||
{
|
||||
List<String> messages = cir.getReturnValue();
|
||||
F3Screen.addStringToDisplay(messages);
|
||||
}
|
||||
#else
|
||||
// handled by DhDebugScreenEntry for MC versions after 1.21.9
|
||||
#endif
|
||||
|
||||
}
|
||||
|
||||
+69
-16
@@ -31,8 +31,19 @@ import com.mojang.blaze3d.vertex.PoseStack;
|
||||
import org.joml.Matrix4f;
|
||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||
#else
|
||||
import com.mojang.blaze3d.buffers.GpuBufferSlice;
|
||||
import com.mojang.blaze3d.framegraph.FrameGraphBuilder;
|
||||
import com.mojang.blaze3d.resource.GraphicsResourceAllocator;
|
||||
import net.minecraft.client.Camera;
|
||||
import net.minecraft.client.DeltaTracker;
|
||||
import net.minecraft.client.renderer.chunk.ChunkSectionsToRender;
|
||||
import net.minecraft.client.renderer.culling.Frustum;
|
||||
import net.minecraft.client.renderer.state.LevelRenderState;
|
||||
import net.minecraft.util.profiling.ProfilerFiller;
|
||||
import org.joml.Matrix4f;
|
||||
import org.joml.Matrix4fc;
|
||||
import org.joml.Vector4f;
|
||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
|
||||
#endif
|
||||
|
||||
@@ -41,11 +52,9 @@ import com.seibel.distanthorizons.common.wrappers.McObjectConverter;
|
||||
import com.seibel.distanthorizons.common.wrappers.world.ClientLevelWrapper;
|
||||
import com.seibel.distanthorizons.core.api.internal.ClientApi;
|
||||
import com.seibel.distanthorizons.coreapi.ModInfo;
|
||||
import com.seibel.distanthorizons.fabric.FabricClientProxy;
|
||||
import com.seibel.distanthorizons.core.util.math.Mat4f;
|
||||
import com.seibel.distanthorizons.core.logging.DhLoggerBuilder;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import com.seibel.distanthorizons.core.config.Config;
|
||||
import net.minecraft.client.multiplayer.ClientLevel;
|
||||
import net.minecraft.client.renderer.LevelRenderer;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
@@ -57,6 +66,7 @@ import org.spongepowered.asm.mixin.injection.Inject;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
|
||||
|
||||
|
||||
@Mixin(LevelRenderer.class)
|
||||
public class MixinLevelRenderer
|
||||
{
|
||||
@@ -92,9 +102,16 @@ public class MixinLevelRenderer
|
||||
method = "Lnet/minecraft/client/renderer/LevelRenderer;renderSectionLayer(Lnet/minecraft/client/renderer/RenderType;DDDLorg/joml/Matrix4f;Lorg/joml/Matrix4f;)V",
|
||||
cancellable = true)
|
||||
private void renderChunkLayer(RenderType renderType, double x, double y, double z, Matrix4f projectionMatrix, Matrix4f frustumMatrix, CallbackInfo callback)
|
||||
#else
|
||||
#elif MC_VER < MC_1_21_9
|
||||
@Inject(at = @At("HEAD"), method = "prepareChunkRenders", cancellable = true)
|
||||
private void prepareChunkRenders(Matrix4fc projectionMatrix, double d, double e, double f, CallbackInfoReturnable<ChunkSectionsToRender> callback)
|
||||
#else
|
||||
@Inject(at = @At("HEAD"), method = "renderLevel")
|
||||
private void renderLevel(
|
||||
GraphicsResourceAllocator resourceAllocator, DeltaTracker deltaTracker,
|
||||
boolean renderBlockOutline, Camera camera,
|
||||
Matrix4f positionMatrix, Matrix4f projectionMatrix, Matrix4f idkMatrix, GpuBufferSlice gpuBufferSlice,
|
||||
Vector4f skyColor, boolean thinFog, CallbackInfo callback)
|
||||
#endif
|
||||
{
|
||||
#if MC_VER == MC_1_16_5
|
||||
@@ -110,11 +127,14 @@ public class MixinLevelRenderer
|
||||
// get the matrices directly from MC
|
||||
ClientApi.RENDER_STATE.mcModelViewMatrix = McObjectConverter.Convert(modelViewMatrixStack.last().pose());
|
||||
ClientApi.RENDER_STATE.mcProjectionMatrix = McObjectConverter.Convert(projectionMatrix);
|
||||
#else
|
||||
// MC combined the model view and projection matricies
|
||||
#elif MC_VER < MC_1_21_9
|
||||
// MC combined the model view and projection matricies
|
||||
ClientApi.RENDER_STATE.mcModelViewMatrix = McObjectConverter.Convert(projectionMatrix);
|
||||
ClientApi.RENDER_STATE.mcProjectionMatrix = new Mat4f();
|
||||
ClientApi.RENDER_STATE.mcProjectionMatrix.setIdentity();
|
||||
#else
|
||||
ClientApi.RENDER_STATE.mcModelViewMatrix = McObjectConverter.Convert(positionMatrix);
|
||||
ClientApi.RENDER_STATE.mcProjectionMatrix = McObjectConverter.Convert(projectionMatrix);
|
||||
#endif
|
||||
|
||||
// TODO move this into a common place
|
||||
@@ -126,28 +146,61 @@ public class MixinLevelRenderer
|
||||
ClientApi.RENDER_STATE.frameTime = Minecraft.getInstance().deltaTracker.getRealtimeDeltaTicks();
|
||||
#endif
|
||||
|
||||
ClientApi.RENDER_STATE.clientLevelWrapper = ClientLevelWrapper.getWrapperIfDifferent(ClientApi.RENDER_STATE.clientLevelWrapper, this.level);
|
||||
|
||||
//LOGGER.info("\n\n" +
|
||||
// "Level Mixin\n" +
|
||||
// "Mc MVM: \n" + mcModelViewMatrix.toString() + "\n" +
|
||||
// "Mc Proj: \n" + mcProjectionMatrix.toString()
|
||||
//);
|
||||
|
||||
|
||||
#if MC_VER < MC_1_21_6
|
||||
if (renderType.equals(RenderType.translucent()))
|
||||
{
|
||||
ClientApi.INSTANCE.renderDeferredLodsForShaders(ClientLevelWrapper.getWrapper(this.level),
|
||||
ClientApi.RENDER_STATE.mcModelViewMatrix,
|
||||
ClientApi.RENDER_STATE.mcProjectionMatrix,
|
||||
ClientApi.RENDER_STATE.frameTime
|
||||
);
|
||||
ClientApi.INSTANCE.renderDeferredLodsForShaders();
|
||||
}
|
||||
#elif MC_VER < MC_1_21_9
|
||||
// rendering handled via Fabric Api render event
|
||||
#else
|
||||
// rendering handled via Fabric Api render event
|
||||
// handled here and in MixinChunkSectionsToRender
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
|
||||
#if MC_VER < MC_1_21_6
|
||||
// rendering handled via Fabric Api render event
|
||||
#else
|
||||
@Inject(at = @At("HEAD"), method = "prepareChunkRenders")
|
||||
private void prepareChunkRenders(Matrix4fc modelViewMatrix, double d, double e, double f, CallbackInfoReturnable<ChunkSectionsToRender> callback)
|
||||
{
|
||||
ClientApi.RENDER_STATE.mcModelViewMatrix = McObjectConverter.Convert(modelViewMatrix);
|
||||
ClientApi.RENDER_STATE.clientLevelWrapper = ClientLevelWrapper.getWrapperIfDifferent(ClientApi.RENDER_STATE.clientLevelWrapper, this.level);
|
||||
|
||||
// only crash during development
|
||||
if (ModInfo.IS_DEV_BUILD)
|
||||
{
|
||||
ClientApi.RENDER_STATE.canRenderOrThrow();
|
||||
}
|
||||
|
||||
ClientApi.INSTANCE.renderLods();
|
||||
|
||||
}
|
||||
|
||||
@Inject(at = @At("RETURN"), method = "renderLevel")
|
||||
private void postRenderLevel(GraphicsResourceAllocator graphicsResourceAllocator, DeltaTracker deltaTracker, boolean bl, Camera camera, Matrix4f matrix4f, Matrix4f matrix4f2, Matrix4f matrix4f3, GpuBufferSlice gpuBufferSlice, Vector4f vector4f, boolean bl2, CallbackInfo ci)
|
||||
{
|
||||
ClientApi.RENDER_STATE.clientLevelWrapper = ClientLevelWrapper.getWrapperIfDifferent(ClientApi.RENDER_STATE.clientLevelWrapper, this.level);
|
||||
ClientApi.RENDER_STATE.frameTime = deltaTracker.getGameTimeDeltaTicks();
|
||||
|
||||
// only crash during development
|
||||
if (ModInfo.IS_DEV_BUILD)
|
||||
{
|
||||
ClientApi.RENDER_STATE.canRenderOrThrow();
|
||||
}
|
||||
|
||||
ClientApi.INSTANCE.renderFade();
|
||||
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
"client.MixinDebugScreenOverlay",
|
||||
"client.MixinFogRenderer",
|
||||
"client.MixinLevelRenderer",
|
||||
"client.MixinChunkSectionsToRender",
|
||||
"client.MixinLightTexture",
|
||||
"client.MixinMinecraft",
|
||||
"client.MixinOptionsScreen",
|
||||
|
||||
Reference in New Issue
Block a user