1.21 Port III

This commit is contained in:
IThundxr 2024-07-10 12:51:47 -04:00
parent d0924175de
commit e374365ce4
No known key found for this signature in database
GPG Key ID: E291EC97BAF935E6
9 changed files with 38 additions and 27 deletions

View File

@ -2,7 +2,7 @@
"required": true, "required": true,
"minVersion": "0.8", "minVersion": "0.8",
"package": "dev.engine_room.flywheel.backend.mixin", "package": "dev.engine_room.flywheel.backend.mixin",
"compatibilityLevel": "JAVA_17", "compatibilityLevel": "JAVA_21",
"refmap": "backend-flywheel.refmap.json", "refmap": "backend-flywheel.refmap.json",
"client": [ "client": [
"AbstractClientPlayerAccessor", "AbstractClientPlayerAccessor",

View File

@ -13,8 +13,11 @@ import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.At.Shift; import org.spongepowered.asm.mixin.injection.At.Shift;
import org.spongepowered.asm.mixin.injection.Group; import org.spongepowered.asm.mixin.injection.Group;
import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.Redirect;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import com.llamalad7.mixinextras.sugar.Share;
import com.llamalad7.mixinextras.sugar.ref.LocalRef;
import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.PoseStack;
import dev.engine_room.flywheel.api.event.RenderStage; import dev.engine_room.flywheel.api.event.RenderStage;
@ -23,6 +26,7 @@ import dev.engine_room.flywheel.impl.event.RenderContextImpl;
import dev.engine_room.flywheel.impl.visualization.VisualizationManagerImpl; import dev.engine_room.flywheel.impl.visualization.VisualizationManagerImpl;
import it.unimi.dsi.fastutil.longs.Long2ObjectMap; import it.unimi.dsi.fastutil.longs.Long2ObjectMap;
import net.minecraft.client.Camera; import net.minecraft.client.Camera;
import net.minecraft.client.DeltaTracker;
import net.minecraft.client.multiplayer.ClientLevel; import net.minecraft.client.multiplayer.ClientLevel;
import net.minecraft.client.renderer.GameRenderer; import net.minecraft.client.renderer.GameRenderer;
import net.minecraft.client.renderer.LevelRenderer; import net.minecraft.client.renderer.LevelRenderer;
@ -50,12 +54,18 @@ abstract class LevelRendererMixin {
// @Inject(method = "renderLevel", at = @At("HEAD")) // @Inject(method = "renderLevel", at = @At("HEAD"))
@Inject(method = "renderLevel", at = @At(value = "INVOKE_ASSIGN", target = "Lnet/minecraft/world/level/lighting/LevelLightEngine;runLightUpdates()I")) @Inject(method = "renderLevel", at = @At(value = "INVOKE_ASSIGN", target = "Lnet/minecraft/world/level/lighting/LevelLightEngine;runLightUpdates()I"))
private void flywheel$beginRender(PoseStack poseStack, float partialTick, long finishNanoTime, boolean renderBlockOutline, Camera camera, GameRenderer gameRenderer, LightTexture lightTexture, Matrix4f projectionMatrix, CallbackInfo ci) { private void flywheel$beginRender(DeltaTracker deltaTracker, boolean renderBlockOutline, Camera camera, GameRenderer gameRenderer, LightTexture lightTexture, Matrix4f frustumMatrix, Matrix4f projectionMatrix, CallbackInfo ci, @Share("flywheel$poseStack") LocalRef<PoseStack> poseStack) {
flywheel$renderContext = RenderContextImpl.create((LevelRenderer) (Object) this, level, renderBuffers, poseStack, projectionMatrix, camera, partialTick); PoseStack flywheel$poseStack = new PoseStack();
flywheel$renderContext = RenderContextImpl.create((LevelRenderer) (Object) this, level, renderBuffers, flywheel$poseStack, projectionMatrix, camera, deltaTracker.getGameTimeDeltaTicks());
FlwImplXplat.INSTANCE.dispatchBeginFrameEvent(flywheel$renderContext); FlwImplXplat.INSTANCE.dispatchBeginFrameEvent(flywheel$renderContext);
} }
@Redirect(method = "renderLevel", at = @At(value = "NEW", target = "()Lcom/mojang/blaze3d/vertex/PoseStack;"))
private PoseStack flywheel$fixPoseStack(@Share("flywheel$poseStack") LocalRef<PoseStack> poseStack) {
return poseStack.get();
}
@Inject(method = "renderLevel", at = @At("RETURN")) @Inject(method = "renderLevel", at = @At("RETURN"))
private void flywheel$endRender(CallbackInfo ci) { private void flywheel$endRender(CallbackInfo ci) {
flywheel$renderContext = null; flywheel$renderContext = null;
@ -102,19 +112,19 @@ abstract class LevelRendererMixin {
flywheel$dispatch(RenderStage.AFTER_TRANSLUCENT_TERRAIN); flywheel$dispatch(RenderStage.AFTER_TRANSLUCENT_TERRAIN);
} }
@Inject(method = "renderLevel", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/LevelRenderer;renderSectionLayer(Lnet/minecraft/client/renderer/RenderType;Lcom/mojang/blaze3d/vertex/PoseStack;DDDLorg/joml/Matrix4f;)V", ordinal = 6, shift = Shift.AFTER)) @Inject(method = "renderLevel", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/LevelRenderer;renderSectionLayer(Lnet/minecraft/client/renderer/RenderType;DDDLorg/joml/Matrix4f;Lorg/joml/Matrix4f;)V", ordinal = 6, shift = Shift.AFTER))
private void flywheel$onStage$afterTranslucentTerrain(CallbackInfo ci) { private void flywheel$onStage$afterTranslucentTerrain(CallbackInfo ci) {
flywheel$dispatch(RenderStage.AFTER_TRANSLUCENT_TERRAIN); flywheel$dispatch(RenderStage.AFTER_TRANSLUCENT_TERRAIN);
} }
@Group(name = "onStage$afterParticles", min = 2, max = 2) @Group(name = "onStage$afterParticles", min = 2, max = 2)
@Inject(method = "renderLevel", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/particle/ParticleEngine;render(Lcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/MultiBufferSource$BufferSource;Lnet/minecraft/client/renderer/LightTexture;Lnet/minecraft/client/Camera;F)V", shift = Shift.AFTER)) @Inject(method = "renderLevel", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/particle/ParticleEngine;render(Lnet/minecraft/client/renderer/LightTexture;Lnet/minecraft/client/Camera;F)V", shift = Shift.AFTER))
private void flywheel$onStage$afterParticles$fabric(CallbackInfo ci) { private void flywheel$onStage$afterParticles$fabric(CallbackInfo ci) {
flywheel$dispatch(RenderStage.AFTER_PARTICLES); flywheel$dispatch(RenderStage.AFTER_PARTICLES);
} }
@Group(name = "onStage$afterParticles") @Group(name = "onStage$afterParticles")
@Inject(method = "renderLevel", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/particle/ParticleEngine;render(Lcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/MultiBufferSource$BufferSource;Lnet/minecraft/client/renderer/LightTexture;Lnet/minecraft/client/Camera;FLnet/minecraft/client/renderer/culling/Frustum;)V", shift = Shift.AFTER)) @Inject(method = "renderLevel", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/particle/ParticleEngine;render(Lnet/minecraft/client/renderer/LightTexture;Lnet/minecraft/client/Camera;FLnet/minecraft/client/renderer/culling/Frustum;Ljava/util/function/Predicate;)V", shift = Shift.AFTER))
private void flywheel$onStage$afterParticles$forge(CallbackInfo ci) { private void flywheel$onStage$afterParticles$forge(CallbackInfo ci) {
flywheel$dispatch(RenderStage.AFTER_PARTICLES); flywheel$dispatch(RenderStage.AFTER_PARTICLES);
} }

View File

@ -4,7 +4,6 @@ import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.At.Shift; import org.spongepowered.asm.mixin.injection.At.Shift;
import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.ModifyArg;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.PoseStack;
@ -17,20 +16,21 @@ abstract class FixNormalScalingMixin {
* applied, which negates the matrix again, resulting in the matrix being the * applied, which negates the matrix again, resulting in the matrix being the
* same as in the beginning. * same as in the beginning.
*/ */
@Inject(method = "scale(FFF)V", at = @At(value = "INVOKE", target = "Lorg/joml/Matrix3f;scale(F)Lorg/joml/Matrix3f;", shift = Shift.AFTER, remap = false), cancellable = true) @Inject(method = "scale(FFF)V", at = @At(value = "INVOKE", target = "Lorg/joml/Matrix4f;scale(FFF)Lorg/joml/Matrix4f;", shift = Shift.AFTER, remap = false), cancellable = true)
private void flywheel$returnAfterNegate(float x, float y, float z, CallbackInfo ci) { private void flywheel$returnAfterNegate(float x, float y, float z, CallbackInfo ci) {
ci.cancel(); ci.cancel();
} }
/** //fixme not needed anymore?
* Minecraft takes the inverse cube root of the product of all scales to provide a // /**
* rough estimate for normalization so that it does not need to be done later. It // * Minecraft takes the inverse cube root of the product of all scales to provide a
* does not make sense for this "normalization factor" to be negative though, as // * rough estimate for normalization so that it does not need to be done later. It
* that would invert all normals. Additionally, Minecraft's fastInvCubeRoot method // * does not make sense for this "normalization factor" to be negative though, as
* does not work for negative numbers. // * that would invert all normals. Additionally, Minecraft's fastInvCubeRoot method
*/ // * does not work for negative numbers.
@ModifyArg(method = "scale(FFF)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/util/Mth;fastInvCubeRoot(F)F")) // */
private float flywheel$absInvCbrtInput(float input) { // @ModifyArg(method = "scale(FFF)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/util/Mth;fastInvCubeRoot(F)F"))
return Math.abs(input); // private float flywheel$absInvCbrtInput(float input) {
} // return Math.abs(input);
// }
} }

