From 186f2674fde2545048cbdaaf8a22b065846b6f5d Mon Sep 17 00:00:00 2001 From: Gugle Date: Mon, 8 Sep 2025 12:28:53 +0800 Subject: [PATCH] =?UTF-8?q?refactor(FallingBlockRenderer):=E4=BC=98?= =?UTF-8?q?=E5=8C=96=E6=96=B9=E5=9D=97=E6=B8=B2=E6=9F=93=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 使用 WrapOperation 替代 ModifyArg 注解 - 优化代码结构,提高可读性和可维护性 --- .../lite/mixin/FallingBlockRendererMixin.java | 48 +++++++++++++++---- 1 file changed, 38 insertions(+), 10 deletions(-) diff --git a/src/main/java/dev/anvilcraft/lite/mixin/FallingBlockRendererMixin.java b/src/main/java/dev/anvilcraft/lite/mixin/FallingBlockRendererMixin.java index ab62187..b27d822 100644 --- a/src/main/java/dev/anvilcraft/lite/mixin/FallingBlockRendererMixin.java +++ b/src/main/java/dev/anvilcraft/lite/mixin/FallingBlockRendererMixin.java @@ -1,34 +1,62 @@ package dev.anvilcraft.lite.mixin; +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; +import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.blaze3d.vertex.VertexConsumer; import dev.anvilcraft.lite.util.Util; import dev.anvilcraft.lite.util.render.RenderHelper; +import net.minecraft.client.renderer.block.ModelBlockRenderer; +import net.minecraft.client.renderer.block.model.BlockModelPart; +import net.minecraft.client.renderer.chunk.ChunkSectionLayer; import net.minecraft.client.renderer.entity.FallingBlockRenderer; import net.minecraft.client.renderer.entity.state.FallingBlockRenderState; +import net.minecraft.core.BlockPos; import net.minecraft.world.level.BlockAndTintGetter; +import net.minecraft.world.level.block.state.BlockState; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.ModifyArg; + +import java.util.List; +import java.util.function.Function; @Mixin(FallingBlockRenderer.class) public class FallingBlockRendererMixin { - @ModifyArg( - method = "render(Lnet/minecraft/client/renderer/entity/state/FallingBlockRenderState;" + @WrapOperation( + method = "render(" + + "Lnet/minecraft/client/renderer/entity/state/FallingBlockRenderState;" + "Lcom/mojang/blaze3d/vertex/PoseStack;" - + "Lnet/minecraft/client/renderer/MultiBufferSource;I)V", + + "Lnet/minecraft/client/renderer/MultiBufferSource;" + + "I" + + ")V", at = @At( value = "INVOKE", target = "Lnet/minecraft/client/renderer/block/ModelBlockRenderer;tesselateBlock(" + "Lnet/minecraft/world/level/BlockAndTintGetter;" + "Ljava/util/List;Lnet/minecraft/world/level/block/state/BlockState;" + "Lnet/minecraft/core/BlockPos;Lcom/mojang/blaze3d/vertex/PoseStack;" - + "Ljava/util/function/Function;ZI)V" - ), - index = 0 + + "Ljava/util/function/Function;" + + "Z" + + "I" + + ")V" + ) ) - private BlockAndTintGetter replaceLevel(BlockAndTintGetter level) { - return Util.castSafely(level, FallingBlockRenderState.class) - .filter(state -> state.nameTag == RenderHelper.REPLACE_LEVEL_TAG) + private void replaceLevel( + ModelBlockRenderer instance, + BlockAndTintGetter level, + List parts, + BlockState state, + BlockPos flag, + PoseStack poseStack, + Function function, + boolean checkSides, + int packedOverlay, + Operation original + ) { + BlockAndTintGetter neoLevel = Util.castSafely(level, FallingBlockRenderState.class) + .filter(renderState -> renderState.nameTag == RenderHelper.REPLACE_LEVEL_TAG) .map(it -> (BlockAndTintGetter) RenderHelper.airLevelLike) .orElse(level); + original.call(instance, neoLevel, parts, state, flag, poseStack, function, checkSides, packedOverlay); } }