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不难看出,SwordItemBuilderPickaxeItemBuilderAxeItemBuilderShovelItemBuilderHoeItemBuilder均为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("奇怪的镐子")
})

最后更新于

这有帮助吗?