View File

@ -7,11 +7,12 @@ import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import dev.engine_room.flywheel.lib.visual.VisualizationHelper; import dev.engine_room.flywheel.lib.visual.VisualizationHelper;
import net.minecraft.client.renderer.chunk.SectionCompiler;
import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.entity.BlockEntity;
@Mixin(targets = "net.minecraft.client.renderer.chunk.SectionRenderDispatcher$RenderSection$RebuildTask") @Mixin(SectionCompiler.class)
abstract class RebuildTaskMixin { abstract class SectionCompilerMixin {
@Inject(method = "handleBlockEntity(Lnet/minecraft/client/renderer/chunk/SectionRenderDispatcher$RenderSection$RebuildTask$CompileResults;Lnet/minecraft/world/level/block/entity/BlockEntity;)V", at = @At("HEAD"), cancellable = true) @Inject(method = "handleBlockEntity", at = @At("HEAD"), cancellable = true)
private void flywheel$tryAddBlockEntity(@Coerce Object compileResults, BlockEntity blockEntity, CallbackInfo ci) { private void flywheel$tryAddBlockEntity(@Coerce Object compileResults, BlockEntity blockEntity, CallbackInfo ci) {
if (VisualizationHelper.tryAddBlockEntity(blockEntity)) { if (VisualizationHelper.tryAddBlockEntity(blockEntity)) {
ci.cancel(); ci.cancel();

View File

@ -2,7 +2,7 @@
"required": true, "required": true,
"minVersion": "0.8", "minVersion": "0.8",
"package": "dev.engine_room.flywheel.impl.mixin", "package": "dev.engine_room.flywheel.impl.mixin",
"compatibilityLevel": "JAVA_17", "compatibilityLevel": "JAVA_21",
"refmap": "flywheel.refmap.json", "refmap": "flywheel.refmap.json",
"client": [ "client": [
"BlockEntityTypeMixin", "BlockEntityTypeMixin",
@ -19,7 +19,7 @@
"visualmanage.BlockEntityMixin", "visualmanage.BlockEntityMixin",
"visualmanage.LevelChunkMixin", "visualmanage.LevelChunkMixin",
"visualmanage.LevelRendererMixin", "visualmanage.LevelRendererMixin",
"visualmanage.RebuildTaskMixin" "visualmanage.SectionCompilerMixin"
], ],
"injectors": { "injectors": {
"defaultRequire": 1 "defaultRequire": 1

View File

@ -2,7 +2,7 @@
"required": true, "required": true,
"minVersion": "0.8", "minVersion": "0.8",
"package": "dev.engine_room.flywheel.impl.mixin.fabric", "package": "dev.engine_room.flywheel.impl.mixin.fabric",
"compatibilityLevel": "JAVA_17", "compatibilityLevel": "JAVA_21",
"refmap": "flywheel.refmap.json", "refmap": "flywheel.refmap.json",
"client": [ "client": [
"DebugScreenOverlayMixin", "DebugScreenOverlayMixin",

View File

@ -2,7 +2,7 @@
"required": true, "required": true,
"minVersion": "0.8", "minVersion": "0.8",
"package": "dev.engine_room.flywheel.impl.mixin.sodium", "package": "dev.engine_room.flywheel.impl.mixin.sodium",
"compatibilityLevel": "JAVA_17", "compatibilityLevel": "JAVA_21",
"refmap": "flywheel.refmap.json", "refmap": "flywheel.refmap.json",
"plugin": "dev.engine_room.flywheel.impl.mixin.sodium.SodiumMixinPlugin", "plugin": "dev.engine_room.flywheel.impl.mixin.sodium.SodiumMixinPlugin",
"client": [ "client": [

View File

@ -2,7 +2,7 @@
"required": true, "required": true,
"minVersion": "0.8", "minVersion": "0.8",
"package": "dev.engine_room.flywheel.impl.mixin.sodium", "package": "dev.engine_room.flywheel.impl.mixin.sodium",
"compatibilityLevel": "JAVA_17", "compatibilityLevel": "JAVA_21",
"refmap": "flywheel.refmap.json", "refmap": "flywheel.refmap.json",
"plugin": "dev.engine_room.flywheel.impl.mixin.sodium.SodiumMixinPlugin", "plugin": "dev.engine_room.flywheel.impl.mixin.sodium.SodiumMixinPlugin",
"client": [ "client": [