This commit is contained in:
boybook
2025-12-01 20:59:16 +08:00
parent 12738a142c
commit 760c2dd9ad
5535 changed files with 21070 additions and 2021 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,18 @@
---
front: https://nie.res.netease.com/r/pic/20210730/4ce20d4e-a4af-4d1f-a28a-036b122f1802.png
hard: 入门
time: 10分钟
---
# 认识Add-on
#### 作者:境界
附加包Add-on是面向Minecraft全版本自定义的坚实一步它受Mojang AB和微软的官方支持。
目前版本允许冒险家去更改他们的世界这些功能都可以通过资源包和行为包来实现。与传统上用脚本、编程手段去修改游戏内容不同附加包提供了一套更加浅显易懂、灵活组合的方法。它使用JSON这种数据交换格式语言甚至某种程度上它并不具备完整的编程语言所应有的特性因此开发者需要掌握的知识点更少要了解的关键词也更少。
附加包功能的真正强大之处在于降低了开发者对编程能力要求的前提下还提供了远超以往Minecraft版本的自定义内容。
在本章程中,将会带领开发者初步认识附加包能够为我们的创意做些什么。

View File

@@ -0,0 +1,89 @@
---
front:
hard: 入门
time: 15分钟
---
# 支持的功能
#### 作者:境界
附加包Add-on能做到的层面有许多我们在这里将它支持的功能拆分成以下几个大类
①自定义生物
②自定义物品
③自定义方块
④自定义配方
⑤自定义音乐
⑥自定义战利品
⑦自定义维度群系
⑧自定义状态效果
#### 自定义生物
生物包括原版生物和由开发者添加的原创生物。
一个生物至少会包括一个生物蛋、一张贴图纹理、一个几何体模型以及数个动画。打个比方,我们在游戏内遇到生物鸡时,它带有黄色的脚丫和红色的冠,它行走张望的表现来自移动动画和向某处看的动画。打开创造背包,可以看到有个鸡的生物蛋。相应的,在添加新的自定义生物时,这些内容也能一一进行定制化。
#### 自定义物品
一般来说,物品包括道具、装备、武器工具三种类型。
除了装备支持3D模型以外在当前版本中道具和武器暂不支持3D形式并且物品支持自定义的内容较为有限一些不太常见的功能如支持副手手持的物品或者是当作箭矢消耗的物品还不能实现。
能够自定义的物品功能都较为基础,我们将道具分为以下三个种类:一般性道具、功能性道具、消耗性道具。一般性道具通常会作为其他道具的合成消耗品,如原版的烈焰棒,鹦鹉螺等,实质拿在手上并没有太大的作用。功能性道具通常被看作是对于冒险家生存有帮助的道具,如末影珍珠等。消耗性道具主要集中在食物上,如牛肉、金苹果等。
自定义装备支持设置四种槽类型,头盔、铠甲、护腿、鞋子,也支持设置相应的防御力和附魔等级。
自定义武器工具支持远程武器、锄、镐、铲、斧和近战武器。针对武器工具,还可以设置工具的等级和速度,而近战武器,还可以设置武器的伤害。
#### 自定义方块
自定义方块是继承了部分原版方块的功能,可由开发者自定义的新型方块。
由于《我的世界》的方块有许多特性,并且会随版本更新而添加更多新特性,因此绝大多数方块的功能无法被添加到自定义方块上。在中国版上,开发者除了可以自定义简单的单格方块外,通过开花组的努力,还可以给方块自定义模型、碰撞箱,以及部分特殊功能性方块的功能等。
#### 自定义配方
自定义配方功能允许开发者自定义合成工作台配方、熔炉配方、酿造台配方、切石机配方等,但目前熔炉配方不支持获得经验,要注意一下。
#### 自定义音乐
自定义音乐是指开发者可以通过放入文件后缀为ogg、wav格式的音乐文件到附加包内通过实体生物、背景音乐、音乐指令等方式为冒险家呈现更加独特、美妙的音乐体验。
#### 自定义战利品
自定义战利品功能允许开发者修改世界中的宝箱、生物方块的掉落物、或者钓鱼奖励等。
#### 自定义维度群系
自定义维度群系允许开发者新增除主世界、下界、末地以外的额外维度,同时搭配自定义群系可以为冒险家创造更加别致的生态面貌,高度提升游戏的体验。
#### 自定义状态效果
自定义状态效果允许开发者通过与MODSDK的配合为冒险家增加、增益、减益buff效果。

