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

View File

@@ -0,0 +1,151 @@
---
front:
hard: 入门
time: 15分钟
---
# 开始配置玩法功能
在本节中,将会带领大家制作一个简单的实体并了解物品、方块的基本配置功能。
<iframe src="https://cc.163.com/act/m/daily/iframeplayer/?id=660a288c95446edbdc2ba1ae" width="800" height="600" allow="fullscreen"/>
## 实体
经过基础玩法教程的学习相信大家一定都对实体有了基础的认识。那么对于一个实体来说它的AI和行为表现是一个实体至关重要的接下来我们将会带领大家新建并配置一个简单的实体。
首先打开我的世界开发工作台后,新建一个空白附加包,然后进入编辑器。
在关卡编辑器内,点击新建按钮,在配置分类,找到实体,点击下一步。
![](./images/01.png)
在数据模板处,我们选择一个僵尸的模板,并将它命名为`custom_zombie`,作为示例进行讲解。
![](./images/02.png)
随后在右侧的属性面板,就可以看到这个新的自定义僵尸的各种属性。
![](./images/03.png)
我们大致翻阅一下这个自定义僵尸的所有属性可以看到一个实体在编辑器中有3个大分类的属性可以供我们进行配置它们分别是
- 基础属性
- 行为包组件
- 资源包组件
### 基础属性
基础属性可以看到我们的自定义实体的标识符此处是在编辑器中是无法进行修改的但是我们可以在游戏中使用summon命令搭配标识符召唤出我们配置的自定义僵尸的实体。
同时此处还可以配置游戏内名字,即它在游戏中显示的名称,例如下图中,我们将它改成`自定义僵尸`,那么如果在游戏中我们被这个僵尸击杀,死亡消息中就会显示 自定义僵尸。
自然生成和召唤生成后面的勾选框,代表了是否允许这个实体以这种方式被生成。将鼠标移动到属性的名字上,如果有注释内容,则会显示这个属性的注释,如下图所示。
> 可使用/summon生成
![](./images/04.png)
### 行为包组件
在这里需要引入一个概念,所有的我的世界基岩版的附加包,都分为行为包和资源包两个包体。行为包顾名思义就是定义了行为的包体,而资源包主要是图片、音频、模型等美术上的资源。
所以我们的行为包组件中,主要负责配置了这个实体在行为逻辑上的一些定义,比如这个僵尸是否会着火,血量是多少,攻击力是多少,攻击方式如何等等。
点击行为包组件这个大分类的右侧的`添加属性`按钮,即可选择并添加一些不在目前实体中的可用的行为属性。
![](./images/05.png)
在添加属性的弹出窗口中,可以清楚地看到特征英文名称,数据类型,中文名称,描述。我们可以在这里找到我们想要添加或删除的属性,并点击右下角的调整按钮,对实体行为进行调整。
> 细心的同学们可能发现了数据类型这个列
>
> 那么这里大多数的数据类型都是Dict是什么意思呢
>
> Dict是一个字典可以理解为一个映射代表这种配置项还有许多子参数可以设定。
>
> 数据类型还有很多,下面是一些基本的数据类型和它们通俗的解释,供参考
>
> | 数据类型 | 定义 |
> | :------: | :-----------------: |
> | Bool | 布尔值(真/假,是/否) |
> | Int | 整数(1,2,100) |
> | Float | 实数(3.1415,0.0001) |
> | Str | 文本(你好,我的世界) |
同时我们也可以在`Search...`窗口中,搜索关键词,例如搜索`在阳光下燃烧`
![](./images/41.png)
接下来我们可以尝试一下,通过修改行为,让这个僵尸在阳光下不燃烧。
![](./images/06.png)
找到在阳光下燃烧这个属性,鼠标悬停在这个字上,可以看到这个属性的具体含义。虽然他不支持编辑,但是我们可以将其删除,点击右边的垃圾桶图标,即可将这个属性删除。删除后我们进入游戏查看效果。
进入游戏后我们有两种方式生成出自定义的这个怪物一种是使用summon命令还有一种是使用刷怪蛋。
在编辑器中找到我们这个自定义实体的标识符,比如我这里是`afhui:custom_zombie`,就在游戏中输入`/summon afhui:custom_zombie`
![](./images/07.png)
可以看到我们的自定义僵尸成功被召唤,且不会在阳关下燃烧。
还可以使用刷怪蛋来生成这个生物。在创造物品栏的刷怪蛋分类中,找到包含实体标识符的刷怪蛋,像原版刷怪蛋一样使用即可。
(因为我们没有配置这个刷怪蛋的对应物品名,所以这里显示的物品名是一大串英文)
![](./images/08.png)
### 资源包组件
资源包组件定义了这个实体的模型和纹理,可以将实体的模型、纹理切换成我们自己想要的模型上。
## 物品
创建物品的大体步骤和实体一样。
点击新建按钮,在配置分类,找到物品,点击下一步。选择数据模板或者空模板,输入命名并进行创建。
![](./images/09.png)
例如这里可食用物品,然后输入名字,进行创建。
创建后物品的属性和实体的属性大体上同样分为基础属性、资源包组件、行为包组件。但是物品多了一个盔甲可穿戴属性,用来配置盔甲的动画、模型、纹理等功能。操作方式和实体基本一致。
在这里我们制作一个回复10点饱食度、拥有生命提升效果的加强苹果作为例子。
![](./images/10.png)
按照上图进行配置进入游戏后就可以找到我们的加强苹果在吃下后可以补充10点饥饿度并给予生命提升的药水效果。
## 方块
同样是在新建中点击配置分类,选择方块。这里我们可以选择自己想要的数据模板,输入名字进行创建。
例如我们可以创建一个发光方块作为演示。
![](./images/11.png)
在属性栏中,我们可以对这个自定义方块的各种属性进行设置。
![](./images/12.png)
决定这个方块会发光的属性就是它的亮度属性。
![](./images/13.png)
将鼠标移动到亮度这个标签上就可以看到相关说明。方块的亮度值可以在0-1之间取值。
那么不难猜出这个值越大,亮度越大。我们修改这个数值后进入游戏验证我们的猜测。
- 亮度0.1
![](./images/42.png)
- 亮度1.0
![](./images/43.png)
在学习了实体、物品、方块的配置方法后,相信大家都可以看出来编辑器的使用对各种游戏玩法的编辑都是大同小异,只需要对游戏有一定的了解,就可以轻松地添加游戏内容 。

