Files
netease-modsdk-wiki/docs/mconline/60-我的世界创造营教程/玩法组件进阶教程/2-逻辑编辑器基础/6-逻辑编辑器的基础概念(5).md
boybook 760c2dd9ad 2.6
2025-12-01 20:59:16 +08:00

110 lines
5.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
front:
hard: 进阶
time: 15分钟
---
# 逻辑编辑器的基础概念5
目前为止,我们已经基本介绍完了所有逻辑编辑器的基础概念。本节将继续介绍一些综合性的知识。
<iframe src="https://cc.163.com/act/m/daily/iframeplayer/?id=63286681a240f794f8c5fbb7" width="800" height="600" allow="fullscreen"/>
## 零件节点和SDK节点
相信在之前的学习过程中大家都已经注意到了很多接口或者事件都同时拥有零件节点和SDK节点。
如果属于只有零件节点或SDK的接口或者事件我们可以直接使用这个SDK或零件节点。
那么在某个接口或者事件同时拥有零件和SDK节点的情况下该如何选择呢
![](./images/68.png)
上面的图片同样都是生成爆炸接口但是左侧是SDK接口右侧是零件接口。
可以很清晰地发现除了第一个参数外其他所有参数都是一致的。SDK接口的第一个参数是存档ID需要调用`GetLevelId`接口来获取,而零件接口第一个参数是调用对象,可以不填写。
那么就可以从接口的节点方面就可以很轻松地看出来SDK接口需要额外多传入一个存档ID的参数而零件接口不需要。显而易见零件接口更加的方便。
对于事件来说SDK接口和零件接口基本是一致的只不过零件事件的使用需要和它所挂接的预设的类型匹配否则有可能无法正常工作。
## 非空预设和空预设
在本章之前的所有内容中,我们都是把蓝图零件挂接在一个具体的预设上的,即非空预设。例如我们之前制作的监听实体受伤的事件,就是在玩家预设上挂接了一个蓝图零件。
但是,其实在预设分类中,还有一个比较特殊的预设,那就是空预设。
![](./images/70.png)
空预设不和任何实体、方块等游戏内元素挂钩,直接创建空预设并挂载蓝图零件会无法使用。
![](./images/71.png)
只有在空预设的属性处,勾选预加载,才会主动生效这个预设,在(0,100,0)的位置。具体说明可以把鼠标移动到预加载标签上进行查看。
如果勾选常加载,就不会随着区块卸载而取消加载这个预设。
一般来说如果制作一些通用的蓝图零件可以在空预设上挂接蓝图零件并且勾选预加载和常加载通过监听SDK事件来实现需要的功能。
## 课后作业
现在相信各位已经对于逻辑编辑器的基础用法基本上都了解了,那么现在尝试使用逻辑编辑器和预设功能,制作一个完整的玩法功能吧!
**作业要求:**
利用开发者工作台的编辑器,制作出一个幸运方块玩法
### 操作步骤
首先新建一个空白附加包。在关卡编辑器的菜单栏,找到作品,更改命名空间为`luckyblock`这样我们的mod名就不再是随机的字符同时如果玩家使用指令给予物品也更方便辨认。
![](./images/105.png)
接下来我们新建一个方块配置,命名为`luckyblock`,数据模板选择发光的普通方块。
自己绘制一个幸运方块的贴图,或者将下放的贴图保存,然后复制到`textures/blocks`中。
![](./images/lucky_block.png)
![](./images/106.png)
然后设置一些相关属性,设置后如图所示。
![](./images/107.png)
这样我们就得到了一个会发光的,挖掉可以正常掉落的幸运方块。但是它还没有任何的实际功能。
接下来我们创建一个玩家预设,并且新建并挂载一个名为`LuckyBlock`的蓝图零件。
![](./images/108.png)
接下来打开`LuckyBlockPart`的蓝图逻辑,我们需要监听方块即将破坏的事件,判断是不是幸运方块,并且取消掉落物生成,再触发一个随机事件。
监听`ServerPlayerTryDestroyBlockEvent`零件事件,并将方块标识符和`luckyblock:luckyblock`进行字符串比较,如果`=`再进行下一步将args中的`spawnResources`设置为False
![](./images/109.png)
![](./images/110.png)
接下来就是事件的随机了我们这里简单做一个随机生成生物。要随机生成生物我们首先就应该有一个随机的生物identifier列表。
首先在左侧变量窗口,我们新建一个`randomList`变量,定义它为我们的生物随机列表。
并且在服务端初始化时,给其赋值。
列表中我们这里给3个值`minecraft:zombie`,`minecraft:skeleton`,`minecraft:creeper`代表3种怪物。
![](./images/111.png)
接下来获取变量randomList然后根据它的最大长度进行随机取一个[0,数量)的整数值获取randomList中的属性这样就可以得到一个随机的实体id。
![](./images/112.png)
接下来通过类型创建实体,实体类型就是我们随机获得的值。
![](./images/113.png)
最后将数据进行传递生成坐标、纬度ID通过事件的参数获得生成面向为一个0 0的二维坐标。
这样我们就完成了一个可以随机刷新生物的随机方块,那么更多的随机事件就可以由大家自行去探索。
![](./images/114.png)