• 周年纪念勋章活动已圆满结束,如有已购买但仍未申请的用户,可以通过对应勋章的下载链接申请~

教程 Add-on制作0基础行为包教程(喂猪式基础代码理解/咕咕咕懒得更)

智障兔兔

咕咕咕(鸽)

管理成员
版主
组长
正式会员
注册
2018/02/23
消息
449
金粒
3,762金粒
入门教学~边学边更新,给自己备忘。 :evil:该教程0基础也能看懂,但最好有一丁点代码基础,比如阅读过php、html等任意语言的基本,读过一点即可不用会写。否则该教程有点难理解。

更新和公告
本文随时会更新和补漏...萌新可以根据编辑时间考虑重读一下,巩固基础。
我最近正在缓慢研究如何创建自定义物品(item)并通过自创工作台合成出来,我猜该功能可以实现:可拿在手里的货币/更多食物/更多武器等等?如果你有什么想学的功能,评论区留言...我会考虑优先研究...然后写教程。
更新一:增加了一个被遗漏的创建文件夹的步骤。增加了对实体类json文件的整体结构介绍。补充了对"priority"的解释。补充了猪猪自爆代码中涉及的大量代码的解释。写完了猪猪自爆教程。


什么是Add-on
Add-on也叫附加包,目前仅基岩版支持附加包。
Add-on分为行为包(Behavior Pack)资源包(Resource Pack),资源包常用于更改材质。行为包常用于修改方块、生物的属性、行为。资源和行为合作使用则实现更有趣的功能。
因此,这两个包可以独立运作,也可以合作运行(为实现更强大的功能)。


制作所需的工具
- 电脑
- 代码编辑器:选择任何你喜欢的,比如常见的:Visual Studio
- 绘图软体: 比如Photoshop(材质)、Blockbench(建模)
- 游戏原版资源包、原版行为包,如果你是要修改游戏内容为主,请下载并当作范本,后面会给链接
- Minecraft Be


我们的行为包和资源包应该创建在哪呢?
应该创建在development_resource_packs文件夹里,它的路径是:
WIN10:
%localappdata%\Packages\Microsoft.MinecraftUWP_8wekyb3d8bbwe\LocalState\games\com.mojang\development_resource_packs
安卓:
SDCard/games/com.mojang/development_resource_packs
IOS:
打开手机自带的“文件”app,路径:iphone ▸ Mincraft ▸ games ▸ com.mojang ▸ development_resource_packs


资源包创作
如果你想学习的是资源包,比如说材质包就属于资源包。那么你可以去康康我写的“基岩版材质包制作教程”:https://www.minebbs.com/threads/4763/

行为包创作
我们这个帖先单独讲行为包创作:在development_resource_packs文件夹里创建文件,命名为:“Tutorial_Behavior_Pack”,可以自己起名字,但先统一用这个名字利于教学。

创建manifest.json文件
在“Tutorial_Behavior_Pack”里创建一个名为manifest.json的文件,该json文件能让游戏识别到我们的行为包/资源包,类似于add-on自我介绍。

使用文本编辑器打开你的manifest.json:
输入以下代码(包括下面那些符号):

{
"format_version": 1,
"header": {
"description": "Tutorial ",
"name": "Tutorial Pack",
"uuid": "bc2a0bc9-e3a2-4702-9319-d4d3231dfdbc",
"version": [1, 8 0],
"min_engine_version": [0, 0, 1]
},
"modules": [
{
"description": "Tutorial Addon",
"type": "data",
"uuid": "891f5751-bb0e-47c6-91f0-fdc4e76949ef",
"version": [0, 0, 1]
}
]
}


Name - 行为包名字,自己起,用英文。(中文也行,但编写代码的时包含中文偶尔会引起一些不必要的问题,全用英文最稳)
description - 行为包简介,自己写,用英文。
uuid - 身份识别码,相当于材质包身份证号。uuid有两个。请百度一个uuid生成网站获取两个不同的uuid。或者前往https://www.uuidgenerator.net/version4 获取,刷新一次生成一个新的。
type - 后面填"data"。填"data"游戏会判定为行为包,填"resources"则是资源包,此处我们在做行为包。
关于manifest.json的其他行的代码解释,可以直接看wiki:https://minecraft-zh.gamepedia.com/基岩版附加包文档
改完这些内容以后保存,记住是json文件,别存成其他格式了。


