Minecraft 1.19模组开发:ItemBlockRenderTypes.setRenderLayer弃用替代方案咨询
Minecraft 1.19.0 模组开发:作物透明渲染代码标记为待移除的替代方案
背景说明
我测试过当前代码仍可运行,但不想留报错隐患,也担心未来版本失效,想找替代实现方式。
我跟着一套新手向Minecraft模组开发教程学习,到第9集(制作新作物)时遇到问题。视频里在4分20秒左右添加了一行代码,用来让作物纹理的透明像素在3D模型中生效,但我写的代码里ItemBlockRenderTypes.setRenderLayer()被IDE标记为待移除,有删除线提示,尝试其他重载方法也没用。
相关代码(位于TestMod.java主类)
@Mod.EventBusSubscriber(modid = MOD_ID, bus = Mod.EventBusSubscriber.Bus.MOD) public static class ClientModEvents { @SubscribeEvent public static void onClientSetup(FMLClientSetupEvent event) { ItemBlockRenderTypes.setRenderLayer(ModBlocks.BLUEBERRY_CROP.get(), RenderType.cutout()); } }
问题截图说明
- 原始代码截图:代码中
setRenderLayer()显示删除线 - 移除提示截图:IDE提示该方法已标记为待移除
我的问题
- 这个方法是不是已经更新,没法再这么用了?
- 如果确实更新了,现在应该怎么写?
- 或者现在已经不需要做这个操作了?
开发环境
- IntelliJ-IDEA
- Temurium 17 SDK
- Minecraft 1.19.0
解答
是的,
ItemBlockRenderTypes.setRenderLayer(Block, RenderType)这个方法在Minecraft 1.19+的Forge版本中已经被废弃(deprecated),标记为待移除,所以IDE会显示删除线提示。替代方案是使用
RenderTypeLookup.setRenderLayer()方法,写法和原来几乎一致,只是换了类:
@Mod.EventBusSubscriber(modid = MOD_ID, bus = Mod.EventBusSubscriber.Bus.MOD) public static class ClientModEvents { @SubscribeEvent public static void onClientSetup(FMLClientSetupEvent event) { RenderTypeLookup.setRenderLayer(ModBlocks.BLUEBERRY_CROP.get(), RenderType.cutout()); } }
这个方法是Forge在新版本中推荐的渲染层设置方式,功能和原来完全一样,能确保作物纹理的透明部分正常显示,而且不会有废弃提示,未来版本兼容性更好。
- 这个操作还是需要做的——如果不设置
RenderType.cutout(),作物的透明纹理会被游戏的默认不透明渲染层忽略,导致透明部分显示为黑色或者直接被遮挡,必须手动指定渲染层才能让透明像素正常生效。
内容的提问来源于stack exchange,提问作者Ouroboros
相关产品推荐
相关产品推荐

