fix neoforge rendering on MC 26
This commit is contained in:
+1
-2
@@ -50,8 +50,8 @@ public class MixinChunkSectionsToRender
|
||||
//===========//
|
||||
// Pre MC 26 //
|
||||
//===========//
|
||||
//regino
|
||||
#if MC_VER <= MC_1_21_11
|
||||
//region
|
||||
|
||||
#if MC_VER <= MC_1_21_10
|
||||
// needs to fire at HEAD with a lower than normal order (less than 1000)
|
||||
@@ -78,7 +78,6 @@ public class MixinChunkSectionsToRender
|
||||
ClientApi.INSTANCE.renderFadeTransparent();
|
||||
}
|
||||
}
|
||||
|
||||
//endregion
|
||||
#else
|
||||
|
||||
|
||||
@@ -228,8 +228,10 @@ public class NeoforgeClientProxy implements AbstractModInitializer.IEventProxy
|
||||
{
|
||||
#if MC_VER < MC_1_21_9
|
||||
ClientApi.RENDER_STATE.clientLevelWrapper = ClientLevelWrapper.getWrapperIfDifferent(ClientApi.RENDER_STATE.clientLevelWrapper, (ClientLevel)event.getLevel());
|
||||
#else
|
||||
#elif MC_VER <= MC_1_21_11
|
||||
ClientApi.RENDER_STATE.clientLevelWrapper = ClientLevelWrapper.getWrapperIfDifferent(ClientApi.RENDER_STATE.clientLevelWrapper, event.getLevelRenderer().level);
|
||||
#else
|
||||
// handled via the same mixin as fabric for consistency
|
||||
#endif
|
||||
|
||||
ClientApi.INSTANCE.renderFadeOpaque();
|
||||
@@ -241,11 +243,11 @@ public class NeoforgeClientProxy implements AbstractModInitializer.IEventProxy
|
||||
{
|
||||
#if MC_VER < MC_1_21_9
|
||||
ClientApi.RENDER_STATE.clientLevelWrapper = ClientLevelWrapper.getWrapperIfDifferent(ClientApi.RENDER_STATE.clientLevelWrapper, (ClientLevel)event.getLevel());
|
||||
#else
|
||||
#elif MC_VER <= MC_1_21_11
|
||||
ClientApi.RENDER_STATE.clientLevelWrapper = ClientLevelWrapper.getWrapperIfDifferent(ClientApi.RENDER_STATE.clientLevelWrapper, event.getLevelRenderer().level);
|
||||
#else
|
||||
// handled via the same mixin as fabric for consistency
|
||||
#endif
|
||||
|
||||
ClientApi.INSTANCE.renderDeferredLodsForShaders();
|
||||
}
|
||||
|
||||
@SubscribeEvent
|
||||
@@ -253,8 +255,10 @@ public class NeoforgeClientProxy implements AbstractModInitializer.IEventProxy
|
||||
{
|
||||
#if MC_VER < MC_1_21_9
|
||||
ClientApi.RENDER_STATE.clientLevelWrapper = ClientLevelWrapper.getWrapperIfDifferent(ClientApi.RENDER_STATE.clientLevelWrapper, (ClientLevel)event.getLevel());
|
||||
#else
|
||||
#elif MC_VER <= MC_1_21_11
|
||||
ClientApi.RENDER_STATE.clientLevelWrapper = ClientLevelWrapper.getWrapperIfDifferent(ClientApi.RENDER_STATE.clientLevelWrapper, event.getLevelRenderer().level);
|
||||
#else
|
||||
// handled via the same mixin as fabric for consistency
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
+86
@@ -0,0 +1,86 @@
|
||||
/*
|
||||
* 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.neoforge.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.mojang.blaze3d.textures.GpuSampler;
|
||||
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;
|
||||
|
||||
#if MC_VER <= MC_1_21_10
|
||||
#else
|
||||
#endif
|
||||
|
||||
@Mixin(ChunkSectionsToRender.class)
|
||||
public class MixinChunkSectionsToRender
|
||||
{
|
||||
|
||||
//============//
|
||||
// post MC 26 //
|
||||
//============//
|
||||
//region
|
||||
|
||||
#if MC_VER <= MC_1_21_11
|
||||
#else
|
||||
|
||||
// needs to fire at HEAD with a lower than normal order (less than 1000)
|
||||
// otherwise it will be canceled by Sodium
|
||||
@Inject(at = @At("HEAD"), method = "renderGroup", order = 800)
|
||||
private void renderDeferredLayerHead(ChunkSectionLayerGroup chunkSectionLayerGroup, GpuSampler gpuSampler, CallbackInfo ci)
|
||||
{
|
||||
ClientApi.RENDER_STATE.clientLevelWrapper = ClientLevelWrapper.getWrapperIfDifferent(ClientApi.RENDER_STATE.clientLevelWrapper, Minecraft.getInstance().levelRenderer.level);
|
||||
|
||||
|
||||
ClientApi.RENDER_STATE.canRenderOrThrow();
|
||||
|
||||
if (chunkSectionLayerGroup == ChunkSectionLayerGroup.TRANSLUCENT)
|
||||
{
|
||||
ClientApi.INSTANCE.renderDeferredLodsForShaders();
|
||||
}
|
||||
else if (chunkSectionLayerGroup == ChunkSectionLayerGroup.OPAQUE)
|
||||
{
|
||||
ClientApi.INSTANCE.renderLods();
|
||||
}
|
||||
}
|
||||
|
||||
//endregion
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
+2
-20
@@ -44,8 +44,10 @@ import com.mojang.blaze3d.resource.GraphicsResourceAllocator;
|
||||
|
||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
|
||||
#else
|
||||
import com.mojang.blaze3d.textures.GpuSampler;
|
||||
import com.seibel.distanthorizons.common.wrappers.minecraft.MinecraftRenderWrapper;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.renderer.chunk.ChunkSectionLayerGroup;
|
||||
import net.minecraft.client.renderer.chunk.ChunkSectionsToRender;
|
||||
import net.minecraft.client.Camera;
|
||||
import net.minecraft.client.DeltaTracker;
|
||||
@@ -223,26 +225,6 @@ public class MixinLevelRenderer
|
||||
|
||||
}
|
||||
|
||||
@Inject(
|
||||
method = "addMainPass(Lcom/mojang/blaze3d/framegraph/FrameGraphBuilder;Lnet/minecraft/client/renderer/culling/Frustum;Lorg/joml/Matrix4fc;Lcom/mojang/blaze3d/buffers/GpuBufferSlice;ZLnet/minecraft/client/renderer/state/level/LevelRenderState;Lnet/minecraft/client/DeltaTracker;Lnet/minecraft/util/profiling/ProfilerFiller;Lnet/minecraft/client/renderer/chunk/ChunkSectionsToRender;)V",
|
||||
at = @At(
|
||||
value = "RETURN",
|
||||
target = "Lcom/mojang/blaze3d/framegraph/FramePass;executes(Ljava/lang/Runnable;)V",
|
||||
remap = false
|
||||
)
|
||||
)
|
||||
public void addMainPass(CallbackInfo ci)
|
||||
{
|
||||
// only crash during development
|
||||
if (ModInfo.IS_DEV_BUILD)
|
||||
{
|
||||
ClientApi.RENDER_STATE.canRenderOrThrow();
|
||||
}
|
||||
|
||||
ClientApi.INSTANCE.renderLods();
|
||||
|
||||
}
|
||||
|
||||
#endif
|
||||
//endregion
|
||||
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
"client.MixinClientPacketListener",
|
||||
"client.MixinDebugScreenOverlay",
|
||||
"client.MixinFogRenderer",
|
||||
"client.MixinChunkSectionsToRender",
|
||||
"client.MixinGameRenderer",
|
||||
"client.MixinLevelRenderer",
|
||||
"client.MixinLightTexture",
|
||||
|
||||
Reference in New Issue
Block a user