给行为包画个logo~
打开你下载的图像编辑器创建一个64x64或128x128也行的像素图像:
用你聪明的小脑袋和灵巧的小手绘制logo,画完后命名为“pack_icon”以png格式保存。logo会在MC游戏的设置->存放->行为模式包中显示。


开始正式搞代码
鉴于来看我教程的各位应该和我一样不太了解代码。所以我们先做个简单的,比如说我们来做一个:像苦力怕一样具有自爆行为的猪。这个过程类似于:把苦力怕靠近人会爆炸的行为代码复制黏贴到猪的行为代码中。

自爆猪教程我是参考其他教程写的,但我会更详细,尽量讲清我们复制粘贴的代码都起到什么作用。这样有利于大家举一反三去创作自己的行为包,而不是脱离了教程就对代码毫无思路。当然你直接去学点json语言更好。

在这之前先了解下官方提供的Addon行为包参考文件里都有啥~


下载官方提供的“原版行为包文件参考”
https://aka.ms/behaviorpacktemplate
这是MC官方提供的addon行为包示例文件,类似于MC提供的行为包API,我们解压文件,里面包含了:
文档说明(documentation)
实体(entities)
物品(items)
战利品(loot_tables)
合成表(recipes)
*还不清楚,下次补充(scripts)
出生规则(spawn_rules)
交易(trading)


找出需要的json文件
路径:Vanilla_Behavior_Pack/entities,entities文件夹里放了所有实体的json文件,可以找到pig.json也就是猪的json文件,苦力怕是creeper.json。

我们要魔改猪猪的行为包,所以我们在“Tutorial_Behavior_Pack”里创建一个名为entities的文件夹,然后把pig.json复制粘贴进去,如图所示:

0HTOHK.png


打开pig.json
首先你会看见这个文件里有很多 “{” 和 “}” ,它们一般都跟在一段英文单词后面。如果你用代码编辑器打开,那么你将鼠标移动到 “{” 旁边单击一下,绝大部分编辑器就会自动高亮这个 “{” 所对应的 “}” 。如果没有高亮,你可以往下滑动,那个 “}” 可能再代码最底部。或者你需要换一个会高亮的编辑器,能为理解代码你省下不少脑力。

实体Json整体结构
我们先讲讲整个pig.json里的代码整体结构,这也是所有实体json的结构:

{
"format_version": "1.16.0",
"minecraft:entity": {
"description": {
"identifier": "minecraft:pig",
"is_spawnable": true,
"is_summonable": true,
"is_experimental": false

},
"component_groups": {在这填写组件组},
"components": {在这填写组件},
"events": {在这填写事件}
}
}

标准开头
这一部分几乎是每个实体json的,类似于基本介绍的区域。详细解释后面会写~
组件组(Component groups)
用于定义一组行为,用于简单地去除或增加多个行为,对于改变生物状态十分有用(例如幼年猪与成年猪行为的转换)。
组件(Components)
用于定义该种生物的共有行为。
事件(Events)
事件用于加入或移除复合标签组。事件被我们加入的组件或者Minecraft本身的代码所触发。
除了第1部分的代码几乎和pig.json里的代码完全一致。第2、3、4部分的 { } 里所包含的代码均已省略,因为它们非常多,为了让你们理解整个文件的大致结构所以并没有贴出来。


1-30行代码讲解
为了加深大家对该文件的理解,我们对pig.json的1-30行的代码逐一解释。部分解释为自己的见解,部分引用MC Wiki~如有错误欢迎指出。

1-9行代码喂猪式解释:

屏幕快照 2020-10-14 下午10.53.29.png
2. "format_version" 指定创建该实体的游戏的版本。如果该版本低于当前版本,则将在原始版本中对该实体所做的任何更改都将应用于该版本。

3. "minecraft:entity",用鼠标点一下它后面的 { ,你会发现它对应的 } 在第307行高亮了(代码编辑器都有在左侧标行数的,留意一下~)。Entity是实体的意思,在mc里一般就是指各种生物。我们可以简单理解为第3行至307行之间的代码都是在写MC的动物,我们打开的文件和pig相关,所以我们知道这3-307之间的代码在写猪仔的行为。

4. "description"是描述、类型的意思。看 { } 可以知道它包括了4-9行。其中:

5. "identifier" 用于向服务器注册实体,标识赋予实体行为。identifier在附加包中起到定义的作用,无论是对于实体、物品或是方块。在一定程度上,对于identifier的理解可以定义为名称。

6. "is_spawnable"设置此实体是否具有生成蛋。后面跟着true就是生成,跟着false就是不生成。

