• Forge论坛

导航页

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

战利品表

战利品表是逻辑文件,它规定了当发生各种操作或场景时应该发生什么。尽管原版系统纯粹处理物品生成,但该系统可以扩展为执行任意数量的预定义操作。

由数据驱动的表

原版中的大多数战利品表都是通过JSON进行数据驱动的。这意味着模组不需要创建新的战利品表,只需要数据包。关于如何在模组的resources文件夹中创建和放置这些战利品表的完整列表可以在Minecraft Wiki上找到。

使用战利品表

战利品表由其指向data/<namespace>/loot_tables/<path>.json的ResourceLocation引用。与引用相关联的LootTable可以使用LootDataResolver#getLootTable获得,其中LootDataResolver可以通过MinecraftServer#getLootData获得。

战利品表总是使用给定的参数生成的。LootParams包含表的生成存档、特定的随机化器和种子(如果需要)、更好生成的运气、定义场景上下文的LootContextParam以及激活时应出现的任何动态信息。可以使用LootParams$Builder生成器的构造函数创建LootParams,并通过传递LootContextParamSet通过LootParams$Builder#create构建LootParams。

战利品表也可能有一些上下文。LootContext接受已构建的LootParams,并可以设置一些随机种子实例。上下文是通过生成器LootContext$Builder创建的,并使用LootContext$Builder#create通过传递表示要使用的随机实例的可为null的ResourceLocation来构建。

LootTable可用于使用以下可用方法之一生成ItemStack,其可能接受一个LootParams或一个LootContext:

方法 描述
getRandomItemsRaw 消耗由战利品表生成的物品。
getRandomItems 返回由战利品表生成的物品。
fill 用已生成的战利品表填充容器。

注意

战利品表是为生成物品而构建的,因此这些方法需要对ItemStack进行一些处理。

附加特性

Forge为战利品表提供了一些额外的行为,以更好地控制系统。

LootTableLoadEvent

LootTableLoadEvent是在Forge事件总线上触发的事件,每当加载战利品表时就会触发。如果事件被取消,则会加载一个空的战利品表。

重要

不要通过此事件修改战利品表的掉落。这些修改应该使用全局战利品修改器来完成。

战利品池名称

Loot pools can be named using the name key. Any non-named loot pool will be the hash code of the pool prefixed by custom#. 可以使用name键对战利品池进行命名。任何未命名的战利品池都将是以custom#为前缀的池的哈希代码。

// 对于某个战利品池
{
  "name": "example_pool", // 战利品池将被命名为'example_pool'
  "rolls": {
    // ...
  },
  "entries": {
    // ...
  }
}

抢夺修改器

战利品表现在除了受到抢夺附魔的影响外,还受到Forge事件总线上的LootingLevelEvent的影响。

附加的上下文参数

Forge扩展了某些参数集,以解决可能适用的缺失上下文。LootContextParamSets#CHEST现在允许使用LootContextParams#KILLER_ENTITY,因为箱子矿车是可以被破坏(或“杀死”)的实体。LootContextParamSets#FISHING还允许LootContextParams#KILLER_ENTITY,因为鱼钩也是一个实体,当玩家取回它时会收回(或“杀死”)。

熔炼时的多个物品

当使用SmeltItemFunction时,熔炼配方现在将返回结果中的实际物品数,而不是单个熔炼物品(例如,如果熔炼配方返回3个物品,并且有3次掉落,则结果将是9个熔炼物品,而不是3个)。

战利品表Id条件

Forge添加了一个额外的LootItemCondition,允许为特定的表生成某些物品。这通常用于全局战利品修改器。

// 在某个战利品池或池条目中
{
  "conditions": [
    {
      "condition": "forge:loot_table_id",
      // 当该战利品表对于泥土时将适用
      "loot_table_id": "minecraft:blocks/dirt"
    }
  ]
}

“工具能否执行操作”条件

Forge添加了一个额外的LootItemCondition,用于检查给定的LootContextParams#TOOL是否可以执行指定的ToolAction。

// 在某个战利品池或池条目中
{
  "conditions": [
    {
      "condition": "forge:can_tool_perform_action",
      // 当该工具可以像斧一样剥下原木时将适用
      "action": "axe_strip"
    }
  ]
}
Built with MkDocs using a custom theme. Hosted by Read the Docs.
Enable Dark Theme