UID196429性别保密经验 EP铁粒 粒回帖0主题精华在线时间 小时注册时间2021-12-18最后登录1970-1-1
| 本帖最后由 782 于 2022-6-6 18:20 编辑
物品(二) 食物 一、前言
上一期,我们认识了物品的基础组件,今天,我们就来教大家制作可食用物品(食物)。
本期教程假定读者已经基本了解上一期的内容。
二、行为包文件与详解
现在让我们定义一个食物,这将会使用组件“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的效果。
这一个组件是可选的。
三、资源包文件与详解
示例:
- {
- "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=我的第一个食物
复制代码
五、Wiki拓展阅读 1. 饥饿值与饱和度的区别
玩家有两项不同的食物统计,只有其中一项是可见的:饥饿值(可见)和饱和度(不可见)。
饥饿值以一排鸡腿的形式呈现,在Java版及启用桌面版UI的基岩版中显示于屏幕右下方,在启用携带版UI的基岩版中则显示于屏幕右上角。虽然名称为饥饿值,但该值标示的是饱和程度,数值越高玩家越接近饱和。
当玩家进行能量消耗的行动,饱和度是首先减少的食物统计。在饱和度耗尽后,可见的饥饿值才会减少。虽然饱和度一般是隐藏的,然而,如果饥饿值开始抖动,这代表饱和度已被耗尽。
食用一种食物补充固定的饥饿值和饱和度,某些食物比其他食物有较好的饱和度和饥饿值的比值。
玩家当前的饱和度不会超过当前的饥饿值。例如一名玩家的饥饿值是5,他只能有最多5饱和度。记住选择食用效率最高的食物是很重要的:当玩家的饥饿值比较满,尤其在饥饿值开始抖动时,应该食用增加较多饱和度/增加较少饥饿值的食物。如果你在饥饿值低时食用增加较多饱和度的食物,增加的饱和度很可能会被浪费,因为饱和度不可能超过饥饿值。
2.营养价值
营养价值是回复饱和度与饥饿值的比值,高营养价值的食物应当在饥饿度比较满时食用。
六、本期文件下载
行为包文件示例:
my_meal.item.json(1005 Bytes, 下载次数: 20)
资源包文件示例:
my_meal.item.json(340 Bytes, 下载次数: 27)
item_texture.json文件示例:
item_texture.json(174 Bytes, 下载次数: 23)
预告:下一期会教大家制作自己的武器
大家的打赏是对楼主最好的鼓励!
附加包教程系列导航 上一期 下一期
|
评分查看全部评分
|