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

Minecraft 1.12模组开发TESR的isGlobalRenderer方法失效问题

问题原因

你当前的渲染器实现、isGlobalRenderer重写、注册逻辑均无错误,问题出在Minecraft默认会对TileEntity做视锥体剔除:即使渲染器标记为全局渲染,如果TileEntity本身的渲染包围盒不在玩家视野范围内,整个渲染调用依然会被直接跳过,你漏掉了TileEntity层面的渲染包围盒配置。

解决方案

  1. 核心修改:重写TileEntity的渲染包围盒方法
    在你的TileEntityLightOrbController类中添加如下方法,返回无限大的渲染包围盒即可完全规避视锥体剔除,该实现和原版结构块的逻辑完全一致:
@Override
public AxisAlignedBB getRenderBoundingBox() {
    return INFINITE_EXTENT_AABB;
}
  1. 可选检查
    部分早期1.12版本的Forge存在isGlobalRenderer不生效的已知bug,如果你用的是旧版Forge,可升级到1.12.2最新稳定版Forge(版本号14.23.5.2860)规避这类问题。

  2. 可选性能优化
    如果你的方框渲染范围是可控的,也可以根据存储的所有点位动态计算渲染包围盒,代替无限大包围盒,能小幅提升渲染性能:

@Override
public AxisAlignedBB getRenderBoundingBox() {
    List<PathCheckpoint> checkpoints = getCheckpoints();
    if (checkpoints.isEmpty()) {
        return super.getRenderBoundingBox();
    }
    int minX = getPos().getX(), minY = getPos().getY(), minZ = getPos().getZ();
    int maxX = minX, maxY = minY, maxZ = minZ;
    for (PathCheckpoint checkpoint : checkpoints) {
        BlockPos pos = checkpoint.getPos();
        minX = Math.min(minX, pos.getX());
        minY = Math.min(minY, pos.getY());
        minZ = Math.min(minZ, pos.getZ());
        maxX = Math.max(maxX, pos.getX());
        maxY = Math.max(maxY, pos.getY());
        maxZ = Math.max(maxZ, pos.getZ());
    }
    return new AxisAlignedBB(minX, minY, minZ, maxX + 1, maxY + 1, maxZ + 1);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 05:15:03