View File

@@ -0,0 +1,80 @@
---
front: https://mc.res.netease.com/pc/zt/20201109161633/mc-dev/assets/img/3_1.ad6421a3.png
hard: 入门
time: 15分钟
---
# 你的第一个Add-on
#### 作者:境界
附加包Add-on由Resource Pack(以下称为资源包)和Behavior Pack(以下称之为行为包)组成,资源包加载在客户端中,里面涵盖的资源包括生物模型、动画、粒子、方块贴图、生物贴图、物品贴图、方块模型、音效等。而行为包更多处理服务端的任务,如生物的行为、物品的功能、战利品的配置、生物在世界中的生成规则、群系维度的配置等。
在做一个附加包时开发者应当十分注重工程内每个文件夹的命名因为它需要根据指定的文件夹引入相应的配置文件同时在资源包和行为包中都需要在根目录下有一个入口文件其格式为json来告诉游戏是哪个附加包在这里我们通常会命名它为manifest.json。只要在工程内的资源包和行为包创建了这样的文件即使没有自定义的游戏内容它也是一个附加包了。
#### 入口文件manifest.json
如果使用国际版Add-on附加包模板的开发者需要注意一下微软将manifest内的format_version参数提升为2了而在中国版1.16.10里还可以继续使用兼容性format_version1的参数Name通常指代附加包的名字亦或是作品名称description意为简介描述在这里开发者可以简单地写上团队名称等内容。
UUID 是指Universally Unique Identifier翻译为中文是通用唯一识别码UUID 的目的是让每个附加包内的所有元素都能有唯一的识别信息。如此一来,每个人都可以创建与其它人不冲突的 UUID且不需考虑附加包创建时的冲突问题。开发者可以通过网上自由分享的uuid生成器页面进行UUID的生成资源包和行为包一共至少需要四个UUID所以通常情况下要一次性生成四个UUID。
![](./images/3_1.png)
```json
{
"format_version": 1,
"header": {
"name": "Design Res",
"description": "By Design Team",
"uuid": "21de7661-def9-46e8-b841-2435bb0b1492",
"version": [
0,
0,
0
]
},
"modules": [
{
"type": "resources",//type改为data时则变为行为包的manifest
"uuid": "182664d3-80cc-476a-8043-183afad03acc",
"version": [
0,
0,
0
]
}
]
}
```
上图是一个简单的资源包manifest的书写格式与资源包不同的是行为包的manifest文件里type内的resourece字段需要改成data字段即可。

View File

