ItemStack(ItemStack)

预计阅读时间: 6 分钟

物品堆叠,堆叠的物品,堆叠中的物品(有时也带有数据)

本页面是针对 KubeJS 7.2(适用于 1.21.1)创建的。您看到的大多数信息也适用于您的版本,但代码语法可能会因版本而异。

我们正在努力为其他版本的 Minecraft 创建此页面的替代版本。

ItemStack 是与数量关联的物品,可选地附加一些数据。或者稍微不同地说,它是...嗯,单个堆叠的物品,它们都共享相同的数据。它也是玩家最熟悉的"物品"表示形式,因为物品堆叠是您在背包中持有的东西,从地上捡起的东西等等。

您可以将 ItemStack 中包含的 Item 基本上视为该物品的原始"定义";例如,所有钻石斧共享相同的物品 ID minecraft:diamond_axe,它们都使用相同的物品,但背包中两把耐久度不同的钻石斧,如 diamond_axe[damage=123]diamond_axe[damage=456] 将属于不同的物品堆叠,因为它们的数据不重叠。类似地,两个带有自定义描述的木棍 stick[lore=[{text:"This Stick is very sticky."}]] 将作为同一物品堆叠的一部分工作。

自 1.20.4 以来,物品上的数据发生了重大变化,从 NBT 过渡到数据组件。这带来的一个很好的副作用是,您现在可以更改和覆盖以前硬编码到物品定义本身的内容,例如物品的最大堆叠大小、附魔能力、修复成分等。

创建 ItemStack

KubeJS 会自动尝试在需要物品堆叠的地方将任何输入包装成物品堆叠,但您也可以使用 Item 包装器(源代码)来显式创建它们,特别是使用 Item.of(input)Item.of(input, count)

在这种情况下,编写物品最简单的方式(也是我们在这里推荐的方式)是指定其字符串 ID,您可以通过在游戏中启用高级工具提示(按 F3+H)并将鼠标悬停在背包中的物品上,或使用非常有用的 /kubejs hand 来最轻松地找到它!

以下是一些将解析为物品堆叠的字符串输入示例:

  • 'minecraft:air' 是空物品,这...看起来不是特别有用,但嘿,也许知道还是好的!
  • 'minecraft:apple' 是一个苹果。(注意:如果您使用原版物品,可以省略 minecraft:!)
  • '2x minecraft:apple' 代表两个苹果的堆叠。
  • '3x stick[lore=[{text:"This Stick is very sticky."}]]' 代表三个非常粘的木棍(带有自定义数据组件!)

另请注意,虽然在某些旧版本的 KubeJS 中可能,但 Ingredients 是不支持的,如果您尝试隐式将它们转换为 ItemStack,出错,只需使用 ingredient.first

使用 ItemStack

有用的方法和属性

  • item.block: 如果此物品是 BlockItem,返回关联的方块,否则返回 null
  • item.count可写): 此物品堆叠的数量
    • 相关: item.grow(amount)item.shrink(amount) 增加或减少当前堆叠的数量 amount
    • 相关: item.withCount(count): 复制此堆叠并指定 count
  • item.areItemsEqual(other): 如果 itemother 具有相同的物品类型,返回 true
  • item.areComponentsEqual(other): 如果 itemother 具有相同的物品和数据,返回 true

注册表对象函数

(这些函数也都存在于 Item 上)

  • item.id: 返回物品在物品注册表中的 ID(作为字符串)
    • 相关: item.idLocation(作为 ResourceLocation),item.key(作为 ResourceKey<Item>
    • 相关: item.mod 返回物品注册的命名空间
  • item.holder: 将此物品包装为 Holder(内部注册表对象)
  • item.registry: 返回物品注册表
    • 相关: item.registryId: 返回物品注册表的
  • item.tags: 返回此物品的所有标签列表
    • 相关: item.tagKeys: 返回 TagKey 列表而不是 ResourceLocation
    • 相关: item.hasTag(tag): 检查此物品是否有特定标签

组件函数

WIP!(TODO: 制作一个关于 Components 和 KubeJS 的 ComponentFunctions 接口的页面)

  • componentString: 返回物品的数据组件作为字符串表示
  • withCustomName(name): 复制此物品堆叠并指定名称
  • enchantments: 获取物品的附魔
  • hasEnchantment(enchantment, level): 检查物品是否具有特定等级或更高等级的附魔
  • enchant(enchantment, level): 向 ItemStack 添加附魔(TODO: 附魔页面?)
  • enchant(enchantments): 向 ItemStack 添加附魔(TODO: 附魔页面?)
  • getHarvestSpeed(block?): 获取物品对给定方块(或默认)的挖掘速度
  • typeData: ???(这只是供脚本编写者使用的自定义映射,用于将数据附加到物品定义?)
  • toItemString(): 将 ItemStack 转换为其 KubeJS 字符串表示
  • asIngredient(): 将 ItemStack 转换为 Ingredient
  • withLore(lore): 复制此物品堆叠并指定描述文本

延伸阅读