物品堆叠,堆叠的物品,堆叠中的物品(有时也带有数据)
本页面是针对 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 过渡到数据组件。这带来的一个很好的副作用是,您现在可以更改和覆盖以前硬编码到物品定义本身的内容,例如物品的最大堆叠大小、附魔能力、修复成分等。
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!
item.block: 如果此物品是 BlockItem,返回关联的方块,否则返回 nullitem.count(可写): 此物品堆叠的数量
item.grow(amount) 和 item.shrink(amount) 增加或减少当前堆叠的数量 amountitem.withCount(count): 复制此堆叠并指定 countitem.areItemsEqual(other): 如果 item 和 other 具有相同的物品类型,返回 trueitem.areComponentsEqual(other): 如果 item 和 other 具有相同的物品和数据,返回 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 列表而不是 ResourceLocationitem.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 转换为 IngredientwithLore(lore): 复制此物品堆叠并指定描述文本