矿车物品 3D 渲染
基本信息
| 属性 | 值 |
|---|---|
| 类型 | 客户端渲染配置项 |
| 配置键 | render minecarts in 3D on inventory |
| 配置分类 | Configuration.CATEGORY_GENERAL |
| 默认值 | false |
| 配置文件 | config/ironchestminecarts.cfg(event.getSuggestedConfigurationFile()) |
| 读取位置 | IronChestMinecarts.preInit(FMLPreInitializationEvent) |
| 读取失败 | FMLLog.log(Level.ERROR, e, "Iron Chest Minecarts had a problem loading its configs!"),配置值保持默认 false |
| 作用范围 | 全部 8 个矿车物品(无逐物品开关) |
行为
本模组唯一的配置项。它控制矿车物品在手持与物品栏中是否以 3D 箱子矿车模型渲染,还是退化为原版物品贴图(sprite)。
if (renderMinecarts3D) if (event.getSide() == Side.CLIENT)
MinecraftForgeClient.registerItemRenderer(minecart, new ItemMinecartChestRenderer());
- 循环位于 8 个矿车物品的注册循环内,
true时为每一个物品注册ItemMinecartChestRenderer; event.getSide() == Side.CLIENT保证服务端不会注册渲染器(避免在专用服务器上加载客户端类);- 双重
if而非&&,逻辑等价但不做短路优化; - 配置为
false(默认)时完全不注册IItemRenderer,物品沿用setTextureName(...)指定的静态贴图textures/items/minecart_chest_*.png。
渲染细节
ItemMinecartRenderer(抽象)负责矿车模型,ItemMinecartChestRenderer(实现)负责箱子方块。模型为原版 ModelMinecart,贴图固定为 textures/entity/minecart.png;箱子方块通过 RenderBlocks.renderBlockAsItem(IronChest.ironChestBlock, item.type.ordinal(), 1) 渲染,因此每个物品显示的是自己对应等级的铁箱子。
handleRenderType 返回 type != ItemRenderType.FIRST_PERSON_MAP(即地图视角不渲染 3D 模型);shouldUseRenderHelper 恒为 true。
各视角的缩放与位移(renderItem 中硬编码):
ItemRenderType |
缩放 | 平移 | 说明 |
|---|---|---|---|
ENTITY |
glScaled(0.5, 0.5, 0.5) |
(0.0, -0.25, 0.0) |
掉落物 / 实体展示 |
EQUIPPED |
无 | (0.5, 0.75, 0.5) |
盔甲位 / 装备位 |
EQUIPPED_FIRST_PERSON |
无 | (-0.5, 1.0, 0.7) |
第一人称手持 |
INVENTORY |
glScaled(1.2, 1.2, 1.2) |
(-0.5, -0.45, -0.5) |
物品栏 / 箱子 GUI 内 |
FIRST_PERSON_MAP |
— | — | handleRenderType 返回 false,直接跳过 |
箱子方块本身的渲染变换(ItemMinecartChestRenderer.renderBlock):glScaled(0.75 * 0.75 × 3) → 绕 Y 轴旋转 270° → 沿 Y 平移 6/16 格 → 渲染方块,结束时把颜色重置为 (1, 1, 1, 1)(GL11.glColor4f)以免染色污染后续渲染。
矿车模型在箱子之后渲染:glRotated(90, 0, 1, 0) → glScaled(0.75 × 3) → glScaled(-1, -1, 1)(翻转面朝向)→ 绑定矿车贴图 → model.render(null, 0, 0, -0.1F, 0, 0, 1F/16F)。
⚠️ 两处代码都写了
GL11.glScaled(0.75 * 0.75, 0.75 * 0.75, 0.75 * 0.75)与glScaled(0.75, 0.75, 0.75)的组合写法,源码原样如此,未做简化。
数值
| 数值 | 值 |
|---|---|
| 默认值 | false(2D 物品贴图) |
| 启用后效果 | 手持与物品栏显示 3D 箱子矿车 |
| 客户端要求 | 是(服务端注册会被 Side.CLIENT 过滤) |
相关条目
- 共用机制基类 - 矿车实体侧行为(物品栏、NBT、掉落、Railcraft)