• Forge论坛

导航页

  • 主页
  • 向文档做出贡献
  • 入门
    • 概述
    • 模组文件
    • 规划你的模组结构
    • 版本号
  • 核心概念
    • 注册表
    • 端位(Sides)
    • 事件
    • 模组生命周期
    • 资源
    • 国际化与本地化
  • 方块
    • 概述
    • 方块状态
  • 物品
    • 概述
    • BlockEntityWithoutLevelRenderer
  • 网络
    • 概述
    • SimpleImpl
    • 实体的同步
  • 方块实体
    • 概述
    • BlockEntityRenderer
  • 游戏特效
    • 粒子效果
    • 音效
  • 数据储存
    • Capabilities
    • Saved Data
    • 编解码器(Codecs)
  • 图形用户界面
    • 菜单(Menus)
    • 屏幕(Screens)
  • 渲染
    • 模型扩展
      • 概述
      • 根变换
      • 渲染类型
      • 部分可见度
      • 面数据
    • 模型加载器
      • 概述
      • 烘焙模型
      • 变换
        • ItemDisplayContext
        • 原版的方式
        • Forge的方式
      • 物品重载
  • 资源
    • 客户端资源(Assets)
      • 概述
      • 模型
        • 概述
        • 纹理色调
        • 物品属性
    • 服务端数据(Data)
      • 概述
      • 配方
        • 概述
        • 自定义配方
        • 原料
        • 非数据包配方
      • 战利品表
      • 全局战利品修改器
      • 标签
      • 进度
      • 条件性加载数据
  • 数据生成
    • 概述
    • 客户端资源(Assets)
      • 模型提供者
      • 语言提供者
      • 音效提供者
    • 服务端数据(Data)
      • 配方提供者
      • 战利品表提供者
      • 标签提供者
      • 进度提供者
      • 全局战利品修改器提供者
      • 数据包注册表对象提供者
  • 杂项功能
    • 配置
    • 键盘布局
    • 游戏测试
    • Forge更新检查器
    • 调试分析器
  • 进阶主题
    • 访问转换器
  • 向Forge做出贡献
    • 概述
    • Pull Request准则
  • 旧版本
    • 概述
    • 移植到当前版本

变换

当BakedModel被渲染为物品时,它可以根据在哪个变换中渲染它来应用特殊处理。“变换”是指在什么上下文中渲染模型。可能的转换在代码中由ItemDisplayContext枚举表示。有两种处理转换的系统:不推荐使用的原版系统,由BakedModel#getTransforms、ItemTransforms和ItemTransform构成;Forge系统,由方法IForgeBakedModel#applyTransform实现。原版代码被进行了修补,以便尽可能使用applyTransform而不是原版系统。

ItemDisplayContext

NONE - 默认情况下,当未设置上下文时,用于显示实体;当Block的RenderShape设置为#ENTITYBLOCK_ANIMATED时,被Forge使用。

THIRD_PERSON_LEFT_HAND/THIRD_PERSON_RIGHT_HAND/FIRST_PERSON_LEFT_HAND/FIRST_PERSON_RIGHT_HAND - 第一人称值表示玩家何时将物品握在自己手中。第三人称值表示当另一个玩家拿着物品,而客户端用第三人称看着它们时。手的含义是不言自明的。

HEAD - 表示当任何玩家在头盔槽中佩戴该物品时(例如南瓜)。

GUI - 表示当该物品被在一个Screen中渲染时。

GROUND - 表示该物品在存档中作为一个ItemEntity被渲染时。

FIXED - 用于物品展示框。

原版的方式

原版处理转换的方式是通过BakedModel#getTransforms。此方法返回一个ItemTransforms,这是一个简单的对象,包含各种作为public final的ItemTransform字段。ItemTransform表示要应用于模型的旋转、平移和比例。ItemTransforms是这些的容器,除了NONE之外,每个ItemDisplayContext都有一个容器。在原版实现中,为NONE调用#getTransform会产生默认转换ItemTransform#NO_TRANSFORM。

Forge废弃了使用处理转换的整个原版系统,BakedModel的大多数实现应该简单地从BakedModel#getTransforms中return ItemTransforms#NO_TRANSFORMS(这是默认实现)。相反,他们应该实现#applyTransform。

Forge的方式

Forge处理转换的方法是#applyTransform,这是一种修补到BakedModel中的方法。它取代了#getTransforms方法。

BakedModel#applyTransform

给定一个ItemDisplayContext、PoseStack和一个布尔值来确定是否对左手应用变换,此方法将生成一个要渲染的BakedModel。因为返回的BakedModel可以是一个全新的模型,所以这种方法比原版方法(例如,一张手里看起来很平但在地上皱巴巴的纸)更灵活。

Built with MkDocs using a custom theme. Hosted by Read the Docs.
Enable Dark Theme