@@ -0,0 +1,96 @@
---
front: https://mc.res.netease.com/pc/zt/20201109161633/mc-dev/assets/img/4_1.590e60eb.png
hard: 入门
time: 20分钟
---
# 开始认识行为包
#### 作者:境界
行为包内运作的内容是运行在服务端上的。
服务端可以理解为一个公共环境,它会向服务端内所有的玩家客户端提供各种服务。例如不同生物会出现在不同的群系,不同种类的生物有不一样的行为,它们又会各自掉落不一样的战利品,这些都是服务端去实施的行为。
在我的世界中,服务端可以简单理解为一个游戏存档,当玩家自己单人游玩,服务端运行在本地,它的延迟最低,对于玩家影响也最小。在联机大厅游戏中,服务端是房主,其他玩家进入房间会受到主机玩家的终端配置和网络延迟影响,因此游戏体验相较于单人游戏时,可能表现得不太稳定。而在网络游戏里,服务端则是一台远程主机,所有玩家连接进入这个世界都不需要去承担服务端带来的运行计算压力。这是三者之间的区别,因此,开发者在设计行为包的时候,应当遵守第一原则,即玩家在本地游玩时,就要有流畅的游戏体验。否则开发者将这样的附加包放进联机游戏和网络游戏当中,都会带来不流畅的游戏体验。
### 行为包的工程文件结构
#### entities[生物行为文件夹]
在原版游戏包里,这里存放着所有原版生物的行为文件,是开发者认知生物行为的最佳场所。同时,我们可以在这里重新修改原版生物的行为,如让鸡可以像末影人一样传送,或者末影人可以像鸡一样每隔一段时间生下一颗鸡蛋。当我们组合新的原创生物时,它们的行为文件也会放在这里。
![](./images/4_1.png)
#### loot_tables[掉落物文件夹]
在原版行为包里,这里存放着所有原版的宝箱战利品,生物战利品,钓鱼战利品等。通过编辑行为,我们可以将生物及自定义方块的战利品表指向存放在这里的任何一种配置文件里,达到自定义掉落物的效果。
![](./images/4_2.png)
#### trading[村民交易表文件夹]
在原版行为包里这里存放着所有原版游戏中旧村民和新村民的交易表。旧村民交易表在trading目录下新村民交易表在trading目录内的economy_trades中。一般来说我们要修改原版村民的交易表时优先修改的都是新村民的交易内容。并且我们也可以将新的交易表文件放在这里让带有交易行为的其他生物能够读取这些交易表。
![](./images/4_3.png)
#### spawn_rules[生物生成规则文件夹]
在原版行为包里,这里存放着所有原版生物的生存规则,若你想要重新编写原版生物的生成规则,可以直接在这里修改。当你正在修改自定义生物的生成规则时,你的新生物生成规则也应该放在这里。
![](./images/4_4.png)
#### recipes[配方文件夹]
在原版行为包里这里存放着所有原版的配方。在1.16.10的中国版中开发者应在模组文件夹内将文件夹名改成netease_recipes才能在不开实验玩法的条件下使用这项功能。
![](./images/4_5.png)
#### items[物品文件夹]
在原版行为包里这里存放着大部分原版食物的行为文件。在1.16.10的中国版中开发者应在模组文件夹内将文件夹名改成netease_items_beh才能在不开实验玩法的条件下使用自定义物品功能。
![](./images/4_6.png)
#### blocks[方块文件夹]
原版行为包目前没有包含任何一个原生方块的行为开发者需要通过后续的教程以及开发者技术中心的文档、minecraft wiki作为学习参考的对象。在1.16.10中国版中开发者应在模组文件夹内将文件夹名改成netease_blocks才能在不开实验玩法的条件下使用自定义方块功能。
#### features[特征文件夹]
在原版行为包里这里存放着大多数原版群系中的特征。包括矿石分布特征、植被分布特征等。在1.16.10中国版中开发者应在模组文件夹内将文件夹名改成netease_features才能在不开实验玩法的条件下使用自定义特征功能。
![](./images/4_7.png)
#### feature_rules[特征规则文件夹]
在原版行为包里这里存放着大多数原版群系中的特征规则。特征规则将决定特征出现的条件。在1.16.10中国版中开发者应在模组文件夹内将文件夹名改成netease_feature_rules才能在不开实验玩法的条件下使用自定义特征规则功能。
![](./images/4_8.png)
#### Biomes[群系文件夹]
在原版行为包里这里存放着所有原版群系设定。在1.16.10中国版中开发者应在模组文件夹内将文件夹名改成netease_biomes才能在不开实验玩法的条件下使用自定义群系功能。
![](./images/4_9.png)

View File