7. "is_summonable" 设置我们是否可以使用诸如/ summon之类的命令来召唤该实体。后面是true所以可以用/summon召唤。

8. "is_experimental" 设置此实体是否为实验性。仅当启用实验切换时,实验实体才会启用。你看后面跟着false,所以猪仔不是实验性的。

10-30行代码解释:

屏幕快照 2020-10-14 下午11.03.47.png

10. "component_groups"是一个新的大 { } ,它包含了10-124之间的内容。component_groups可以翻译为组件组,我们可以暂时理解为它包含了对猪的属性类代码。

11. "minecraft:pig_baby"包含了11-30,我的理解是11-30是猪的幼体的相关设置。

12. "minecraft:is_baby"设置此实体为婴儿。

14. "minecraft:scale"设置实体的视觉尺寸。

15. "value": 0.5 意味着这个尺寸的大小为0.5,那我猜测成年猪的尺寸就是1了。

17. "minecraft:ageable"添加一个用于实体成长的计时器。它包含了17-24行。

18. "duration"翻译为持续时间,实体成长之前的时间。

19. "feed_items"可以赠送给实体的物品列表。(carrot胡萝卜, beetroot甜菜根, potato土豆)

20. "grow_up"包含20-23,该实体长大时要运行的事件。其中:

21:"event"事件,根据个人理解,后面的"minecraft:ageable_grow_up"应该就是指实体要长大时运行的事件就是:长!大!

22. "target"目标,个人理解,后面的"self"指要长大的目标就是自己。

26. "minecraft:behavior.follow_parent"允许生物跟随在其父母周围。包含26-29。

27."priority"优先级,设置这个组件的重要程度。优先级数越高,组件就越可能优先运行(比如两个组件冲突时)

28. "speed_multiplier"使用此AI标识时的移动速度乘数。我猜这个意思是猪幼崽以猪父母为目标时跟随父母移动的速度。默认速度为1,1.1应该是速度倍数。


理解1-30行的大概结构

屏幕快照 2020-10-15 上午1.25.08.png

解释了这么多...我觉得各位0基础应该对这个pig.json里的代码都在写什么有了基本的了解。总之就是描述一个猪仔在游戏里的所有行为,属性。其他实体的json应该也是差不多的格式。我不可能把全部解释完~因为太闷了你们也不会想看。


开始制作自爆猪猪
下面我们开始去creeper.json找到所有关于苦力怕靠前玩家就会自爆的代码:

添加组件

1. 首先在creeper.json搜索:behavior.nearest_attackable_target,复制它包含的一大段代码,也就是如图中所示的所有代码和符号:

屏幕快照 2020-10-15 上午1.54.19.png

其中:"minecraft:behavior.nearest_attackable_target"是一个大类,它的意思是允许生物寻找并追赶攻击距离最近的有效目标。
下面是一些设置的说明:
Priority - 优先级,设置这个组件的重要程度。优先级数越高,组件就越可能优先运行(比如两个组件冲突时)。
Must_see - 必须被看见。目标必须在玩家的视野范围内,才会被你设置的实体攻击。
must_see_forget_duration - 此生物忘记当前逃避目标和目标不再隐形时寻找新逃避目标的秒数
Entity_types - 选择你定义的实体,把它/它们设置为目标。
filters - 使此列表{}中的条目生效的条件
is_family - 我也没搞懂
other - 互动的另一个成员(不是调用者)
player - 参与此次互动的玩家
Max_dist - 最大距离。目标在这个范围内才能被追踪和攻击。
在上面的代码中,我们选定了玩家作为目标。当玩家走进以猪为中心16块为半径的区域时,就会遭到追击。


我们把它黏贴到pig.json中的"minecraft:behavior.random_look_around"的 "}" 后面,如下图所示:

粘贴前:
屏幕快照 2020-10-15 上午2.05.19.png

粘贴后:
屏幕快照 2020-10-15 上午2.06.29.png

2. creeper.json中搜索"minecraft:target_nearby_sensor",它的意思是:定义实体的视力/感知范围,在该范围内可以看到或感知其他实体并以它们为目标。
你可能会搜索到3个"minecraft:target_nearby_sensor",我们要复制的是 { } 里有代码的那一段,如图:
22.png
Inside_range – 设置“内部范围”的距离
Outside_range – 设置“外部范围”的距离
On_inside_range – 当目标进入“内部范围”,触发这个{}内的语句。
On_outside_range – 当目标脱离“外部范围”,触发该{}内的语句。
self - 此次测试的调用者(对象或实体)
上面的代码中,我们想要利用on_inside_range和on_outside_range触发"minecraft:start_exploding"(开始爆炸)和"minecraft:stop_exploding"(停止爆炸)。当然现在啥也不会发生,因为我们还没添加这两个事件...后面会加~

