附加包教程第九期——物品:食物
本帖最后由 782 于 2022-6-6 18:20 编辑物品(二)
食物
一、前言
上一期,我们认识了物品的基础组件,今天,我们就来教大家制作可食用物品(食物)。
本期教程假定读者已经基本了解上一期的内容。
static/image/hrline/line4.png
二、行为包文件与详解
现在让我们定义一个食物,这将会使用组件“minecraft:food”和其他一些组件来创建自定义食物。
示例:
{
"format_version": "1.12.0",
"minecraft:item": {
"description": {
"identifier": "demo:my_meal"
},
"components": {
"minecraft:hand_equipped": false,
"minecraft:stacked_by_data": true,
"minecraft:foil": false,
"minecraft:max_stack_size": 64,
"minecraft:use_duration": 32,
"minecraft:food": {
"nutrition": 4,
"saturation_modifier": "normal",
"can_always_eat": false,
"effects": [{
"name": "regeneration",
"chance": 1.0,
"duration": 5,
"amplifier": 0
},
{
"name": "absorption",
"chance": 1.0,
"duration": 120,
"amplifier": 2
}
]
}
}
}
}
详解:
新物品需要唯一的标识符“identifier”,填写字符串。
“minecraft:use_duration”定义玩家需要“使用”多长时间才能完全食用食物,填写整数。
要注意的是,填写的是游戏刻,而不是秒。
“minecraft:food”是能使物品成为食物的组件,为JSON对象。
让我们分开理解:
[*]“nutrition”表示玩家食用食物后要恢复几点饥饿值,填写整数。
[*]“saturation_modifier”表示食物的营养价值,填写字符串。
可以设置为“poor”(差)、“low”(低)、“normal”(普通)、“high”(高)、“good”(好)、“max”(极好)或“supernatural”(超自然)。
[*]“can_always_eat”定义玩家是否可以在饥饿值满的时候吃食物,填写布尔值。
例如,金苹果的这个组件设置为true,但对于大多数其他原版食物来说,它被设置为false的。
[*]“effects”是玩家食用食物时应用的状态效果,是一个数组。让我们深入理解一下:
[*]“name”指定了效果名称,填写字符串。
[*]“chance”指定获得该效果的概率,填写浮点数(小数)。
填写的数就是把百分比换算成小数结果,
例如,食用生鸡肉有30%的概率获得饥饿效果,就填写“0.3”表示30%。
[*]“duration”表示效果获得后持续的时间,填写整数。
这里和上方截然相反,这里是秒,不是游戏刻。
[*]“amplifier”表示效果等级,填写整数。
实际使用时会减1
所以,这一个组件的意义就是:
当玩家食用此物品后,他们肯定会获得5秒的生命恢复 I和120秒的抗性提升 III的效果。
这一个组件是可选的。
static/image/hrline/4.gif
三、资源包文件与详解
示例:
{
"format_version": "1.10",
"minecraft:item": {
"description": {
"identifier": "demo:my_meal",
"category": "Nature"
},
"components": {
"minecraft:icon": "meal",
"minecraft:use_animation": "eat",
"minecraft:render_offsets": "apple"
}
}
}
详解:
这里大部分组件与上一期的相同,有一个不一样:
“minecraft:use_animation”定义玩家使用物品时播放的动画,填写字符串。
可用动画有:“bow”(拉弓),“eat”(食用食物),“drink”(喝药水等),“crossbow”(拉弩时),等等。
四、物品图标与.lang文件示例
这里语法与上一期基本相同,不作过多解释。
物品图标文件示例:
{
"resource_pack_name": "demo",
"texture_name": "atlas.items",
"texture_data": {
"meal": {
"textures": "textures/items/meal"
}
}
}
.lang文件示例:
item.demo:my_meal.name=我的第一个食物
static/image/hrline/line9.png
五、Wiki拓展阅读
1. 饥饿值与饱和度的区别
玩家有两项不同的食物统计,只有其中一项是可见的:饥饿值(可见)和饱和度(不可见)。
饥饿值以一排鸡腿的形式呈现,在Java版及启用桌面版UI的基岩版中显示于屏幕右下方,在启用携带版UI的基岩版中则显示于屏幕右上角。虽然名称为饥饿值,但该值标示的是饱和程度,数值越高玩家越接近饱和。
当玩家进行能量消耗的行动,饱和度是首先减少的食物统计。在饱和度耗尽后,可见的饥饿值才会减少。虽然饱和度一般是隐藏的,然而,如果饥饿值开始抖动,这代表饱和度已被耗尽。
食用一种食物补充固定的饥饿值和饱和度,某些食物比其他食物有较好的饱和度和饥饿值的比值。
玩家当前的饱和度不会超过当前的饥饿值。例如一名玩家的饥饿值是5,他只能有最多5饱和度。记住选择食用效率最高的食物是很重要的:当玩家的饥饿值比较满,尤其在饥饿值开始抖动时,应该食用增加较多饱和度/增加较少饥饿值的食物。如果你在饥饿值低时食用增加较多饱和度的食物,增加的饱和度很可能会被浪费,因为饱和度不可能超过饥饿值。
2.营养价值
营养价值是回复饱和度与饥饿值的比值,高营养价值的食物应当在饥饿度比较满时食用。
static/image/hrline/line2.png
六、本期文件下载
行为包文件示例:
资源包文件示例:
item_texture.json文件示例:
static/image/hrline/line8.png
预告:下一期会教大家制作自己的武器
大家的打赏是对楼主最好的鼓励!
附加包教程系列导航
上一期下一期
行为包效果部分的amplifier(效果等级)部分好像应该填写实际数值-1吧[贴吧_疑问]
这是附魔金的抗火部分
{
"name": "fire_resistance",
"chance": 1.0,
"duration": 300,
"amplifier": 0
} 楼主没有做太全吧[贴吧_疑问] 状态效果ID大全 大佬牛逼
页: [1]