View File

@@ -0,0 +1,76 @@
# 功能玩法课后作业
在学习了实体编辑的基本功能之后,我们来尝试做一个新的流浪商人,具有自我保护的能力!
## 创建实体
首先新建一个空的实体,并给它命名,这里我们起名叫`merchant`,使用流浪商人的实体模板。
![](./images/44.png)
创建完成后,我们就创建了一个和原版行为一模一样的流浪商人。
## 删除原版逻辑
因为不再需要原版的逻辑,所以我们需要在行为包组件组中,删除所有的组件组:[0] [1] [2]。
![](./images/48.png)
并删除所有的事件:[0] [1] [2] [3]
![](./images/49.png)
修改游戏内名字,方便和原版流浪商人作出区分
![](./images/47.png)
接下来我们可以删除交易(暂时不需要这个功能)、避开生物(躲避和主动攻击敌对生物冲突)相关的行为包组件,只保留最基础的行为包组件方便我们后续的编辑。实际操作时,不必和下图完全一样,可根据自己的想法自行增改。
![](./images/45.png)
## 配置攻击能力
接下来,我们为其添加近战攻击的能力,和攻击力。
![](./images/46.png)
但是这样配置,它并不会进行自我保护,所以我们还需要添加一个`行为.追赶最近目标`的行为并按照图片进行配置。其中实体类型编辑器暂不支持编辑我们需要手动打开json进行编辑。
![](./images/17.png)
我们在配置文件栏中找到行为包Json点击打开文件`entity_types`这一项改为下方的内容。
> 这段实体类型的意思是选择所有 实体种族 为 monster 的实体
>
> 在这里我们只做了解,想要学习具体语法可以参考[基岩版Wiki](https://bedrock.dev/zh/docs/stable/Entities#Filters)或者原版文件
>
> 原版文件可以在`MCStudioDownload\game\MinecraftPE_Netease\版本\data\`文件中找到
>
> MCStudioDownload文件夹在电脑上某个硬盘的根目录内可自行查找。
```
"entity_types": [
{
"filters": {
"all_of": [
{
"test": "is_family",
"subject": "other",
"value": "monster"
}
]
},
"within_default": 10
}
],
```
修改后的json文件是这样的
![](./images/16.png)
接下来保存后,点击运行进入游戏,进行测试。
![](./images/19.png)
可以看到,我们放出的流浪商人,已经可以主动攻击所有敌对生物了。

View File

@@ -0,0 +1,96 @@
---
front:
hard: 入门
time: 10分钟
---
# 开始配置经济功能
本章中,将介绍如何配置游戏的经济功能——配方、交易、战利品表。
<iframe src="https://cc.163.com/act/m/daily/iframeplayer/?id=6328633de6c041f2578ca7e8" width="800" height="600" allow="fullscreen"/>
## 配方
配方的创建非常简单,在新建中找到配置,配方,选择模板后即可创建。
配方有3种类分别是有序合成、无序合成、熔炉配方。它们各有不同的用途。
### 有序合成
有序合成即在合成栏中,用指定材料,摆出指定形状的合成配方。
例如箱子的合成需要8个木板围成一圈。
![](./images/20.png)
例如这样就是一个自定义的合成鞍的配方需要3个皮革摆到一排进行合成。
### 无序合成
无序合成指不规定摆放顺序、只要求指定材料的合成。
例如原版中书的合成只需要3个纸和一个皮革而不考虑他们的排列方式。
![](./images/21.png)
例如这里可以指定一个皮马铠和1个铁锭合成1个铁马铠不考虑他们在工作台中的摆放方式。
同时适用方块还可以选择制图台、切石机,指定了这个配方可以在哪些方块上生效。
### 熔炉配方
熔炉配方指通过烧制来合成的配方。
例如原版中的原木被烧制后变成木炭。
![](./images/22.png)
例如这里配置了一个使用熔炉烧制腐肉变成皮革的配方。
适用方块用法和无序合成同理。比如我们这里只选择了熔炉,那么这个配方就不能在烟熏炉、高炉和营火中生效。
## 交易
交易是我的世界中一个非常有意思的玩法,下面我们来看一下如何自定义一个交易表。
同样是在新建->配置,找到交易表。
选择模板`ne_simple_template`,来创建一个简单的交易表模板。
![](./images/23.png)
在这里我们可以很清晰地看到,这个交易表的商品和抵换物品是什么。
接下来我们尝试修改一下交易将交易改成2-5个铁锭兑换1-2个钻石。
![](./images/24.png)
修改完成后效果如图。交易需要配置到一个实体上来进行,这里我们先暂时略过。
在本节的课后作业中,会带领大家配置这个交易到我们上一节创建的自定义流浪商人身上。
同时,在交易随机池的后面还有一个添加按钮,点击后就可以新增一个交易列表,我们可以对其设置经验。
来实现达到多少交易经验值,来解锁新的交易项目的功能。
## 掉落表
掉落表是指在击杀某个实体/破坏某个方块时,可以配置的掉落物列表。
在新建->配置,找到掉落表。
选择模板`ne_simple_template`,来创建一个简单的掉落表模板。
![](./images/25.png)
这样的一个掉落池会在随机池中随机根据权重抽取物品抽取1次然后生成掉落物。
我们可以试着修改一下掉落池将其改成必掉一个绿宝石有可能掉落萤石或红石随机次数2次。
![](./images/26.png)
不难理解,掉落池中每个项目,都会进行一次随机。而掉落池中的单个项目,会对其随机池进行指定次数的随机,来决定掉落物。
> 概率计算公式:单个概率=随机权重/权重和
>
> 例如现在的红石和萤石掉落概率都为50%

View File

@@ -0,0 +1,38 @@
---
front:
hard: 入门
time: 5分钟
---
## 经济功能课后作业
刚刚学习完如何配置交易表和掉落表,现在我们尝试把它们加到我们的自定义流浪商人上吧!
在左侧的配置栏中,找到之前配置的会自我保护的商人。
![](./images/27.png)
选中后右侧属性面板就会显示这个商人的属性。
在右侧行为包组件中,添加一个`经济交易表`属性,来让这个实体可以交易。
并按照下方方式,配置这个交易。
![](./images/28.png)
表选择我们之前创建的交易表,显示名称可以自己发挥。
随后我们配置掉落物。新建一个`掉落物`属性,并添加一个表的属性,选择之前创建的掉落表。
![](./images/29.png)
完成配置后,点击保存,进入游戏测试。
![](./images/30.png)
右键点击商人,可以看到交易正常工作。
击杀商人,可以看到必掉绿宝石,红石和萤石是随机的。
![](./images/31.png)
这时候就是两次随机都抽到了红石的情况。

View File

@@ -0,0 +1,63 @@
---
front:
hard: 入门
time: 10分钟
---
# 开始配置群系功能
在本节中会主要介绍生成规则、特征、特征规则的配置和使用。
<iframe src="https://cc.163.com/act/m/daily/iframeplayer/?id=632863afe6c041f2578ca7ea" width="800" height="600" allow="fullscreen"/>
## 生成规则
生成规则主要用来配置实体的刷新规则。在原版中,僵尸等生物的自然刷新就是利用生成规则来实现的。
我们打开编辑器,新建一个生成规则,创建一个自定义僵尸的生成规则。还是在新建->配置->生成规则中进行创建,并命名。并按照下图配置。
![](./images/32.png)
> 一些配置的解释:
>
> 名字:没有特殊要求,仅用来区分不同的规则文件
>
> 生物:要生成的生物
>
> 光照要求限制生物在什么光照要求下生成例如我们这里设置僵尸在0-7的亮度下可以生成
>
> 总量控制类型:按照我们的实体的定位进行选择,游戏中有相关对各种类型实体总量的控制
>
> 生成权重:用来控制生物的生成概率,数字越大,生成概率越大
>
> 其他配置可以根据需要,自己移动鼠标到标题上查看具体解释。
## 特征
特征又称地物。表示一系列方块在地图生成时的单个的产生规则。与其一起使用的还有特征规则。
我们举一个钻石矿石在游戏中的生成规则,来说明特征和特征规则之间的联系。
钻石矿石大家都知道是在地下13层以下开始刷新的。并且通常以1-8个之间的矿簇进行生成。
那么我们就可以使用特征来表示1-8个钻石矿石的矿簇使用特征规则来表示钻石矿石生成在地下13层以下。
那么建筑的生成也是如此,我们使用编辑器,点击新建,配置,特征,命名并创建。
![](./images/33.png)
可以看到有一个选择框,可以选择要生成的结构,即一个方块建筑。
此处的结构我们会留到课后作业中,制作一个流浪商人小屋,再进行配置。
## 特征规则
特征规则用来设置特征将在什么地方,什么时候进行生成。
编辑器中,新建,配置,特征生成,命名并创建,**注意文件名必须全部小写**。
![](./images/34.png)
我们在属性窗口中点击特征的选择框,选择之前创建的特征,随后调整一下单区块特征数量,防止生成数量过多。
其他配置保持默认,感兴趣的同学可以将鼠标移动到它们的名字上查看对应解释,并自由进行配置。

View File

@@ -0,0 +1,45 @@
---
front:
hard: 入门
time: 5分钟
---
# 群系功能课后作业
本次课后作业,要求如下:
- 为新流浪商人配置新的生成规则
- 使用地图编辑器制作小屋,并保存成结构,使用特征规则随机生成在世界上
## 流浪商人的生成规则
像之前教程中一样创建一个新的生成规则,然后配置选择生物为我们在 [玩法功能课后作业](./1-玩法功能课后作业.html) 中配置的自定义实体。
![](./images/35.png)
配置如图所示将总量控制类型改为动物生成权重调为500这样方便我们后续验证。
## 流浪商人小屋
我们使用地图编辑器,在素材库的内置素材中,选择,并放置一个小屋。
![](./images/36.png)
然后使用选取工具,将小屋框选出来,然后点击保存为结构。
![](./images/37.png)
![](./images/38.png)
随后给它命名,进行保存。
接下来我们回到关卡编辑器,在左侧配置栏中,找到之前创建的特征。
![](./images/39.png)
然后将它的结构选择刚刚保存的这个小屋的结构。
最后点击保存,配置完成。我们可以进入游戏验证一下。
![](./images/40.png)
可以看到房子成功生成在了游戏中,但是现在生成概率仍然偏高,感兴趣的学员可以自行调整,找到一个合适的值。

View File

@@ -0,0 +1,85 @@
# 制作流浪商人小屋预设
在开始本节的课程之前,我们有一个概念需要明确。
在我们前几节课创建项目的时候,我们一定都注意到了,大家选择的都是空白附加包,而不是空白地图。
空白附加包和空白地图,打开编辑器基本都是一样的,它们之间有什么区别呢?
空白附加包,打开关卡编辑器,虽然能看到舞台中的游戏地形、建筑等,但是这些地图在游戏启动后都会消失,即使在地图中做了修改,都不会保存。
而空白地图,不仅可以像空白附加包一样增添各种配方、方块、物品,还可以将编辑器中的地图,场景,一起保存,在下次启动的时候依旧保持原样。
总而言之,空白地图=空白附加包+固定的地图。
那么本节的内容,就是带领大家制作一个流浪商人小屋的预设,来学习预设的使用方法。
<iframe src="https://cc.163.com/act/m/daily/iframeplayer/?id=660a29bd42810643550cee8c" width="800" height="600" allow="fullscreen"/>
## 导出资源
在创建地图之前,我们首先将上一章中制作的自定义流浪商人导出,再次利用,避免重复劳动。
打开编辑器,在关卡编辑器的资源管理中,选择**导出**。
勾选行为包下的`实体``掉落``交易`,资源包下的,`实体资源``文本`,点击导出。并保存到一个目录中,可以看到是个.mep结尾的文件。
![](./images/02.png)
## 开始制作小屋预设
然后我们创建一个空白地图,名字可以自由发挥,点击启动编辑,进入编辑器后,我们打开关卡编辑器,将刚刚导出的资源进行导入。
![](./images/01.png)
选择导入自定义资源包,然后选择刚刚保存下来的文件,全选导入。
![](./images/03.png)
然后就可以看到我们在上一章中创建的实体,掉落表,交易表,都成功导入到了地图这个项目中。
![](./images/04.png)
接下来我们创建一个空预设,还是在资源管理中点击新建,常用,空预设。
![](./images/05.png)
名字我们可以任意起,我们这里叫他`House`,点击创建。
![](./images/06.png)
创建完成后,可以看到已经自动打开了预设编辑器,我们在资源管理中找到`素材`文件夹,点击右侧的导入按钮。在文件选择窗口中,选择`hall.mdl`这个素材作为我们的小屋。
![](./images/07.png)
然后在上方工具栏中的添加素材处,选择刚刚导入的`hall.mdl`。就可以看到这个小屋素材出现在了预设编辑器中。
![](./images/08.png)
然后我们继续添加将自定义流浪商人作为一个实体零件加入到这个House预设中。
点击添加零件,选择`EntityBasePart`,在对应的右侧属性窗口,将实体类型改为我们之前编辑的`会自我保护的流浪商人`
![](./images/09.png)
![](./images/10.png)
如果实体类型中找不到我们自定义编辑的实体可能是编辑器的BUG大家可以尝试**保存项目并重启编辑器**,一般都会可以找到。
![](./images/11.png)
可以看到选中这个左侧`实体`游戏中所对应的流浪商人实体也被高亮显示了同时有3个箭头我们可以将其拖动到房子内来定义的它的生成位置。
调整完成后其实我们的流浪商人小屋预设已经做好了,但是我们为了它变得更有趣味一些,可以给流浪商人再添加一个床的组件,让它会在晚上在床上休息。
回到关卡编辑器,找到这个会自我保护的商人,编辑它的行为包组件。搜索床,并给它添加。
![](./images/12.png)
配置完成后,就可以在资源管理器中,找到`预设`文件夹,点击,将其中的`House.preset`,也就是我们刚刚编辑完的小屋预设,拖入到游戏中。
![](./images/13.png)
做到这样,我们的流浪商人小屋的预设就已经配置完毕,并且成功地放置在了游戏中。

View File

@@ -0,0 +1,292 @@
# 小屋预设课后作业
在学习了预设的基础用法后,可以尝试完成以下要求,来熟悉预设的用法。
- 在小屋素材内放置箱子方块
- 为自定义流浪商人添加猪灵似的攻击盗宝贼的行为
- 使用掉落表为自定义流浪商人添加初始装备
## 在素材内放置箱子方块
要在素材内放置箱子方块,首先我们需要将原来的`hall.mdl`这个素材,放置到地图中,然后对其进行编辑,再保存成新的一个素材。
打开地图编辑器在素材库中找到hall这个素材点击选中然后在地图中放置。
![](./images/14.png)
然后点击右上角的游戏模式,将编辑器切换到游戏的玩家视角,进入游戏,在房子中放置一个箱子。
![](./images/15.png)
放置完成后按ESC退出。然后使用选取工具重新选择这个小屋并将其保存成素材命名为`new_hall`,然后将选中的部分删除,将地形恢复原样。
![](./images/16.png)
然后再素材库中找到自定义素材,对刚刚保存的`new_hall`这个素材右键,选择`导入为预设素材`
回到预设编辑器,将素材的`hall`删除,更换为`new_hall`
![](./images/17.png)
至此,素材内的箱子就放置完成。
## 攻击盗宝贼的行为
进入关卡编辑器,找到我们的自定义流浪商人的实体。
在开始之前,我们需要了解一些新的知识。
### 行为包组件(components)
在行为包组件中,定义了影响实体行为的组件。
例如攻击盗宝贼行为将要用到的`minecraft:block_sensor`组件,用于检测周围方块被破坏。
但是在实际游戏中,实体的行为并非一尘不变的,例如未驯服的狼,默认情况下不会跟随玩家,但是在驯服后,会主动跟随玩家。
> 所以一般在编辑实体时,需要将实体**永不改变**的行为组件编写在此处。
### 行为包组件组(component_groups)
行为包组件组是行为包组件的集合。
一个组件组可以包含多个组件,通常可以把实体的一个状态下所用到的所有组件都编写在一个行为包组件组中。
例如狼实体,包含了以下状态的组件组:
- 幼仔
- 成年
- 野生
- 愤怒
- 驯服
狼实体会在不同情况下,动态增加或删除组件组,来实现特定的玩法。
### 事件(events)
定义一个事件,可以在事件被触发时,删除/添加指定的组件组。
例如狼实体,在驯服事件触发时,有以下的组件组修改
删除
- 野生
添加
- 驯服
### 步骤分析
在了解了上面的知识点后,我们可以得出,要实现检测破坏箱子方块之后,攻击盗宝贼的行为,需要额外用到行为包组件组和事件。
#### 行为包组件组
定义一个`take_target_as_response_to_block_break`分组,用来更新这个流浪商人的行为包组件,让它攻击玩家。
![](./images/46.png)
其中包含组件`行为.追赶附近目标`实体类型为所有玩家仍然需要手动打开json编辑。
```
"entity_types": [
{
"filters": {
"test": "is_family",
"subject": "other",
"value": "player"
},
"max_dist": 16
}
]
```
#### 事件
定义一个`important_block_destroyed_event`,在玩家破坏箱子后触发,然后给实体添加`take_target_as_response_to_block_break`这个组件分组,让它攻击玩家。
![](./images/47.png)
#### 行为包组件
`minecraft:block_sensor`可以用来检测周围的方块是否有破坏之类的事件在检测到后触发某个json事件。因为编辑器暂时不支持编辑这个组件所以手动编辑json将它放到`components`这个节点下(对应编辑器中的行为包组件)。
```json
"minecraft:block_sensor": {
"sensor_radius": 16,
"on_break": [
{
"block_list": [
"minecraft:chest"
],
"on_block_broken": "important_block_destroyed_event"
}
]
}
```
其中`on_block_broken`的意义就是触发事件,添加行为包组件组。
最终配置完成的json文件如下其中修改的部分进行了注释可以参考。
```json
{
"format_version": "1.12.0",
"minecraft:entity": {
"components": {
"minecraft:attack": {
"damage": 10
},
"minecraft:behavior.float": {
"priority": 0
},
"minecraft:behavior.look_at_player": {
"look_distance": 8,
"priority": 8,
"probability": 0.02
},
"minecraft:behavior.melee_attack": {
},
"minecraft:behavior.nearest_attackable_target": {
"entity_types": [
{
"filters": {
"all_of": [
{
"subject": "other",
"test": "is_family",
"value": "monster"
}
]
},
"within_default": 10
}
],
"must_see": true,
"reselect_targets": true
},
"minecraft:behavior.open_door": {
"close_door_after": true,
"priority": 6
},
"minecraft:behavior.random_look_around": {
"priority": 9
},
"minecraft:behavior.restrict_open_door": {
"priority": 5
},
"minecraft:behavior.sleep": {
},
"minecraft:can_climb": {
},
"minecraft:economy_trade_table": {
"convert_trades_economy": true,
"display_name": "商人",
"new_screen": true,
"table": "trading/trade.json"
},
"minecraft:jump.static": {
},
"minecraft:loot": {
"table": "loot_tables/loot.json"
},
"minecraft:movement": {
"value": 0.5
},
"minecraft:movement.basic": {
},
"minecraft:navigation.walk": {
"avoid_water": true,
"can_open_doors": true,
"can_pass_doors": true,
"can_path_over_water": true
},
"minecraft:persistent": {
},
"minecraft:physics": {
},
"minecraft:pushable": {
"is_pushable": true,
"is_pushable_by_piston": true
},
// 用来检测周围的方块
"minecraft:block_sensor": {
"sensor_radius": 16,
"on_break": [
{
"block_list": [
"minecraft:chest"
],
"on_block_broken": "important_block_destroyed_event"
}
]
}
},
// 新增的组件分组
"component_groups":{
"take_target_as_response_to_block_break": {
"minecraft:behavior.nearest_attackable_target": {
"priority": 7,
"entity_types": [
{
"filters": {
"test": "is_family",
"subject": "other",
"value": "player"
},
"max_dist": 16
}
]
}
}
},
// 新增的事件定义
"events": {
"important_block_destroyed_event": {
"add": {
"component_groups": [
"take_target_as_response_to_block_break"
]
}
}
},
"description": {
"identifier": "afhui:merchant",
"is_experimental": false,
"is_spawnable": true,
"is_summonable": true
}
}
}
```
## 使用掉落表配置初始装备
首先使用资源管理,新建一个掉落表,命名为`merchant_weapon`
在掉落池中添加一个钻石剑。
![](./images/18.png)
这样即配置完成,如果想要随机性,也可以再添加多种不同类型的剑。
然后回到自定义流浪商人的实体配置,在行为包组件中搜索装备并新增。
![](./images/19.png)
添加后,在行为包组件中找到装备一栏,点击添加属性,新增`表`这个属性,填入`loot_tables/merchant_weapon.json`,也就是我们刚刚创建的掉落表。
到此为止,要求已经全部完成,保存后就可以点击运行进入游戏测试啦!
> 为什么进入游戏后看不到这个流浪商人手持剑呢?
>
> 因为我们没有给它配置相关的持剑动画,渲染设置,所以这把剑只能够提升它的攻击力,不可显示。

View File

@@ -0,0 +1,174 @@
# 制作物品方块预设
本节将会使用blockbench制作新的武器方块模型来增强表现力并将模型添加到一个新方块中放置到我们之前的小屋里。
<iframe src="https://cc.163.com/act/m/daily/iframeplayer/?id=660a2ab942810643550cefc5" width="800" height="600" allow="fullscreen"/>
## BlockBench
在基础版教程就已经提到过这个软件BlockBench可以用来制作我的世界中的模型。
下载地址:[点我](https://www.blockbench.net/downloads)
![](./images/20.png)
根据自己的系统来选择安装包Windows系统可以按照图片指示选择下载完成后点击安装。
![](./images/21.png)
安装完成后打开点击文件新建基岩版模型。文件名模型id都填写`weapon_block`这就是将来我们需要用到的模型id。其他的按照图片填写。
![](./images/22.png)
创建完成之后,点击导入纹理,倒入一张铁斧头的纹理(可以根据自己喜好选择,也可以自己绘制)。
![](./images/23.png)
可以自行查找我的世界原版资源包,也可以直接将下图保存使用。
![](./images/iron_axe.png)
导入完成后在右侧大纲下方的空白区域右键先选择添加组再选择添加纹理网格。将texture_mesh拖入bone中。
![](./images/24.png)
![](./images/25.png)
添加完成后就可以看到中间的编辑区域已经出现了我们的斧头纹理网格。然后同时选中bone和texture_mesh进行移动。
可以看到左上角有很多个按钮,分别是**移动,尺寸,旋转,枢纽工具,顶点捕捉**。
我们这里调整模型的位置,使用旋转工具,移动工具等,根据自己的喜好调整。
![](./images/26.png)
![](./images/27.png)
根据自己的喜好调整完成后我们还需要将整个模型向BlockBench中红线和蓝线的方向进行平移。如下图所示模型的中心位置为BlockBench中底部灰色网格的的有红线和蓝线的那个角落。
![](./images/28.png)
为了更清楚地表示,平移前为下图红色框内的位置,平移后为下图中黄色框的位置。
![](./images/29.png)
编辑完模型,我们将它保存,应该保存为一个后缀为`.json`的文件
## 配置方块
和之前一样,在关卡编辑器中新建一个方块配置,叫他`weapon_block`,进行创建。
然后在资源管理中,点击导入按钮,选择`BlockBench模型-json模型(生物)`选择我们刚刚保存的json文件进行导入。
![](./images/30.png)
> 为什么要选择json模型生物
>
> 因为我们制作的纹理网格的模型,是基岩版模型独有的功能。
>
> 而BlockBench模型方块要求模型是自由模型无法使用纹理网格。
>
> 所以我们这里使用方块实体的形式来添加这个模型,让这个方块的基岩版模型来使用纹理网格。
根据提示检查图片是否正确,不正确的可以进行更改。
![](./images/31.png)
导入完成后,我们还需要在找到`models/entity/weapon_block.geo.json`,双击打开
![](./images/35.png)
在如图所示的地方找到`texture_meshes`节点下,找到`texture`,将其改为`"texture": "default"`
![](./images/36.png)
进行这样的配置是因为,我们使用了`texture_mesh`这个比较特殊的功能来制作模型而BlockBench编辑的模型并不会正确的设置texture_mesh所用的纹理文件所以我们需要手动打开文件将它的纹理设置为`default`,也就是默认情况下实体的纹理。
接下来切回到方块的配置,在行为包组件中添加方块实体组件。可以不用勾选任何内容。
![](./images/32.png)
因为是方块实体的形式,所以接下来再新建一个实体,名字和我们的方块保持一致,这里都叫`weapon_block`
然后添加资源包组件 材质、生物渲染控制器
![](./images/48.png)
按照下图配置资源包组件中的模型和纹理、材质、生物渲染控制器。
材质和生物渲染控制器需要手动输入 `default`,`entity_alphatest`,`controller.render.default`。使用默认的材质和渲染控制器进行渲染。
![](./images/49.png)
因为编辑器暂时不支持配置使用方块实体的模型,所以我们需要手动修改`blocks.json`文件,将实体套用到方块上。
在资源管理中,找到资源包文件夹,在右侧找到`blocks.json`,双击打开。
![](./images/34.png)
打开的文件中,应该有一个`命名空间:weapon_block`的字段,例如我这里的是`gever:weapon_block`,就是这个方块的标识符。
我们将其中的内容删除,替换为
```json
"client_entity": {
"identifier": "gever:weapon_block",
"hand_model_use_client_entity": true
}
```
这里的identifer就是你刚刚创建的实体的标识符注意需要替换一下自己的命名空间。
配置完成后的`blocks.json`示例
```json
{
"format_version": [
1,
1,
0
],
"gever:weapon_block": {
"client_entity": {
"identifier": "gever:weapon_block",
"hand_model_use_client_entity": true
}
}
}
```
目前这样进入游戏会发现模型虽然可见但是会有报错。这主要是因为我们的模型使用了texture_mesh形式目前这种形式的模型对于方块实体的方块还没有完全支持所以报错我们暂时不管它。为了避免后续玩家的报错我们后面可以使用逻辑编辑器制作一个替代的物品监听点击事件来放置这个方块。
回到方块配置,在行为包组件中搜索`渲染材质`,添加。值选择全透明。
![](./images/37.png)
![](./images/38.png)
再添加吸光度属性设置为0。否则方块在游戏中看起来是黑色的。
![](./images/40.png)
基础属性可以给它设置一下游戏内名字、声音。同时删除贴图属性。基础属性的所有内容如下图所示。
![](./images/39.png)
这样配置后,这个武器方块就配置完成。
## 商铺驿站和武器方块的摆放
接下来我们就可以使用地图编辑器,设计一个商铺驿站的素材,其中置入武器方块,将它和流浪商人小屋预设进行结合。
要获得武器方块,可以使用命令`/give @s gever:weapon_block`,注意将命名空间替换为自己的。如果没有该物品,可以尝试重启编辑器。
制作完成后,将其保存为素材,然后在地图中删除。并导入为预设素材。
随后到预设编辑器打开House预设将刚刚导入的预设素材放到小屋前。
![](./images/41.png)
这样我们启动游戏之后,就可以看到小屋面前多了一个驿站的建筑。
![](./images/42.png)
至此我们的预设编辑完成。

View File

@@ -0,0 +1,52 @@
# 物品方块预设课后作业
要求:
- 设计更多武器方块,来点缀驿站
- 为自定义流浪商人,加入被破坏后攻击破坏目标的组件
## 更多武器方块
由于添加更多武器方块的步骤和[上一节](./2-制作物品方块预设.html)完全一致,只需要在创建模型时区分不同的模型名,所以我们这里略过,直接展示成果。
![](./images/43.png)
例如这里的`arrow_block`和之前的`weapon_block`不一样。
添加完成方块后,同样的再将驿站的素材放置后重新保存,导入预设素材。
![](./images/44.png)
这样我们的更多武器方块就添加完成。
## 攻击盗宝贼的行为
要实现攻击破坏武器方块的玩家,其实实现原理和之前的攻击破坏箱子的原理一样。
所以我们回到自定义实体的配置打开json文件找到`minecraft:block_sensor`
```
"minecraft:block_sensor": {
"on_break": [
{
"block_list": [
"minecraft:chest"
],
"on_block_broken": "important_block_destroyed_event"
}
],
"sensor_radius": 16
},
```
其中的`block_list`,就是需要探测破坏的方块,在这里我们添加我们新增的武器方块,例如例子中是`gever:arrow_block``gever:weapon_block`
配置完成后,如图:
![](./images/45.png)
## 完整资源下载
至此为止,预设编辑器的全部内容就已经介绍完毕。下面放出整个地图的的文件。可以自行解压后导入到编辑器中,供参考和学习。
下载地址:[点我](https://g79.gdl.netease.com/preset_tutorial_res.zip)

Some files were not shown because too many files have changed in this diff Show More