5 物品注册和属性修改
一、物品注册
1、事件监听
通过向StartupEvents.registry事件传入不同的参数,其可用于在启动脚本中注册游戏中的新元素,如方块、物品、声音、药效等,在这里,我们传入"item"来进行与物品有关的修改:
StartupEvents.registry("item",event=>{
// 脚本
})显然,方块注册脚本应该放于StartupEvents脚本文件夹中。
2、事件方法
| 方法 | 描述 | 返回值 |
|---|---|---|
| create(字符串 方块ID, 字符串 类型) | 注册物品 | ItemBuilder |
| create(字符串 方块ID) | 注册物品 | ItemBuilder |
其中,“类型”参数支持以下字符串:
| 值 | 描述 | 备注 |
|---|---|---|
| "basic" | 基础物品类型 | - |
| "sword" | 剑类物品 | - |
| "pickaxe" | 镐类物品 | - |
| "axe" | 斧类物品 | - |
| "shovel" | 锹类物品 | - |
| "hoe" | 锄类物品 | - |
| "helmet" | 头盔类物品 | 可以放于对应穿戴栏 |
| "chestplate" | 胸甲类物品 | 可以放于对应穿戴栏 |
| "leggings" | 护腿类物品 | 可以放于对应穿戴栏 |
| "boots" | 靴子类物品 | 可以放于对应穿戴栏 |
| "music_disc" | 唱片类物品 | 可以放于唱片机中 |
3、ItemBuilder
| 方法 | 描述 | 备注 | 对应属性默认值 |
|---|---|---|---|
| displayName(String 名称) | 设定物品名称 | - | - |
| fireResistant(布尔值 是否抗火) | 设置物品是否抗火 | - | false |
| maxDamage(整形 最大耐久值) | 设置物品耐久度 | 需求对应类型 | - |
| unstackable() | 设置为无法堆叠 | - | false |
| maxStackSize(整形 最大堆叠数) | 设置堆叠数量 | - | 64 |
| finishUsing(FinishUsingCallback 回调函数) | 设置物品使用完成后 | - | - |
| modifyAttribute(Attribute 属性类型,字符串 标识符, any 属性值, Operation 操作类型) | 修改Attribute | [1] | - |
| tooltip(Component tooltip文本) | 设置物品tooltip | 形如Component.blue("击退棒") | - |
| glow(布尔值 v) | 设置是否发光 | 这里指附魔光芒 | false |
| food(Consumer<FoodBuilder_>) | 设置食物物品 | 见章节6.2 食物 | - |
| rarity(Rarity 稀有度) | 设置物品稀有度 | [2] | "common" |
| useAnimation(UseAnim 使用动画) | 设置物品使用动画 | [3] | null |
| group(String 物品组) | 设置物品物品组 | - | - |
| containerItem(ResourceLocation 物品) | 设置物品容器 | 类似奶和桶的关系 | - |
| burnTime(int 时间) | 设定燃烧时间 | 作为燃料 | 0 |
[1] 参数“标识符”应为任意UUID,操作类型可以为"addition","multiply_total","multiply_base"
[2] 稀有度可以为"uncommon"、"epic"、"rare"、"common"
[3] 使用动画可以为"toot_horn"、"spear"、"eat"、"block"、"crossbow"、"spyglass"、"bow"、 "drink"、"custom"、"none"
4、HandheldItemBuilder
借助ProbeJS不难看出,SwordItemBuilder、PickaxeItemBuilder、AxeItemBuilder、ShovelItemBuilder和HoeItemBuilder均为HandheldItemBuilder子类。
HandheldItemBuilder支持方法如下:
| 方法 | 描述 |
|---|---|
| speedBaseline(float 基础挖掘速度) | 设置基础挖掘速度 |
| speed(float 挖掘速度加成值) | 每级效果加成 |
| attackDamageBaseline(float 基础伤害值) | 设置基础伤害值 |
| attackDamageBonus(float 伤害加成值) | 每级效果加成 |
| modifyTier(Consumer) | 设置属性 |
MutableToolTier支持以下set方法:
| 方法 | 描述 | 备注 |
|---|---|---|
| setSpeed(float 挖掘速度加成值) | 每级效果加成 | - |
| setEnchantmentValue(int 值) | 设置附魔值 | 限制附魔属性量 |
| setAttackDamageBonus(float 伤害加成值) | 每级效果加成 | - |
| setUses(int 值) | 设置使用次数 | - |
| setLevel(int 值) | 设置等级 | - |
| setRepairIngredient(Ingredient 修复用物品) | 设置修复用物品 | - |
值得注意的是:若不进行设置,这些属性的默认值均为铁质工具。
5、ArmorItemBuilder
ArmorItemBuilder用于设置盔甲类型的物品
| 方法 | 描述 |
|---|---|
| tier(ArmorMaterial 等级) | 设置盔甲等级 |
| modifyTier(Consumer 回调函数) | 设置属性 |
MutableArmorTier支持以下set方法:
| 方法 | 描述 | 备注 |
|---|---|---|
| setDurabilityMultiplier(int 耐久倍率) | 设置耐久损坏倍率 | - |
| setToughness(float 抗性) | 设置伤害抗性 | - |
| setKnockbackResistance(float 抗性) | 设置击退抗性 | - |
| setEnchantmentValue(int 值) | 设置附魔值 | 限制附魔属性量 |
| setEquipSound(SoundEvent 声音) | 设置穿戴声音 | 形如"ambient.basalt_deltas.additions" |
| setRepairIngredient(Ingredient 修复用物品) | 设置修复用物品 | - |
| setName(String 名称) | 设置名称 | - |
值得注意的是:若不进行设置,这些属性的默认值均为铁质盔甲。
6、资源目录
对于物品注册来说,你需要将物品材质置于assets\kubejs\textures\item\<方块ID>.png,自定义模型(可选)放于kubejs\assets\kubejs\models\item\<方块ID>.json下。(即文件结构同资源包)
7、示例
StartupEvents.registry("item",event =>{
event.create("attack_base3","sword").attackDamageBaseline(5);
event.create("ugly_helmet","helmet").fireResistant(true).modifyTier(tier => {
tier.setRepairIngredient(Ingredient.of("#forge:ingots/netherite"))
})
event.create("wudji_pickaxe","pickaxe").burnTime(100).glow(true).displayName("奇怪的镐子")
})