@@ -0,0 +1,185 @@
---
front: https://mc.res.netease.com/pc/zt/20201109161633/mc-dev/assets/img/5_1.e886f00f.png
hard: 进阶
time: 20分钟
---
# 定义生物行为的三种结构
#### 作者:境界
开发者第一次点开生物行为文件时常常会对component_groups、components、events三种结构感到困惑。这三种结构是组成行为包里生物行为的基础结构。本章将会带领开发者逐一梳理这几种结构的不同作用。
#### components【组件行为】
组件是构建我的世界基岩版实体的属性集合。
它是由Mojang和微软提供给开发者使用的并且不允许开发者自创新的组件当开发者想要给实体添加行为时可以通过添加组件到组件行为对象中来让实体行为表现得更加复杂多样。
例如,当我们希望某种生物会爬行,我们可以通过添加"minecraft:can_climb": {}来实现。所有的组件格式都以"minecraft:<组件名称>": {<组件设定>}为基准,不同的组件带有不同的设定。
![](./images/5_1.png)
```
{
"format_version":"1.16.0",
"minecraft:entity":{
"description":{
},
"component_groups":{
},
"components":{
"minecraft:health":{
"value":4,
"max":4
}
},
"events":{
}
}
}
```
上图是原版鸡生物的部分行为组成其中minecraft:health组件会影响实体的血量在图片中鸡的生命值和最大生命值被设置为4点即两颗心。
#### component_groups【组件组】
组件组将多个组件分组在一起就像一个文件夹一样因此多个组件组内可以包含多个组件并且可以在events事件内添加和删除它们以创建自定义生物行为的组合。
在组件组内放入的组件不会自动添加到生物实体上,在事件未被添加进生物行为前,它们不会做任何事。只有当事件被触发后,对应的事件将组件会变为工作状态,它才会开始影响生物的行为。
![](./images/5_2.png)
```
{
"format_version":"1.16.0",
"minecraft:entity":{
"description":{},
"component_groups":{
"minecraft:chicken_baby":{
"minecraft:is_baby":{},
"minecraft:scale":{
"value":0.5
},
"minecraft:ageable":{
"duration":1200,
"feed_items":[
"wheat_seeds",
"beetroot_seeds",
"melon_seeds",
"pumpkin_seeds"
],
"grow_up":{
"event":"minecraft:ageable_grow_up",
"target":"self"
}
},
"minecraft:behavior.follow_parent":{
"priority":5,
"speed_multiplier":1.1
}
}
},
"components":{},
"events":{}
}
}
```
上图是原版鸡的部分组件组,其中官方对组件组的命名格式为"minecraft<命名空间>:chicken_baby<名称>",开发者可以自由定义命名空间和名称,如"design:custom_abc"。在chicken_baby中微软将minecraft:is_baby组件放在这里通过事件来宣告某只鸡是否为幼年鸡。
#### events【事件】
事件是用于添加或删除组件组的特殊语法,通过这些改变,我们可以为实体创建动态行为。
![](./images/5_3.png)
在上图中原版鸡使用minecraft:ageable_grow_up事件来删除chicken_baby组添加新的chicken_adult组来将一只幼年鸡变为成年鸡。
```
{
"format_version":"1.16.0",
"minecraft:entity":{
"description":{
},
"component_groups":{
},
"components":{
},
"events":{
"from_egg":{
"add":{
"component_groups":[
"minecraft:chicken_baby"
]
}
},
"minecraft:entity_spawned":{
"randomize":[
{
"weight":95,
"remove":{
},
"add":{
"component_groups":[
"minecraft:chicken_adult"
]
}
},
{
"weight":5,
"remove":{
},
"add":{
"component_groups":[
"minecraft:chicken_baby"
]
}
}
]
},
"minecraft:entity_born":{
"remove":{
},
"add":{
"component_groups":[
"minecraft:chicken_baby"
]
}
},
"minecraft:ageable_grow_up":{
"remove":{
"component_groups":[
"minecraft:chicken_baby"
]
},
"add":{
"component_groups":[
"minecraft:chicken_adult"
]
}
}
}
}
}
```
#### 如何触发事件
原版中有许多组件会触发事件这些组件可能在一开始就被添加进了组件行为然后在不同的条件下触发事件来实现复杂多样的生物行为。并且所有实体会有一些共同事件这些事件是由游戏引擎控制触发的如minecraft:entity_spawned它会在生物第一次生成时触发。当然在之后开发者学会MODSDK后也可以通过生物事件接口来触发生物的事件。

View File

