You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Minecraft 1.21.4模组开发:Identifier构造方法私有访问错误

解决1.21.4中Identifier构造私有导致的编译错误

核心问题

Minecraft 1.21.4版本中,net.minecraft.util.Identifier的双参构造器被改为私有访问权限,直接通过new Identifier(namespace, path)创建实例会触发编译错误,必须使用官方提供的静态工厂方法替代。

修正后的完整代码

package com.example.mod.mixin;

import com.example.mod.Mod;
import com.example.mod.item.ModItems;
import com.mojang.blaze3d.systems.RenderSystem;
import net.minecraft.client.render.*;
import net.minecraft.client.render.item.ItemRenderer;
import net.minecraft.client.render.model.BakedModel;
import net.minecraft.client.render.model.json.ModelTransformationMode;
import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.item.ItemStack;
import net.minecraft.util.Identifier;
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(ItemRenderer.class)
public abstract class ItemRendererMixin {

    // 改用Identifier.of()静态工厂方法创建实例
    private static final Identifier GLOW_TEXTURE = Identifier.of(Mod.MOD_ID, "textures/misc/item_overlay.png");

    // 匹配完整的renderItem方法签名,添加CallbackInfo回调参数
    @Inject(method = "renderItem(Lnet/minecraft/item/ItemStack;Lnet/minecraft/client/render/model/json/ModelTransformationMode;ZLnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/VertexConsumerProvider;IILnet/minecraft/client/render/model/BakedModel;)V", at = @At("TAIL"))
    public void renderGlowingOutline(ItemStack stack, ModelTransformationMode renderMode, boolean leftHanded, MatrixStack matrices, VertexConsumerProvider vertexConsumers, int light, int overlay, BakedModel model, CallbackInfo ci) {
        if (stack.isOf(ModItems.Item_Example)) {
            RenderSystem.disableDepthTest();
            RenderSystem.enableBlend();
            RenderSystem.defaultBlendFunc();

            VertexConsumer vertexConsumer = vertexConsumers.getBuffer(RenderLayer.getEntityTranslucent(GLOW_TEXTURE));
            matrices.push();
            // 此处需添加实际渲染逻辑,比如复用ItemRenderer的现有绘制方法
            // 示例:((ItemRenderer)(Object)this).renderItem(stack, renderMode, leftHanded, matrices, vertexConsumers, light, overlay, model);
            matrices.pop();

            RenderSystem.disableBlend();
            RenderSystem.enableDepthTest();
        }
    }
}

关键修改点

  • 替换Identifier实例创建方式:将new Identifier(Mod.MOD_ID, "path")改为Identifier.of(Mod.MOD_ID, "path"),这是1.21+版本官方指定的Identifier创建方式。
  • 修正方法签名与回调参数:原代码的renderItem方法参数不完整,需匹配完整重载签名,并添加CallbackInfo参数完成Mixin注入的回调逻辑。
  • 优化物品判断逻辑:用stack.isOf(ModItems.Item_Example)替代直接的==比较,这是更安全的物品栈类型判断方式。
  • 补充渲染逻辑提示:原代码中matrices.push()与pop()之间无实际渲染代码,需添加具体的顶点绘制逻辑才能让纹理生效,示例中给出了复用现有渲染方法的参考。

内容的提问来源于stack exchange,提问作者Mathieu Asselin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 11:58:17