6.2 食物注册
一、基础信息
借助ItemBuilder
下的方法food(Consumer<FoodBuilder>)
,你可以便捷地创建食物物品,例如:
js
StartupEvents.registry("item",event =>{
event.create("example_food","basic").food(food=>{
// 在此设置食物属性
})
})
二、FoodBuilder
方法 | 描述 | 备注 |
---|---|---|
hunger(int 饱食度) | 设置食物提供的饱食度 | 详情见Minecraft Wiki |
saturation(float 饱和度) | 设置食物提供的饱和度倍率[1] | 详情见Minecraft Wiki |
meat(boolean flag) | 设置是否为肉食 | 例如原版中作为狼的食物 |
meat() | 设置为肉食 | 同上 |
alwaysEdible(boolean flag) | 设置是否随时可食用 | 例如金苹果 |
alwaysEdible() | 设置为随时可食用 | 同上 |
fastToEat(boolean flag) | 设置是否快速食用 | 例如干海带 |
fastToEat() | 设置为快速食用 | 同上 |
effect(ResourceLocation 药效ID, int 持续时间, int 倍率, float 概率) | 食用后给予药效 | 概率为0~1 |
removeEffect(MobEffect 药效) | 食用后移除指定药效 | - |
eaten(Consumer 事件) | 设置食用完成后事件 | [1] |
[1]
饱和度
= 设置的食物提供饱食度
* 饱和度倍率
[2]
FoodEatenEventJS具有以下属性:
player 返回食用玩家
item 返回食用物品
值得注意的是,FoodEatenEventJS是PlayerEventJS的子类,这意味着其具有PlayerEventJS中的方法或属性。
三、示例
js
StartupEvents.registry("item",event =>{
event.create("super_wudji","basic").fireResistant(true).glow(true).food(food=>{
food.hunger(3)
food.saturation(2.0)// 提供的饱和度为 3 * 2 = 6
food.alwaysEdible(true)
food.fastToEat(true)
food.meat(true)
food.eaten(ctx =>{
let player = ctx.player;
if (player.getUsername() == "Wudji_NotFound"){
player.potionEffects.add("minecraft:resistance",23333,5,true,false);
}else{
if(Utils.random() > 0.5){
player.give(Item.of("kubejs:super_wudji"));
}
}
})
})
})