@@ -0,0 +1,70 @@
---
front: https://mc.res.netease.com/pc/zt/20201109161633/mc-dev/assets/img/6_1.3ddaf093.png
hard: 进阶
time: 15分钟
---
# 基础的实体生成规则
#### 作者:境界
实体生成规则用来控制任一实体在世界中生成的逻辑。
目前常用于生物的生成,生物是实体这一理念的延伸,我们可以说鸡、牛、猪是实体,也是生物,但矿车、船只是实体不是生物。因此船、矿车这种实体不应在自然界中生成,而鸡、牛、猪等生物需要在世界中生成。
本章我们将会教给大家如何简单地改变原版的生物生成规则。
#### 修改尸壳的生成规则
在原版的生成规则中,尸壳这一种攻击性生物只会出现在沙漠中,我们希望它能生成在每个攻击性生物都会出现的地方,而不仅仅是沙漠,请看下面的分析:
<img src="./images/6_1.png" style="zoom:150%;" />
```
{
"format_version": "1.8.0",
"minecraft:spawn_rules": {
"description": {
"identifier": "minecraft:husk",
"population_control": "monster"
},
"conditions": [
{
"minecraft:spawns_on_surface": {},
"minecraft:brightness_filter": {
"min": 0,
"max": 7,
"adjust_for_weather": true
},
"minecraft:difficulty_filter": {
"min": "easy",
"max": "hard"
},
"minecraft:weight": {
"default": 240
},
"minecraft:herd": {
"min_size": 2,
"max_size": 4
},
"minecraft:biome_filter": {
"test": "has_biome_tag", "operator": "==", "value": "desert"
}
}
]
}
}
```
①当前生物生成规则的format_version停留在1.8.0版本。
②identifier指向生物的名称population_control是指由游戏引擎控制的生物数量这里可以写上的字段有animal、underwater_animal、monster、ambient。因此在基岩版中存在着4个无法直接确定生物数量的维度。打个比方几乎绝大多数动物都会在亮度7~15的时候出现而绝大多数攻击性生物都会在0~7的时候出现。因此animal的数量控制了白天时候玩家所看到的生物数量monster控制了黑夜时分玩家所看到的生物数量。如果同时允许animal的数量和monster的数量在同一个时间内一起出现可能会出现由于世界中生物实体数量生成过多所导致的游玩体验降低的风险请开发者斟酌使用。
③生物生成主要是由群系过滤器控制biome_filter下接收一个或多个带有群系标签has_biome_tag的过滤条件在尸壳的源文件中可以看到value值的参数是desert因此将desert改为monster后就可以让尸壳出现的规律和僵尸一样了。

View File

@@ -0,0 +1,56 @@
---
front: https://mc.res.netease.com/pc/zt/20201109161633/mc-dev/assets/img/7_1.59202254.png
hard: 进阶
time: 10分钟
---
# 简易教学①:修改铁傀儡的基础属性
#### 作者:境界
在《开始认识行为包》章节已知,通过游戏根目录/data/behavior_packs/vanilla/entities中可以找到原版铁傀儡的行为文件。开发者也可以下载原版Add-on附加包模板通常压缩包内会携带behavior_packs文件夹与前面提到的游戏根目录下所寻找的行为文件夹相对应。
![](./images/7_1.png)
```
{
"format_version": "1.13.0",
"minecraft:entity": {
"description": {
},
"component_groups": {},
"components": {
"minecraft:collision_box": {
"width": 1.4,
"height": 2.9
},
"minecraft:health": {
"value": 100,
"max": 100
},
"minecraft:movement": {
"value": 0.25
}
},
"events": {
}
}
}
```
minecraft:collision_box是控制一个生物碰撞盒子的组件。碰撞盒子决定其他生物距离该类生物多远会产生推挤碰撞以及可以在多大范围内能伤害到这类生物。其中width决定这个碰撞盒子的宽度height决定它的高度。
minecraft:health是管理一个生物生命值的组件。value的参数代表生物的生命值max代表生物的最大生命值。
minecraft:movement是控制生物的速度组件。其中value的参数代表速度。我的世界基岩版速度换算公式为movement[速度值] * speed_multiplier[部分行为的速度加成] * friction[方块的摩擦力默认是0.6] * 20 tick[游戏时间]。

View File

@@ -0,0 +1,50 @@
---
front: https://mc.res.netease.com/pc/zt/20201109161633/mc-dev/assets/img/8_1.325675fb.png
hard: 入门
time: 10分钟
---
# 简单教学②:修改牛的掉落物为鸡的掉落物
#### 作者:境界
在《开始认识行为包》章节已知,通过游戏根目录/data/behavior_packs/vanilla/entities中可以找到原版牛的行为文件。开发者也可以下载原版Add-on附加包模板通常压缩包内会携带behavior_packs文件夹与前面提到的游戏根目录下所寻找的行为文件夹相对应。
![](./images/8_1.png)
```
{
"format_version": "1.16.0",
"minecraft:entity": {
"description": {
},
"component_groups": {
"minecraft:cow_adult": {
"minecraft:loot": {
"table": "loot_tables/entities/cow.json"
}
}
},
"components": {
},
"events": {}
}
}
```
![](./images/8_2.png)
minecraft:loot是管理生物掉落物表的组件。table的参数指向loot_tables文件夹下的一个表文件路径。根据路径提示打开loot_tables文件夹再打开entities文件夹可以看到里面存放了所有实体的掉落品文件其中也包括生物鸡的掉落物品文件。将loot_tables/entities/cow.json改为loot_tables/entities/chicken.json即可完成把牛的掉落物修改为鸡的掉落物。