近来的更新加入了不少游戏数据文件,如进度文件(Advancements)、战利品表(Loot table)等等,让我们能够更方便的做到一些特殊功能。
这一章将会探讨这些游戏数据文件的功能、大致用法,让读者在地图制作时能够使用这些文件,让系统更为强大、精简。
测试地图时可以通过 reload命令方便的重新加载游戏数据文件。(权限要求为4)本部分不会详细探讨每个文件的格式细节,详情请自行寻找其他教程以及WIKI。
作为移植页面,格式可能会有偏差,请到教程全集中获得完整体验。
本页面可能随着版本推进而过期,内容以全集为准。
翻页请见本文开头的目录,直接点击对应章节的名称即可翻页。索引贴
资源包
资源包是游戏的重要部分,能够修改贴图、音效,甚至模型、语言等是它的一大特色。其强大的自由度能够为游戏增色不少。
本章节将会介绍资源包内各部分的用途,及其在地图创作中的作用。
本章中若无特殊说明,文件路径默认使用 正斜杠( / ) 分隔。默认从资源包中开始索引。
快速入门:体验制作一个资源包
第一步,找到你的资源包文件夹( .minecraft\resourcepacks ),并在其中新建一个文件夹,文件夹的名字即为资源包的名字。在这里,我们以 newPack 为例。
第二步,打开这个文件夹,然后新建一个文件,名为 pack.mcmeta 。注意,这个文件的扩展名是 .mcmeta 而不是 .txt (虽然也是一个纯文字档案),你可以在文件夹选项中选择展示文件的扩展名。
第三步,打开 pack.mcmeta 。你可以使用Windows自带的写字板,最好使用一些专业点的编辑器,比如Notepad++。然后,向其中添加一下文字:
- {
- "pack": {
- "pack_format": 3,
- "description": "A Tutorial Resource Pack"
- }
- }
添加之后记得保存。
第四步:创建一个.png图片文件,设置图片大小为128x128,并保存为 pack.png 。这个图片就是你的资源包图标。
第四步:在版本文件夹找到当前版本的jar,解压并找到 assets\minecraft\textures 。原版的所有材质都在这个文件夹内。选择一个你想要修改的材质,并按原路径复制到刚才的资源包文件夹内。
第五步:打开游戏,看看你的新资源包是否制作成功。
温馨提示:
这只是最最简单的入门,接下来会更进一步地介绍资源包制作以及其应用。
一些注意事项:
- 资源包中图片必须是*.png格式,且扩展名使用小写。
- 除资源包名外,资源包内的文件/文件夹名不能有中文。
- (资源包名)的下级文件夹是 assets 文件夹,注意不要打包两次造成资源包无法读取。
- (资源包名)的下的pack.mcmeta文件是必须的。
- 配置文件里的所有 文件路径,都不需要写扩展名(如 .ogg , .json ),路径使用斜杠 / 而不是反斜杠 \ ,如应该是 test/a/b 而不是 test\a\b 。
- 小心资源包错误!若出现紫黑色方块,则为资源包错误。可能由模型,状态文件,材质错误,材质不存在导致:
pack.mcmeta文件格式
- (The root tag) (Compound)
- pack :储存资源包信息(Compound)
- pack_format :资源包版本号,必须同游戏版本匹配(游戏版本1.9之前设置为 1 ,1.9和1.10设置为 2 ,1.11和1.12设置为 3 )。(Int)
- description :资源包的描述,在选择资源包时显示,中文需转unicode编码。(String)
- pack :储存资源包信息(Compound)
本教程只会讲解资源包的作用,以及大致介绍资源包。如果需要详细研究,请参照该方面的教程以及wiki。
地图里可以加入资源包,方式为在地图的文件里 .minecraft/saves/(地图名)/ 里加入一个 resources.zip ,内容为(不是放在子文件内) pack.mcmeta 、 pack.png 、 assets 文件夹等。
也可以在服务器里指定资源包(但需要等待下载),方式为在 server.properties 里加入 resource-pack=<资源包zip的URL> 。
更多关于资源包的资料请参见 https://minecraft.gamepedia.com/Resource_pack
材质贴图
材质(Texture)是一个资源包的主体,优秀的材质能深刻地表现地图的主题,并能够同模型配合,达到许多令人惊奇的效果。本篇教程主要讲解材质的格式和一些注意事项。
材质文件保存在 (资源包名)/assets/minecraft/textures 中,其下包含这些文件夹:
- blocks 储存方块材质。
- colormap 储存绿色植物色谱。
- effect 用途不明,可删除,可能同已移除的 Super Secret Settings 有关。
- entity 储存实体材质。
- environment 储存太阳、月亮、云雨雪等材质。
- font 储存字体材质。
- gui 储存GUI材质
- items 储存物品材质。
- map 储存地图及有关内容的材质。
- misc 杂项。
- models 储存盔甲材质。
- painting 储存挂画材质。
- particle 储存粒子材质。
WIKI: http://minecraft.gamepedia.com/Resource_pack/Folders 资源包文件格式。
方块和物品
方块和物品贴图是资源包中数量最多的部分,贴图可直接在原图用任意画图软件修改,保存为png格式。需要注意:
透明材质
多数的固体方块会把透明/半透明的部分用纯色填充(如石头,泥土)。游戏默认就有透明/半透明部分的方块(彩色玻璃)、实体(史莱姆)和所有的物品,都支持透明/半透明。
推荐阅读:
材质贴图的共用
材质共用是游戏中的一种普遍现象,是指一个方块/物品的材质的一部分使用另一个方块/物品的材质。常见的情况有:
- 拉杆底座使用圆石材质;
- 书架侧面使用橡木木板材质;
- 药水瓶的材质是共用的 等。
当然,材质贴图的共用不是游戏硬编码定死的,想要修改,请进一步阅读 方块模型 章节。
动态材质的绘制
动态材质在游戏中是很常见的,如水和岩浆的流动,钟的刻度变化等。本段将简单地介绍动态材质及其绘制方法,详细的教程和技巧请参看链接教程。
材质贴图的格式和绘制
观察 water_flow.png , lava_flow.png 贴图。
能够发现,动态材质的材质贴图文件是一帧一帧的材质贴图纵向拼接而成的。游戏程序读取这个文件时,会将它拆分成多个正方形贴图,然后再按照一定的顺序显示它们,这样,材质就显得“动”起来了。动态材质的长度必须是宽度的倍数。
推荐阅读:
一个特例是,钟和指南针的材质不是简单的动态变化,它们每一帧的材质不需要拼接,详见 物品模型 章节。教程 http://www.mcbbs.net/thread-271536-1-1.html 一些有用的技巧,能更快更好地完成动态材质贴图。
资源包 http://www.minecraftforum.net/forums/mapping-and-modding/resource-packs/1244476-hybrid-v17e-100-animations-blocksmith-hybrid 以原版材质为基础增加了许多动态材质,可供学习参考。
.mcmeta规则文件的编写
观察 lava_still.png.mcmeta 文件,可用记事本直接打开。
- {
- "animation": {
- "frametime": 2,
- "frames": [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,
- 18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1
- ]
- }
- }
- frametime :确定每一动画帧之间的间隔(单位为gametick)。此动画每帧之间的间隔为2 gt.(默认值为1)
- frames :确定动画帧的播放顺序(从0开始)。最大值为19表明这个动画有20帧(20个拼接的16*16贴图)。值 [0,1, ... ,18,19,18, ... ,2,1] 表明:动画从第一帧播放到最后一帧,再从最后一帧播放回第一帧,来回往复。(默认为:从头到尾顺序播放,到最后一帧后跳回第一帧继续播放)
推荐阅读:
WIKI: http://minecraft.gamepedia.com/Resource_pack#Animation
以及上面的资源包
灰白的绿色植物贴图
一些绿色植物,如草方块顶部,树叶,草,蕨类的材质在 blocks 文件夹中是灰色的。它们的真实颜色由 colormap 文件夹下的文件决定。
详细的介绍,见 “色谱” 篇。
实体和盔甲
这两类物品分别储存在 entity 和 models/armor 文件夹中。
实体和盔甲的各个部分被平铺在材质贴图上,需要逐一辨认和修改。
箱子和指示牌材质在 entity 文件夹中。
推荐阅读:
工具: https://www.planetminecraft.com/mod/mcskin3d/ MCSkin3D,能够把扁平的实体材质立体化,支持 entity 文件夹中所有实体模型(在软件右上角切换)。
GUI,字体,地图和画
- GUI为游戏内的各种界面(背包界面,箱子界面,熔炉界面等),可直接在原图修改。注意材质修改仅会改变各种界面的外观,暂时无法在原版修改各种界面的行为。
- 字体文件直接以图片的形式保存( ascii.png 和 ascii_sga.png (附魔文字)等),游戏默认只提供这两个字体文件(主要是英文字体),若要添加其它语言的字体,请使用下方的生成器生成,注意保存扩展名为小写的png。
- 地图文件夹很显而易见, map_icons.png 右下方的蓝色部分只是官方卖萌,对游戏没有影响,可忽略。
- 画也不必多说,材质文件中紫色的方块对游戏没有影响,可忽略。
因缺思厅:凭借汉语强大的字符数量,可以在字体文件里面将一些字改成图案,来丰富地图内容。生成器: http://www.mcbbs.net/thread-229426-1-1.html 可生成中文字体。
资源包: https://pan.baidu.com/s/1mhtG2mc 使用了方正喵呜字体的资源包,可供参考。
色谱
色谱储存在 colormap 文件夹中,由生物群系来为绿色植物着色。
游戏系统会通过算法,根据当前生物群系在色谱中选取颜色,并在灰色的绿色植物材质上覆盖此颜色,类似于HSB颜色法。
其中 grass.png 给草类(草方块,草,蕨类等)植物着色, foliage.png 给树叶着色(云杉树叶,桦木树叶除外)。
生物群系沼泽(Swampland),黑森林(Roofed forest),平顶山(Mesa)及其变种的颜色由硬编码规定,不可通过色谱材质修改。
色谱材质贴图像一个直角三角形,只有左下部分的那个三角有效( foliage.png 右上半部分没有作用)。
粗略的生物群系-色谱对应图:
推荐阅读:
WIKI: http://minecraft.gamepedia.com/Biome#Biome_colors 详细介绍色谱颜色的作用。
粒子及杂项
粒子效果
粒子效果材质储存在 particle 文件夹中。其中的两个材质:
- footprint.png :用途不明,可删除,从远古时代就存在。
- particles.png :储存大量游戏中常见的粒子效果,
粒子效果和材质文件的位置对应:
杂项
杂项储存在 misc 文件夹中,主要是游戏中的一些小细节,如附魔光效,南瓜头盔的视线遮挡,水下的视觉效果等,有以下文件:
- enchanted_item_glint.png :附魔物品的光效。
- forcefield.png :地图边界墙的材质。
- pumpkinblur.png :戴上南瓜头盔时,显示在眼前的材质。
- shadow.png :生物下方的阴影。
- underwater.png :在水下时,显示在眼前的材质。
- unknown_pack.png :资源包没有 pack.png 文件时,资源包预览图显示这个贴图。
- unknown_server.png :服务器没有设置预览图时显示这个贴图。
- vignette.png :进入比较黑暗的地方(洞穴等)时,显示在眼前的材质。(游戏会对这个贴图做反色处理)
- enchanted_item_glint.png.mcmeta
- pumpkinblur.png.mcmeta
- shadow.png.mcmeta
- vignette.png.mcmeta
mcmeta文件详细的json格式,请见WIKI:http://minecraft.gamepedia.com/Resource_pack#Properties
模型
自定义模型(Models)是1.8版本加入的特性,它的加入极大地提高了游戏的自由度。通过模型的修改,玩家可以随意变换方块的形状,不同部分的贴图,甚至能添加新的物品外观。巧用模型能打破游戏中有限物品的限制,为地图制作取得更宽阔的创作空间。
- 状态文件储存在 (资源包名)/assets/minecraft/blockstates 下,
- 模型储存在 (资源包名)/assets/minecraft/models 下。
这两个文件是相互配合的,下文会讲到。
中文教程 http://www.mcbbs.net/thread-491597-1-1.html 详细介绍各种标签的作用并举例。
WIKI http://minecraft.gamepedia.com/Model
状态文件
状态文件(Block States)是方块模型文件和游戏系统交互的“中介”。当一个方块再游戏中被“看见”时,游戏系统就通过 文件名 来查找方块所对应的状态文件,然后根据状态文件内的内容,确定方块在当前状态时使用的模型。因此 游戏自带 的状态文件的文件名不能更改,但可以添加新的状态文件。
方块状态
相同的方块可能会有不同的状态,如:
- 蛋糕的块数不同;
- 草方块上是否有雪;
- 火把的朝向不同,
等等。
可以在游戏中按 F3 ,在屏幕右侧中部查看所指向方块的方块状态。
通过方块的状态文件,不同的方块状态会使用不同的模型。
WIKI http://minecraft.gamepedia.com/Block_states 所有方块的状态一览。
状态文件-JSON标签
限于篇幅,这里只简述状态文件中的核心部分:
- (The root tag) (Compound)
- variants :包含多种方块状态。(Compound)
- (A variant) :储存一个方块状态(标签名为方块状态),及其对应的 单个 模型。(Compound)
- model : assets/minecraft/models/blocks 下的模型文件路径(不包括扩展名)。(String)
- ...其他标签
- (A variant) :储存一个方块状态(标签名为方块状态),及其对应的 多个 模型。和上方的(A variant)标签不同的是,这是一个list,会从中根据权重随机抽取一个模型。(List)
- (A model) :一种模型。(Compound)
- model : assets/minecraft/models/blocks 下的模型文件路径(不包括扩展名)。(String)
- weight :此模型被选中的权重。Int。
- ...其他标签,和上方单个模型的内容相同。
- (A model) :一种模型。(Compound)
- (A variant) :储存一个方块状态(标签名为方块状态),及其对应的 单个 模型。(Compound)
- variants :包含多种方块状态。(Compound)
blockstates/torch.json
比较基础的状态文件,一种方块状态只对应一种模型。
- {
- "variants": {
- "facing=up": { "model": "normal_torch" },
- "facing=east": { "model": "normal_torch_wall" },
- "facing=south": { "model": "normal_torch_wall", "y": 90 },
- "facing=west": { "model": "normal_torch_wall", "y": 180 },
- "facing=north": { "model": "normal_torch_wall", "y": 270 }
- }
- }
- {
- "所有方块状态": {
- 当facing状态的值为up时(直立),调用 models/normal_torch.json 模型,
- 当facing状态的值为east时(贴在墙上面朝东方),调用 models/normal_torch_wall.json 模型,
- 当facing状态的值为south时,调用 models/normal_torch_wall.json 模型,并在y轴(纵轴)上旋转90°.
- west, north 同理.
- }
- }
blockstates/grass.json
出现一种方块状态对应多种模型的情况。每种模型(上文的 (A model) 标签)并列储存在一个list中。
- {
- "variants": {
- "snowy=false": [ //这种方块状态对应了四种模型。所以将这四种模型并列储存在list(方括号)中.
- { "model": "grass_normal" }, //由于没有设置 weight 标签,每种模型都有25%的几率被选择。
- { "model": "grass_normal", "y": 90 },
- { "model": "grass_normal", "y": 180 },
- { "model": "grass_normal", "y": 270 }
- ],
- "snowy=true": { "model": "grass_snowed" } //这种方块状态只对应一种模型,和上文torch.json类似.
- }
- }
注意:状态文件只调用模型文件,方块的 材质 在模型文件中确定。
当一个方块没有任何方块状态时, (A variant) 标签的名称为 "normal" .
如灵魂沙, blockstates/soul_sand.json :
- {
- "variants": {
- "normal": { "model": "soul_sand" }
- }
- }
WIKI http://minecraft.gamepedia.com/Model#Block_states 状态文件
工具 http://www.bejson.com/ JSON检查。
方块模型
方块模型(Block Models)确定一个方块的形状及各部分材质。方块模型文件的文件名可以更改,但要和状态文件中指定的模型吻合。
方块模型文件储存在 (资源包名)/assets/minecraft/models/block 中。
方块模型-JSON标签
限于篇幅,这里只简述方块模型中的核心部分。详细的讲解请见下文或文章开头的教程贴:
- (The root tag)
- parent : assets/minecraft/models 下父模型的路径(不包括扩展名),详细用途见下。(String)
- display :确定方块在不同地方的旋转和缩放(拿在手上时,在背包时,成为掉落物时...)(Compound)
- ...
- ...
- textures :确定方块模型的一些材质,或使用材质变量。(Compound)
- (A texture variable) :定义一个材质变量,并为它赋值。标签名为材质变量名称(自定义),标签的值(材质变量的值)为 assets/minecraft/textures 下的材质文件(不包括扩展名)。(String)
- (A texture variable) :定义一个材质变量,并为它赋值。标签名为材质变量名称(自定义),标签的值(材质变量的值)为 assets/minecraft/textures 下的材质文件(不包括扩展名)。(String)
- elements :(List)
- (An element) :单个元素。(Compound)
- from :设置元素起点的坐标,格式为 [x, y, z] (List)
- to :设置元素终点的坐标,格式为 [x, y, z] (List)
- faces :确定一个元素六个面的材质。(Compound)
- down, up, north, south, west, east :单个面。(Compound)
- texture : assets/minecraft/textures 下材质的路径(不包括扩展名)。从中读取材质。(String)
- uv :从 texture 标签读取的材质png文件中,截取一部分作为当前面的材质,格式为[x1,y1,x2,y2].(List)
- down, up, north, south, west, east :单个面。(Compound)
- (An element) :单个元素。(Compound)
父模型
父模型的作用相当于“模板”,它将形状相同,但只有材质不同方块模型集中到一个模型文件中,并将材质( texture )部分作为一个材质变量留空,由子模型传递不同的材质。一个例子:
- torch.json (父模型)
- normal_torch (子模型1)
- lit_redstone_torch.json (子模型2)
- unlit_redstone_torch.json (子模型3)
详细的例子和代码分析,见文章开头的教程。
材质变量
材质变量在父模型中,通过 # + 变量名 引用,在子模型中通过 (A texture variable) 标签定义材质变量,并由父模型引用,简单的例子:
torch.json 局部(父模型)
- ...
- "down": { "uv": [ 7, 13, 9, 15 ], "texture": "#torch" },
- "up": { "uv": [ 7, 6, 9, 8 ], "texture": "#torch" }
- ...
- {
- "parent": "block/torch",
- "textures": {
- "torch": "blocks/torch_on"
- }
- }
- ...
- "down": { "uv": [ 7, 13, 9, 15 ], "texture": "blocks/torch_on" },
- "up": { "uv": [ 7, 6, 9, 8 ], "texture": "blocks/torch_on"}
- ...
from, to, uv
from, to 通过两个三维坐标,确定一个长方体元素的大小和位置(一个方块由单个或多个元素组成)。类似于服务器的圈地插件和fill命令的方式,通过两个三维坐标确定一个长方体范围。
uv 标签是在 texture 标签取得的材质中,截取一部分作为元素某个面的材质。因为某些元素的某些面不会被单独准备材质,所以需要从其它材质中截取部分来使用(例如火把的顶部和底部是没有单独的png材质文件的)。
如,火把的顶部和底部,通过uv截取,使用的是以下部分的材质:
这三个标签的单位都是 像素 。from, to标签是在161616像素(默认)的一个正方体方块中取得一部分空间。uv是在16*16像素(默认)的材质贴图中截取一部分贴图。
推荐阅读:
WIKI http://minecraft.gamepedia.com/Model#Block_models 方块模型
编辑器 https://pan.baidu.com/s/1dFKRV0X 免费
编辑器 https://cubik.studio/get 付费
资源包 http://www.mcbbs.net/thread-464655-1-1.html 3D原版资源包,可供参考
物品模型
物品模型确定物品在不同位置时(拿在手上、在背包中、在地上时)的旋转和缩放。也能根据当前物品状态的不同,使用不同的模型或材质。游戏自带的物品模型文件的文件名不能更改,但可以添加自定义物品模型。
物品模型文件储存在 (资源包名)/assets/minecraft/models/item 中。
物品模型-JSON标签
物品模型的大部分标签和方块模型的相似,这里只介绍部分核心内容,详细的讲解请见文章开头的教程:
- (The root tag)
- parent : assets/minecraft/models 下父模型的路径(不包括扩展名),详细用途见上。(String)
- textures :确定物品模型的一些材质,其下的标签从 assets/minecraft/textures 开始加载材质(不包括扩展名)。(Compound)
- layer<#> : # 是一个从0开始的整数,如 layer0 ,规定物品(狭义的物品,不能被放置的那一种,如木棍、玻璃瓶)的材质。有些物品不止有一个layer(刷怪蛋,药水瓶)。layer的数量是由硬编码规定的,不能修改。(String)
- (A texture variable) :定义一个材质变量,并为它赋值。标签名为材质变量名称(自定义)。(String)
- overrides :使用物品标签(Item Tags)确定不同物品状态下物品的模型。(List)
- (A case) :一个标签。(Compound)
- predicate :储存多个物品标签。(Compound)
- (A case) :单个物品标签,此标签的名称为物品标签的名称。物品标签详细列表见下。(String)
- (A case) :单个物品标签,此标签的名称为物品标签的名称。物品标签详细列表见下。(String)
- model : assets/minecraft/models 下的模型路径(不包括扩展名)。从中调用模型。(String)
- predicate :储存多个物品标签。(Compound)
- (A case) :一个标签。(Compound)
物品标签(Item Tags)
物品标签的作用类似于方块的状态文件,不是所有的物品都需要物品标签,所有的物品标签:
- angle :用于指南针。当前指南针的角度,值在0和1之间。
- blocking :用于盾。玩家用盾格挡时值为1,反之为0.
- broken :用于鞘翅。当鞘翅损坏(耐久度只剩下1)后,值为1,反之为0.
- cast :用于鱼竿。若鱼竿抛出钓线,值为1.
- cooldown :末影珍珠或紫颂果的剩余冷却时间,值在0和1之间。
- damage :用于有耐久度的物品。物品用掉的耐久,值为 1 - (当前耐久/总耐久) ,值在0和1之间。
- damaged :用于有耐久度的物品。当物品的耐久度不是100%时,值为1。若该物品的 Unbreakable 标签值为 1 ,damaged标签的值始终为0.
- lefthanded :当主手设置为左手时,值为1.*
- pull :用于弓,表示弓的蓄力程度,值在0和1之间。
- pulling :用于弓。如果正在拉弓,值为1.
- time :用于时钟。表示当前的时间,值在0和1之间。
- lefthanded 标签:
例如,游戏设置中将主手设置为左手,此时将一个物品放在副手(右手)上。那么这个物品在右手上使用的模型,仍然是 "lefthanded":1 设置的模型。
假定有以下物品模型 example.json :
- ...
- "overrides": [
- {"predicate": {"lefthanded": 0 },"model":"item/right"},
- {"predicate": {"lefthanded": 1 },"model":"item/left"}
- ]
- ...
当主手设置为 左手 时,双手手持,GUI中的模型使用 left.json 。掉落物,展示框上的模型使用 right.json 。这可能是一个BUG,将来也许会修复,测试版本1.12。
- 相同的物品标签使用不同值时,值 从小到大 排列。
例子, example.json :
- ...
- "overrides": [
- {"predicate": {"damage": 0.1 },"model":"item/sample1"},
- {"predicate": {"damage": 0.15 },"model":"item/sample2"},
- {"predicate": {"damage": 0.233 },"model":"item/sample3"}
- ]
- ...
- 一些用途:
- 可以通过damage标签,配合游戏中的耐久度,用同一个物品显示多种模型/材质。
- 根据拉弓的不同程度,改变弓的模型或材质。
- 更精确地控制钟的时间显示。
- ......
WIKI http://minecraft.gamepedia.com/Model#Item_models 物品模型
WIKI http://minecraft.gamepedia.com/Model#Item_tags 物品标签
编辑器 https://cubik.studio/get 英文,付费
编辑器 http://server.zofenia.de/blockbench/ 英文,免费
音效
音效(Sounds)文件储存在 (资源包名)/assets/minecraft/sounds 中。如果你没有找到这个文件夹,你可以自己创建。
音效文件以 *.ogg 的格式储存。需要用转换软件(网上很多)对其它格式的音效进行转换。
同时,可以使用 playsound 命令来播放任意音效,来增进游戏气氛,达到特殊效果(枪声,拾取音效等)。
原版音效
替换原版音效
若要替换原版的音效,请参照以下网址,按照树状图创建文件夹或命名ogg文件。
sounds 文件夹顺序:http://minecraft.gamepedia.com/Resource_pack/Folders
原版sounds文件夹下载。可直接放入资源包中,替换需要的音效文件。(感谢 pca006132 的提供)
http://pan.baidu.com/s/1pLNpgPd
提取原版音效
原版的音效文件存放在 (游戏目录)/.minecraft/assets 下
- indexes 文件夹储存音效文件的索引。
- objects 文件夹储存音效文件。
- {
- "objects": {
- "minecraft/sounds/mob/stray/death2.ogg": {
- "hash": "d48940aeab2d4068bd157e6810406c882503a813",
- "size": 18817
- },
- "minecraft/sounds/mob/husk/step4.ogg": {
- "hash": "70a1c99c314a134027988106a3b61b15389d5f2f",
- "size": 9398
- },
- ...
知道这些信息后,我们就可以在objects文件夹中寻找音效文件了。音效文件路径: (资源包名)/assets/minecraft/sounds/mob/stray/death2.ogg
hash 值: d48940aeab2d4068bd157e6810406c882503a813
文件大小: 18817 B
- 1.取 hash 值的前两位作为objects文件夹的二级目录。(如 sounds/mob/stray/death2.ogg 的hash值前两位是 d4 ,那么音效文件就在 objects/d4 中)
- 2.找到以hash值命名的文件,修改扩展名为ogg则为音效文件。
添加自定义的音效
自定义的音效存放在 (资源包名)/assets/minecraft/sounds 中,以*.ogg格式保存,文件名随意,但要和 sounds.json 文件对应。
sounds.json 文件
sounds.json 文件储存 (资源包名)/assets/minecraft 下。如果有自定义音效,就需要自己创建此文件。
主要JSON格式:
- (The root object) (Compound)
- (A sound event) :单个音效事件,标签名称为音效时间名称。确定音效事件(Sound Event)名。通常为 储存路径.文件名 。详见WIKI.(Compound)
- category :规定音效文件的种类,以便在游戏中使用。(String) *
- sounds :确定此音效事件使用的音效文件,触发音效事件后随机选取一个音效播放。(List)
- (A sound file) :单个音效文件。(Compound)
- name : assets/minecraft/sounds 下的音效文件路径(不包括扩展名)。(String)
- stream :值为 true/false ,确定音效是否以流(Stream)的形式从文件中读取。推荐设置为true防止音效卡顿。默认为false.(String)
- (A sound file) :单个音效文件。(Compound)
- (A sound event) :单个音效事件,标签名称为音效时间名称。确定音效事件(Sound Event)名。通常为 储存路径.文件名 。详见WIKI.(Compound)
- ambient
- weather
- player
- neutral
- hostile
- block
- record
- music
- master
- voice
playsound 命令
主要格式:
- playsound <sound> <source> <player> [x] [y] [z] [volume] [pitch] [minimumVolume]
<source> 则是音效种类,即上文 category 标签的值。
简单的例子:
现在在 (资源包名)/assets/minecraft/sounds 下存有一 自定义的 音效文件 european.ogg
我们想让它在游戏中播放,作为中奖音效。那么 assets/minecraft 下的 sounds.json 可以这样写:
- {
- "getprize": {
- "category": "record",
- "sounds": [
- {
- "name": "european",
- "stream": true
- }
- ]
- }
- }
- playsound getprize record Steve
推荐阅读:
同样,也可使用 stopsound 命令关闭音效:WIKI http://minecraft.gamepedia.com/Commands#playsound playsound命令
- stopsound <player> [source] [sound]
Loot table
战利品表(Loot table),是一个对地图制作非常有用的功能。
它能够随机物品,作为生物掉落、箱子随机生成以及进度奖励。
最重要的地方在于Loot table拥有很多的函数(Function),可以随机一些NBT属性,如附魔、Attributes等。这些如果需要命令来给予的话会非常的繁复。
战利品表可以自定义,只需要根据下文指出的架构编写JSON文件并将JSON文件放于 (地图)/data/loot_tables/(命名空间)/路径 里,这方式和命令函数类似。
如果把战利品放在命名空间为 minecraft ,路径和原版相同名称的战利品表一样的地方,则会覆盖该原版战利品表。
这文件需要使用JSON格式。
结构
- (Loot table根标签)
- pools : 随机池列表。使用此战利品表的时候每个随机池都会执行一次。
- 一个随机池(见下)
- 一个随机池(见下)
- pools : 随机池列表。使用此战利品表的时候每个随机池都会执行一次。
随机池
- (一个随机池)
- conditions : 一堆使用此随机池的条件。必须全部符合才会执行本池。List。
- 一个condition(见下)
- 一个condition(见下)
- rolls : 指定会在entries里随机抽取多少次。(每次只会抽取符合条件的entry。)整数。
- rolls : 在下方范围内选择一个随机数,决定会在entries里随机抽取多少次。
- min : 随机数的下限,也就是说随机数不会小于这个数(但可以等于)。整数。
- max : 随机数的上限,也就是说随机数不会大于这个数(但可以等于)。整数。
- bonus_rolls : 每点幸运值增加roll的次数,向下取整数。浮点数。默认为0。可以为负数。
- bonus_rolls : 在下方范围内选择一个随机数,决定每点幸运值增加roll的次数,向下取整数。浮点数。可以为负数。
- min : 随机数的下限。浮点数。
- max : 随机数的上限。浮点数。
- entries : 随机项目列表。
- 一个entry。
- 一个entry。
- conditions : 一堆使用此随机池的条件。必须全部符合才会执行本池。List。
游戏会根据指定玩家的幸运值计算出额外的rolls( bonus_rolls*luck ),然后随机执行 roll + bonus_rolls*luck 次选择合适的随机项目(不会选择到不符合条件的随机项目,可以重复选择)。
随机项目
- (一个随机项目)
- conditions : 一堆使用此随机项目的条件。必须全部符合才会选择本项目。List。
- type : 指定此随机项目的类型。字串。可能数值有:
- loot_table : 调用别的战利品表。(把该战利品表随机出来的物品当此项目的奖励)
- item : 随机物品。最常用的类型。
- empty : 就是抽到空箱子了,不给任何奖励。这个看似无用,实际上可以用此来做到加权的随机rolls数量。
- name :
- 如果 type 为 item ,则填写给予的物品id,如 minecraft:stone 。默认物品数量为1。
- 如果 type 为 loot_table ,则填写调用的战利品表名称。 (命名空间):路径 。请看战利品表名称部分,
- functions : 如果 type 为 item ,则对给予的物品执行特定函数,随机附魔、attributes、数量等等。注意函数的次序非常重要,游戏会顺序执行函数,所以一些修改物品数据的函数应该在如 set_count 函数后执行,否则便会出错。
- 一个函数(见下)
- 一个函数(见下)
- weight : 此随机项目的权重。随机项目被选择的几率= 此项目权重/整个随机池的所有随机项目权重的加总 。整数。
- quality : 每点幸运值对该项目的权重增值,加完后向下取整数。整数。
条件(Condition)
- (一个条件)
- condition : 条件的名称,如 entity_properties 。
- ...: 其他条件的标签。
- entity_scores - 检测一个实体的记分板分数。
- entity : 需要检测的实体。 this 为这个死掉的实体(如果这是生物掉落的战利品表), killer 为检测杀死该实体的实体, killer_player 为检测杀死该实体的玩家。
如果指定了 killer 或 killer_player 但不存在这实体,则此条件不满足。 - scores : 需要检测的分数。所有分数都需要满足才算满足此条件。如果指定变量不存在的话则算作不满足。
- <记分板变量名称> : 标签名称为记分板变量名称。指定实体的分数必须为此分数才算满足此条件。整数
- <记分板变量名称> : 标签名称为记分板变量名称。指定实体的分数必须在此范围才算满足此条件。
- min : 最小分数。
- max : 最大分数。
- entity : 需要检测的实体。 this 为这个死掉的实体(如果这是生物掉落的战利品表), killer 为检测杀死该实体的实体, killer_player 为检测杀死该实体的玩家。
假设我们要检测杀死生物的玩家的分数 test 为30-40, test2 为1分,我们可以这么写:(只写出一个condition)
- {
- "condition": "entity_scores",
- "entity": "killer_player",
- "scores": {
- "test": {
- "max": 40,
- "min": 30
- },
- "test2": 1
- }
- }
那些条件的详细列表还请参照 https://minecraft.gamepedia.com/Loot_table#Conditions
函数(Function)
- 一个函数
- function : 函数名称。
- conditions : 使用此函数的条件列表。
- 一个condition。
- 一个condition。
- ...其他的函数标签。
- enchant_randomly : 随机选择一个附魔,如果该附魔拥有多个等级(玩家能够附魔的等级)则随机选择一个等级。
- enchantments : 可供选择的附魔名称。如果被忽略,则从所有附魔中随机附魔。
- enchantments : 可供选择的附魔名称。如果被忽略,则从所有附魔中随机附魔。
假设我们需要随机附魔保护或火焰保护,我们可以这么写:(只写出一个函数)
- {
- "function": "enchant_randomly",
- "enchantments": [
- "protection",
- "fire_protection"
- ]
- }
那些函数的详细列表还请参照: https://minecraft.gamepedia.com/Loot_table#Functions
战利品表名称
战利品表的名称为 (命名空间):路径 ,路径不包括文件扩展名。与命令函数类似。
比如路径在 data/loot_tables/test/test1.json 的战利品表,调用时其名称为 test:test1 。
使用
生物掉落可以设置 DeathLootTable ,数值为战利品表名称。这样生物死亡时就会掉落指定战利品表的奖品。
箱子和箱子矿车可以设置 LootTable ,数值为战利品表名称。这样箱子打开时就会生成指定战利品表的物品(物品会被随机放置在不同格子内),取代原先的物品。
注意: 箱子和箱子矿车被打开时,战利品表会被设置为无,如果这时候被重新设置战利品表的话就会马上刷新箱子内容。高频的话甚至会造成以下情况:
参见
本章不是一个详细讲解战利品表的章节,因为目前已经有很详细的教程覆盖了战利品表的各种使用。
请参见2b的教程: http://www.mcbbs.net/thread-619468-1-1.html
进度
进度(Advancements)是Minecraft在1.12加入的新系统,替代了旧有的成就(Achievement)系统。
进度除了能引导玩家进行游戏外,有以下特别的地方:
- 能够自定义。玩家能够自定义进度,只需要根据下文指出的架构编写JSON文件并将JSON文件放于 (地图)/data/advancements/(命名空间)/路径 里,这方式和命令函数类似。自定义的功能也非常强大,详见下方的介绍。
- 更为精美的界面。进度有一个独立的界面,里面有不同的选项卡(Tab),显示进度树(Tree),每个进度都有图标、标题、描述,选项卡的背景也能自定义。
- 完成奖励。能够定义完成进度时获得的奖励。
每个玩家的每个进度只能获得一次,除非被人使用命令删除了该玩家的该进度。
进度的判据(Criteria)不在乎完成时间,只要完成的判据符合要求(Requirements),就可以完成该进度。
如果把进度放在命名空间为 minecraft ,路径和原版相同名称的进度一样的地方,则会覆盖该原版进度。
地图制作中,我们除了利用进度引导玩家游戏以外,我们也会使用进度当作检测方法,检测玩家行为。
常见类型
本章节的JSON格式将会以列表方式列出,类型会在描述里说明(compound除外)。
温馨提示:别直接使用浮点数检查数值,如果那是一个浮点数,请使用其范围(浮点数)版本。
范围
- key name (标签名称)
- max : 最大数值,类型为(类型)。
- min : 最小数值,类型为(类型)。
实体格式(Entity)
- Entity
- distance
- absolute : 绝对距离,即 距离^2 = x^2 + y^2 + z^2 ,其中 ^ 代表次方,x y z 代表相应轴上的距离。类型为 范围(整数)。
- horizontal : 平面距离,即 距离^2 = x^2 + z^2 。类型为 范围(整数)。
- x : x轴上的距离。类型为 范围(整数)。
- y : y轴上的距离。类型为 范围(整数)。
- z : z轴上的距离。类型为 范围(整数)。
- effects
- <minecraft:效果名称> ,一个效果,以其效果名称为标签名称。(需要 minecraft: 前缀)
- amplifier : 效果倍率,整数int。(如果需要检测范围请使用下一个标签)
- amplifier : 效果倍率。类型为 范围(整数)。
- duration : 时间(秒数),整数int。
- duration : 时间(秒数)。类型为 范围(整数)。
- <minecraft:效果名称> ,一个效果,以其效果名称为标签名称。(需要 minecraft: 前缀)
- location : 检测实体位置相关信息。类型为 位置。
- nbt : 检测实体NBT,类型为字串。(NBT的格式就是命令里的检测格式,Base tag为 entity ,如 "{CustomName:\"test\"}" )
- type : 实体ID,需要 minecraft: 前缀,类型为字串。
- distance
物品格式(Item)
- Item
- count : 物品数量。整数int。
- count : 物品数量。范围(整数)。
- data : 物品数据值。整数int。
- durability : 物品耐久度。整数int。
- durability : 物品耐久度。范围(整数)。
- enchantments : 附魔列表。子标签为compound。
- (一个附魔)
- enchantment : 附魔id(需要加上 minecraft: 前缀)。字串。
- level : 附魔等级。整数int。
- level : 附魔等级。范围(整数)。
- (一个附魔)
- item : 物品ID。(需要加上 minecraft: 前缀)。字串。
- nbt : 物品NBT。Base tag为 tag ,如 "{display:{Name:\"distilled water\"}"} 。字串。
- potion : 药水ID。参见https://minecraft.gamepedia.com/Potion#Item_data。字串。
位置格式(Location)
- location
- biome : 实体在于的生态群系ID。类型为字串。
- dimension : 实体在于的世界。类型为字串。
只接受 overworld , the_end 及 the_nether。 - feature : 实体在于的结构。类型为字串。
只接受 EndCity , Fortress , Mansion , Mineshaft , Monument , Stronghold , Temple 及 Village。 - position
- x : 实体的x坐标。类型为浮点数。
- x : 实体的x坐标。类型为 范围(浮点数)。
- y : 实体的y坐标。类型为浮点数。
- y : 实体的y坐标。类型为 范围(浮点数)。
- z : 实体的z坐标。类型为浮点数。
- z : 实体的z坐标。类型为 范围(浮点数)。
伤害类型(Damage type)
- damage type
- bypasses_armor : 伤害是否不能被阻挡。类型为布尔值(True/False)。
伤害来源包括: 火焰,窒息(方块及世界边界),实体挤压(范围内太多实体),溺水,饥饿,掉落,撞墙(飞行时),虚空(掉落虚空及/kill命令),重新计算血量(比如超出了上限),魔法伤害,凋零伤害。 - bypasses_invulnerability : 伤害是否能伤害无敌的玩家(创造模式)。类型为布尔值。
伤害来源只有虚空伤害(包括掉落虚空及 kill 命令)。 - bypasses_magic : 伤害是否来自饥饿。类型为布尔值。
- direct_entity : 直接伤害来源(实体,如 箭、火球等,不在乎是谁射出的)。类型为 实体。
- is_explosion : 检查伤害是否来自爆炸。类型为布尔值。
伤害来源包括: 爬行者,TNT,矿车TNT,地狱幽灵火球,床(在地狱睡时会爆炸),凋灵,凋灵之首。 - is_fire : 检查伤害是否来自火焰。类型为布尔值。
伤害来源包括: 站在火焰方块里,整个人着火,在熔岩里,在岩浆块上,恶魂火球,烈焰人火球。 - is_magic : 检查伤害是否来自魔法。类型为布尔值。
伤害来源包括: 闪电,瞬间伤害,中毒,守卫者的部分射线伤害(部分算作生物伤害),唤魔者的尖牙攻击,无主的凋灵之首(unowned wither skulls, 通过 summon 命令生成的, 因为凋灵发射的凋灵之首算作生物伤害) - is_projectile : 检查伤害是否来自投射物。类型为布尔值。
投射物包括: 烈焰人火球 ,末影龙火球,恶魂火球,羊驼的口水,箭(所有),射出的火焰弹,丢出的蛋,丢出的雪球,凋灵之首。 - source_entity : 伤害来源(实体)。类型为 实体。
如果是投射物的伤害,则需要视乎该投射物有没有"主人",也就是射出此投射物的实体。如果有,则算作该主人造成的伤害,否则则算作该投射物的伤害。
如果是中毒这类伤害,则不会被算作是实体造成的伤害(即使是由女巫扔出的药水)。
- bypasses_armor : 伤害是否不能被阻挡。类型为布尔值(True/False)。
伤害(Damage)
- damage
- blocked : 检查伤害有没有被成功阻挡。类型为布尔值。
- dealt : 检查原始伤害数值(不计算伤害减免)。类型为浮点数。
- dealt : 检查原始伤害数值(不计算伤害减免)。类型为范围(浮点数)。
- direct_entity : 直接伤害来源(实体,如 箭、火球等,不在乎是谁射出的)。类型为 实体。
- source_entity : 伤害来源(实体)。类型为 实体。
如果是投射物的伤害,则需要视乎该投射物有没有"主人",也就是射出此投射物的实体。如果有,则算作该主人造成的伤害,否则则算作该投射物的伤害。
如果是中毒这类伤害,则不会被算作是实体造成的伤害(即使是由女巫扔出的药水)。 - taken : 检查实际受到的伤害(计算伤害减免后)。类型为浮点数。
- taken : 检查实际受到的伤害(计算伤害减免后)。类型为范围(浮点数)。
- type : 检查伤害的类型。类型为 伤害类型。
criteria及requirements
Advancement 里也使用criteria及trigger,翻译也和记分板变量里的一样,然而这些并不是记分板的元素。
criteria格式
criteria(判据)格式:
- (Advancement根标签)
- criteria : 一堆判据,类型为compound。
- <criteria name> : 一个判据。标签名称为自定义判据名称(命令里及requirements可能需要使用,建议使用有意义的名称),类型为compound。
- trigger : 判据的触发器,指定这判据会检查什么。类型为字串
- conditions : 判据的详细条件。不同触发器会有不同条件,此处就不详细列出。类型为compound。
不一定存在。比如 minecraft:impossible 这个trigger并没有conditions。
- <criteria name> : 一个判据。标签名称为自定义判据名称(命令里及requirements可能需要使用,建议使用有意义的名称),类型为compound。
- criteria : 一堆判据,类型为compound。
我们以以下两个触发器为例子:触发器及其详细条件可以在 https://minecraft.gamepedia.com/Advancements#List_of_triggers 找到。
Conditions里可能使用上述常见格式,如 Damage tags 代表伤害, Tags common to all items 代表物品格式等。
阅读wiki的JSON架构和阅读NBT类似,标签左边都会有个图标表示标签类型,如果分不清则可以把鼠标悬浮在该图标上,这样会显示该标签类型。
比方说第一个我们希望检查吃了一个名字为 毒苹果 的苹果。
我们会这样写(假设判据名称为 ate_poison_apple ):
- {
- "criteria": {
- "ate_poison_apple": {
- "trigger": "minecraft:consume_item",
- "conditions": {
- "item": "minecraft:apple",
- "nbt": "{display:{Name:"毒苹果"}}"
- }
- }
- }
- }
然后如果我们只想让命令能够给予这进度,我们会使用 minecraft:impossible 这触发器。
- {
- "criteria": {
- "impossible": {
- "trigger": "minecraft:impossible"
- }
- }
- }
requirements
如果我们想做复杂一些的判断,比如说有多个选项,每个选项需要达成一堆条件,那么我们应该怎么做呢?
方法就是使用requirements。(不过如果是全部判据都需要达成的话就不需要写requirements)。
- (Advancement根标签)
- requirements : (所有 子列表都要符合要求才算完成)
- (一个列表)。(任何 一个子标签符合就算整个列表符合要求)
- 一个判据名称,字串。
- 一个判据名称,字串。
- (一个列表)。(任何 一个子标签符合就算整个列表符合要求)
- requirements : (所有 子列表都要符合要求才算完成)
比如说
- (a or b) and (c or d or e)
写成requirements就是
- {
- "requirements": [
- ["a", "b"],
- ["c", "d", "e"]
- ]
- }
如我们达成了a和c就能获得该进度。然而获得a和b就无法获得该进度。
注意,我们写 a and (b or c) 这种式子的时候,a是得放进独立的一个列表里的,即使式子里并没有任何括号
- {
- "requirements": [
- ["a"],
- ["b", "c"]
- ]
- }
- Advancements没有not
- 写出来的合取范式多长就不知道了
显示相关
显示格式
- (advancement根标签)
- display (可选,不存在则该进度不会以任何方式显示)
注意,如果填写了display,里面的标签除非有默认数值或特别指明可选,否则都必须填写。
- icon : 进度的图标,在弹出提示及进度界面里显示。(其实就是个物品贴图)
- item : 物品ID,需要有 minecraft: 前缀。字串。
- data : 物品数据值。整数。
- title : 进度的标题。字串。(如果需要使用样式请使用下一个类型)
- title : 进度的标题。Compound(JSON文本)。
可以使用样式及点击事件。(点击事件只会在聊天栏公布玩家获得进度时点击生效) - description : 进度的描述。字串。(如果需要使用样式请使用下一个类型)
- description : 进度的描述。Compound(JSON文本)。
可以使用样式,但不能使用点击事件。 - frame : 进度图标的外框,默认为 task 。外框将会在下文详细列出。
- background : 指定此进度选项卡背景的路径。只对根进度有效(即无parent标签)。将会在下文讲解。字串。
- show_toast : 是否在完成此进度后在屏幕右上方显示提示信息。默认为显示(True)。布尔值。
- announce_to_chat : 是否在完成此进度后在聊天栏广播信息。默认为显示(True)。布尔值。
- hidden : 是否在进度选项卡里隐藏此进度及之后的子进度(直至完成此进度才会被显示)。对根进度无效。默认为False。布尔值。
- icon : 进度的图标,在弹出提示及进度界面里显示。(其实就是个物品贴图)
- parent : 指定进度的父进度名称(只对显示有作用)。字串。可选。
- display (可选,不存在则该进度不会以任何方式显示)
进度提示信息
获得进度时,如果 show_toast 为 true ,则会在窗口右上方显示一条信息,很快便会消失。
而如果 announce_to_chat 为 true ,则会在聊天栏显示信息。有颜色的部分为进度的标题,颜色因 frame 的不同而改变,把鼠标悬浮在进度标题上能显示进度描述,点击能触发 title 的 clickEvent 。
进度界面
这是进度的界面。最大的部分展示的是选择了的进度选项卡(Tab)。
每个根进度都会有其独立选项卡。
选项卡界面上方有一个个按钮,其图标就是该选项卡根进度的图标,悬浮会显示其标题,点击即能切换选项卡。选项卡名称为根进度的 title 。
背景
选项卡的背景能够被根进度自定义,会使用指定路径的图片把背景重复填满整个背景。
路径为: namespace:path ,如果无指定namespace则默认 minecraft 。
Namespace,即命名空间,为资源包 assets 下的文件夹名称,一般情况下为 minecraft 。不过其实是可以加入别的命名空间的。
而path即资源包 assets/(namespace)/ 后的路径,包括文件扩展名(如 .png 等)。
如果我们不指定命名空间,或使用 minecraft 命名空间,我们可以使用游戏原有资源作为背景图片,如物品材质。
如background为 test:1.png ,而地图文件里有一个 resources.zip 的内容为
- + resources.zip
- + pack.mcmeta
- + assets
- + test
- + 1.png
图片在进度背景里会被缩小并且重复填满整个背景,所以请小心使用,建议使用一些简单点的背景。
图标外框
图标 | 名称 |
task | |
goal | |
challenge |
父进度
进度可以指定父进度。
父进度在进度选项卡里会放在子进度的左边,并以线连着子进度。
多个子进度可以有同一父进度,换句话说就是一个父进度可以有很多个子进度。
不过一个子进度不可以有很多个父进度。
当我们说一个进度前的进度,我们是说该进度的父进度。当我们说前的所有进度,我们是说该进度的父进度、父进度的父进度,如此类推,但不包括前方进度的其他子进度。简单点来说就是前方一条直线直至根进度(没有父进度的进度)。
从钻石剑图示的进度开始,其所有前方的进度。可见是不会有分支的。
而我们说之后的所有进度,就代表从此进度出发,此进度的子进度、子进度的子进度,如此类推。当中是包括分支的。而之后第n层进度就代表我们看多少次子进度。比如说之后的两层进度,就包括此进度的子进度,以及子进度的子进度。
从铁锭图示开始,之后的所有进度。假如是之后的两层进度,则只包括6个进度(到了图示为盾牌、黑曜石及钻石的进度即停止)。
当一个父进度被完成时,进度面板中就会显示该父进度前的所有进度(除了 hidden 的)及后两层的进度。
如果父进度设置了 hidden:true ,自己以及之后所有子进度都会从界面中隐藏,直至父进度被完成,或子进度被完成(会显示前方没 hidden 的进度以及出现一条线跨越父进度的位置,只有父进度仍然会被隐藏)。假如一个父进度没有 display 标签,表现则和 hidden 类似,只是父进度永远也不可能被显示。
没有父进度的进度就是根进度。会自己拥有一个选项卡。
选项卡只有当玩家拥有根进度的时候才会被显示,不论是否 hidden 。
如果根进度没有 display 标签,则整个选项卡都不会被显示,换句话说就是我们不能看到其子进度在进度的面板出现。
rewards
进度奖励格式
- (进度根标签)
- rewards
- recipes : 一列表的合成配方名称。类型为字串列表。
即为玩家解锁指定列表的所有合成配方。 - loot : 一列表的loot table名称。类型为字串列表。
即执行loot table,抽取奖励。 - experience : 给予玩家一定数量(固定不是随机)的经验。类型为整数。
- function : 命令函数名称。字串。
即以获得进度的玩家为执行者,在当前坐标执行命令函数。
除了可以用作给予奖励,还可以当作事件使用。
- recipes : 一列表的合成配方名称。类型为字串列表。
- rewards
命令
- advancement <grant|revoke> <玩家> <only|until|from|through> <进度名称> [判据]
- <grant|revoke>
- grant 就是给予进度/判据。
- revoke 就是移除进度/判据。
- <玩家> : 需要给予/移除进度/判据的玩家。
- <only|until|from|through>
- only : 只给予相应的进度/判据。
- until : 给予指定进度及之前的所有进度,也就是所有左边连着此进度的进度。
顺序为: 进度的父进度,进度的父进度的父进度...根进度,此进度。 - from : 给予指定进度及之后的所有进度。
顺序为: 指定进度,进度的子进度,进度的子进度的子进度...
然而由于一个进度可以有多个子进度,而子进度间的顺序在不同作业系统所有不同,所以顺序不能被确定。 - through : 给予制定进度之前及之后的所有进度。类似分别执行 until 及 from 。次序为先执行 until ,然后执行 from 。
- <进度名称> : 指定的进度(用途看上方参数)。
和命令函数的命名方法类似, (命名空间):(路径) ,路径不需要写上文件扩展名。如 minecraft:adventure/adventuring_time 。 - [判据] : 可选。如果指定则只给予/移除指定进度的指定判据。否则则直接给予/移除指定进度。
- advancement <grant|revoke> <玩家> everything
- advancement test <玩家> <进度名称> [判据]
当玩家获得了指定进度/判据时成功,没有则失败。
点击这里