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
相关产品推荐
相关产品推荐

