782 发表于 2022-5-10 18:54:53

附加包教程第九期——物品:食物

本帖最后由 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
预告:下一期会教大家制作自己的武器

大家的打赏是对楼主最好的鼓励!

附加包教程系列导航
上一期下一期

不是贝勒咕 发表于 2022-6-4 10:40:47

行为包效果部分的amplifier(效果等级)部分好像应该填写实际数值-1吧[贴吧_疑问]
这是附魔金的抗火部分
          {
            "name": "fire_resistance",
            "chance": 1.0,
            "duration": 300,
            "amplifier": 0
          }

一只呆明球 发表于 2022-10-2 15:15:03

楼主没有做太全吧[贴吧_疑问]

一只呆明球 发表于 2023-6-5 13:17:46

状态效果ID大全

757498172 发表于 2023-6-6 10:13:04

大佬牛逼
页: [1]
查看完整版本: 附加包教程第九期——物品:食物