把这大段代码粘贴到到pig.json的"minecraft:behavior.nearest_attackable_target"的 " } " 后面,就是我们刚刚粘贴的代码的后面,如图:
屏幕快照 2020-10-16 上午2.35.40.png


添加事件

3. creeper.json中搜索 "minecraft:start_exploding" "minecraft:stop_exploding",(这两大段代码是挨着的)。从英文来看它们的意思分别是开始爆炸和停止爆炸,确切的解释我并没有找到。
将他两以及其包含 { } 内包含的两大段代码依次贴在pig.json的 "events": { 后面,我写教程的时候它的位置在第279行,后续MC更新的话位置可能会有所变动。粘贴后如图所示:
24.png
sequence - 直译:有关联的一组事物,次序。


添加组件组

4. creeper.json中搜索"minecraft:exploding",你会搜到很多个,请复制 { } 中包含代码的那个,在第11行。粘贴到pig.json的"component_groups": { 后面。"minecraft:exploding"的功能是定义实体如何爆炸。
把它和它包含的代码粘贴到pig.json中的"component_groups": { 后面,大约在第11行。如图所示:
25.png
minecraft:explode - 定义实体爆炸方式
fuse_Length – 这个实体在引信点燃时爆炸所需的时间(以秒为单位)
fuse_Lit – 添加此组件时引信是否自动点燃
power – 这决定了所造成的伤害,以及爆炸半径的大小
causes_Fire – 这决定了爆炸是否会导致附近的方块着火
destroyAffectedByGriefing - 如果为true,则爆炸是受生物游戏规则的影响

5. 为了让猪爆炸前像苦力怕一样变大,我们在"minecraft:explode":{}后面添加一个“scale”组件,输入"minecraft:scale":{value:2.0}
Value – 实体正常规模的倍率。值为2将使比例加倍,值为.5将使比例减半等。
记得在这条代码上面的“}”后面补上一个“,”因为这不是最后一个组件。记得用英文输入法输入,写代码用中文符号是不可以的。注意看图,代码放哪,怎么打:
0HoQRs.md.png

6. 以上工作都做完以后,保存好了。我们就可以进游戏康康了。就像你往常使用行为包那样,创一个超平坦地图,激活你的行为包,进游戏放几只猪猪,切生存模式,马上就能见到自爆猪猪。你可能会觉得变大的动画很简陋,正常,因为想写的像苦力怕那样的膨胀动画效果你需要深度学习。目前我不会~我看的教程也没教~~~

需要注意的是,我发现猪猪看到玩家以后没有追逐玩家的行为(从复制的代码来看我觉得应该有追逐行为),只能玩家靠近猪,猪才会变大爆炸,像个移动手地雷似的。我不确定是否原教程就没有追逐行为,已留言询问原教程作者等他回复。

那么猪猪自爆教程作为第一章节就正式结束了。算是addon行为包入个门吧~


未来可能会更新的章节:
补全更详细的Addon讲解
自定义物品
自定义方块
自定义实体
利用blockbench自制原创实体,也就是建模
给原创生物增加基本动作
(反正就...我先学了啥我就更新啥)

好了...我们下次更新继续~我这次懒了哈哈哈。希望我不咕咕。
 
最后编辑:
:喷水:吐血更新完了自爆猪教程,所以我自己顶一下帖子。
更新日志1:增加了一个被遗漏的创建文件夹的步骤。增加了对实体类json文件的整体结构介绍。补充了对"priority"的解释。补充了猪猪自爆代码中涉及的大量代码的解释。写完了猪猪自爆教程。
 
东西到了,台历嗨了,孩子很喜欢。 :evil:
 

在线会员

  • lvyitian
  • 2801326928
  • YouZi Fang
  • hynss
  • Cyan0205
  • agw945
  • 云澜
  • 泡泡茶壶
  • . 文照
  • Fing
  • hhhe
  • 子邪
  • 嚣兮
  • piaopiao
  • 蜘蛛耳钉
  • liucan
  • 大逍遥
  • Reiyans
  • Sabrita
  • XiaoDou_
...和 52 更多。
后退
顶部 底部