同步官网文档8m_25d

This commit is contained in:
kwiilh
2025-08-25 18:36:29 +08:00
parent 4dc0ecf18d
commit 9e8855eeb4
5089 changed files with 8798 additions and 4799 deletions

View File

@@ -0,0 +1,175 @@
# 模拟原版袭击事件
> 本篇教程获得第一期知识库必看教程奖。
>
> 获奖作者:艾诺德。
今天的教程将教各位开发者实现类似于原版劫掠的袭击事件。这项技术可为RPG类模组提供更高的可玩性。
**教程概述:**
主要功能:实现类似于原版的袭击事件。
实现步骤:
1. 以触发点为原点在距该点**[8, 16]**格的某一位置生成参与袭击事件的生物并增加袭击事件进度条。
2. 参与袭击的生物死亡时更新进度条并在少于3个袭击者时显示剩余生物的数量。
3. 所有参与袭击生物死亡时判定事件结束。
**学习本教程的前置技术:**
- 基本熟悉Python语法及modApi接口。
- 了解如何进行服务端、客户端互传事件。
- 会使用MCS制作UI。
**目标效果:**
![img](./images/0_0.png)
![img](./images/0_1.png)
## 实现步骤
首先我们使用MCS的编辑器制作出一个进度条并制作一个文本框作为进度条的子组件为了模仿原版我们默认文本框在进度条的上方开发者也可自行布局之后我们保存编辑。
![img](./images/0_2.png)
完成上述步骤后,我们在客户端初始化(即`__init__`)事件下定义`self.UiNode = None`用于在加载UI后储存节点。
![img](./images/0_3.png)
完成后我们在初始化事件下增加对`UiInitFinished`事件的监听。
![img](./images/0_4.png)
并定义回调函数。我们在回调函数中调用`clientApi.RegisterUI`进行UI的注册在这里不作过多赘述完成后我们使用`clientApi.CreateUI/clientApi.GetUI`获取刚刚注册的UI并赋值给`self.UiNode`
![img](./images/0_5.png)
为了防止因ui未成功注册而导致初始化发生错误我们需要定义如下判定
![img](./images/0_6.png)
初始化操作中我们需要隐藏进度条由于进度条是文本框的父组件在进度条被隐藏后文本框也会自动被隐藏path为进度条的路径开发者请根据实际情况调整当然如果开发者写了储存袭击的算法可自行添加判定决定是否隐藏
![img](./images/0_7.png)
我们在客户端初始化事件下定义如下变量以保存袭击进度。
![img](./images/0_8.png)
第一个变量用于储存参与袭击的生物,第二个变量用于判定是否处于袭击事件中(注意,该做、储存方式为缓存,在退出游戏后失效,若想不受退出的影响可自行在服务端中通过`SetExtraData`设置储存于全局的变量实现),后续变量用于控制袭击进度条的变化。
接下来我们编写好服务端,增加如下自定义事件并在客户端中监听:
服务端代码:
![img](./images/0_9.png)
客户端代码注意ServerSystem和modName需要开发者根据实际情况进行调整
![img](./images/0_10.png)
接下来我们编写触发袭击事件。
我们先制作生成袭击生物的函数。为实现随机距离我们需要导入random库。
![img](./images/0_11.png)
我们通过`GetTopBlockHeight`得到最高的非空气方块的高度,并+1获取生成袭击者的y坐标以保证实体不会卡进地下。
我们通过`SetMoveSetting`组件使袭击者自动寻路前往目标点位,该组件具体用法请自行参考官网(同时为了保护版权,寻路回调函数已略去)。
完成生成后我们返回袭击者的id以进行进一步操作。
![img](./images/0_12.png)
为了像原版一样随机生成袭击者,我们需要编写一个根据权重随机选择实体的函数:
![img](./images/0_13.png)
完成该函数的编写后我们可以传人如下形式的字典参数来获得筛选出的实体id键名为实体id对应的值为权重
![img](./images/0_14.png)
应用上述函数,我们进行开启袭击事件的函数编写:
![img](./images/0_15.png)
在进行客户端回调函数的编写前,我们需要在客户端制作如下前置函数:
![img](./images/0_16.png)
![img](./images/0_17.png)
完成后我们编写回调函数:
![img](./images/0_18.png)
我们增加对OnScriptTickClient事件的监听并编写如下逻辑
![img](./images/0_19.png)
我们通过第一个if下的操作实时进行袭击状态的更新通过第二个实时进行进度条的更新通过第三个if-else实现少于3个袭击者时显示剩余生物的数量的逻辑。
最后我们进行胜利条件的判定:
我们在客户端增加自定义函数并在服务端监听回调(这里略去具体细节) 。
![img](./images/0_20.png)
我们在刚才的OnScriptTickClient事件下写如下逻辑
![img](./images/0_21.png)
完成后就可以实现一个类似于原版的袭击事件了!
**感谢大家的阅读。**

View File

@@ -0,0 +1,50 @@
# 制作原版可对话生物
> 本篇教程获得第一期知识库必看教程奖。
>
> 获奖作者:某只苦力怕。
首先,默认你会自定义生物,而且知道组件组、组件和行为。
## 教程开始
第一步,生物行为
1. 先在生物的行为文件的description中加入scripts和animations引用动画控制器(行为包里的)。
2. 在生物的行为文件中加入些东西,使得玩家可以触发`events`(行为)添加`component_groups`(组件组),我用的是`minecraft:interact`组件(交互组件)触发`events`,然后在组件组中用`minecraft:variant`组件和`minecraft:mark_variant`组件定义`variant``mark_variant`的数值,记得在组件组中写上触发下一个`events`的组件。
![img](./images/1_0.png)
第二步,动画控制器
动画控制器(行为包里的)写法也和材质包里的一样用`transitions`进行切换,然后我这里同时使用`variant``mark_variant`为条件当他们都为1时触发动画控制器`liaotian1`,然后这个动画控制器里的`on_entry`执行指令:`say 嘤嘤嘤,教学开始`
![img](./images/1_1.png)
第三步对图2中44行`liaotian5`里的`/function yuyan`进行定义,可以用其他指令比如`function``tellraw``title`,如果`tellraw`放在动画控制器中反而会导致整个动画控制器文件错误,所以放在`mcfunction`文件中。
![img](./images/1_2.png)
第四步,对生物行为文件中的`interact_text`里的`action.interact.liaotian`进行定义,推荐这个方法,当然你想直接在生物行为文件中输入中文也是可以。
![img](./images/1_3.png)
## 小结
这样一个利用指令进行对话的`npc`就做好了,你也可以在组件组中加入些攻击组件,这样对话到那个组件组,生物就会开始攻击玩家,也可以在动画控制器中加入其他指令,比如`playsound`(播放音效),这样就能代替`minecraft:interact`组件里的`play_sounds`(交互时播放音效)了,当然如果你要自定义对话按钮的图案的话就没办法用原版的方法了,这边推荐用自定义`ui+python`的方式了。
附带教程文件的下载地址:[教程附带模组](https://wwn.lanzouy.com/ixrfx0dw6zpc) 。

View File

@@ -0,0 +1,8 @@
# 连锁采集基础
> 本篇教程获得第二期知识库必看教程奖。
>
> 获奖作者:拆卸小能手。
视频已在B站分享可搜索 **我的世界开发之——几分钟实现挖矿连锁**

View File

@@ -0,0 +1,194 @@
# 使用逻辑编辑器穿上盔甲获得效果
>本篇教程获得第二期知识库必看教程奖。
>
>获奖作者:云易工作室-Moxuan。
上实在是睡不着哟看到一位小伙伴在求助我就来帮忙了。这个IDEA说实在还是比较简单的我们来分割一下元素分别为 **玩家** **切换盔甲事件(服务端)** **给与药水效果** 。所以就要开始了。
第一步、我们首先新建一个项目《换盔甲得效果》,点击启动编辑。
![img](./images/5_0.png)
首先是第一个元素**玩家**,所以我们新建一个玩家预设。
![img](./images/5_1.png)
![img](./images/5_2.png)
![img](./images/5_3.png)
![img](./images/5_4.png)
我们新建了一个名字叫做Player0的玩家预设当然这个名字是随你们心情的。接下然的元素是**切换盔甲事件**,我们在这里就要为这个玩家挂载一个逻辑蓝图零件。我们还是新建一个蓝图零件。
![img](./images/5_5.png)
![img](./images/5_6.png)
![img](./images/5_7.png)
![img](./images/5_8.png)
这里我们新建了一个名字叫做Blueprint的蓝图零件这个蓝图零件名字当然也是随你们开心的。
![img](./images/5_9.png)
然后我们切换到预设界面。将零件挂接到玩家预设上。
![img](./images/5_10.png)
![img](./images/5_11.png)
![img](./images/5_12.png)
![img](./images/5_13.png)
![img](./images/5_14.png)
当操作完成后就会变成这个样子。然后我们点击蓝图板块选择蓝图文件记得名字要和蓝图零件一样的bp文件。
![img](./images/5_15.png)
![img](./images/5_16.png)
双击进入可视化界面。如下图。
![img](./images/5_17.png)
记得要选择正确的文件tab如红圈我们可以选择将这个蓝图内的所有内容删掉。然后右键会出现下面的图片有的菜单。
![img](./images/5_18.png)
![img](./images/5_19.png)
在输入框中输入切换盔甲,并且选择监听服务端事件的那个。我们就会看到出现这么一个模块。
![img](./images/5_20.png)
接下来我们进行一个判断,右键在输入框中输入获取属性。
![img](./images/5_21.png)
![img](./images/5_22.png)
然后我们获取一下这个世界的参数,我们将鼠标移到第一个模块处,模块会有注释出现。点击查看文档。
![img](./images/5_23.png)
![img](./images/5_24.png)
![img](./images/5_25.png)
根据相关信息填入模块中,相关连线也不要忘记哟。然后进行字符串比较。
![img](./images/5_26.png)
![img](./images/5_27.png)
在这个地方我填上了minecraft:iron_helmet也就是铁帽的命名空间。
![img](./images/5_28.png)
接下来这个地方很关键我们在输入框输入获取玩家id选择预设对象接口的那个然后像图片这样连起来。
![img](./images/5_29.png)
![img](./images/5_30.png)
然后我们在输入框输入添加状态效果,选择我们图片做了标记的那个。然后按照图片连起来,按照刚刚的方法去查文档添加数值。
![img](./images/5_31.png)
![img](./images/5_32.png)
![img](./images/5_33.png)
到此位置我们所有的准备工作就结束了先点击保存然后点击运行看看结果把我选用的版本是2.3的包体。
![img](./images/5_34.png)
![img](./images/5_35.png)
如果玩家切换装备不是目标装备如何清除状态效果呢?我们在昨天的基础上增加新的分支即可,如图所示。
![img](./images/5_36.png)
然后我们就会发现成功了,打完收工。

View File

@@ -0,0 +1,299 @@
# 蓝图全流程详解
> 本篇教程获得第二期知识库必看教程奖。
>
> 获奖作者:简影中国 氢氧白桦。
首先,非常感谢开发者官网的教程中编写的蓝图编辑器教程,以及在我开发过程中给予帮助的大佬。
但是随着mcstudio的版本更替相关教程已经显得有些落后且杂乱都快成为 **萌新看不懂,大佬不想看** 的东西了,故有了本期教程。
如有讲的不对的地方,欢迎在评论区更正!
## 基础知识
虽然说蓝图编辑器是为了不会使用py的开发者小伙伴准备的但是我们要清楚地认识到无论是py还是c++又或者是时常被人看不起的易语言本质都是编程语言。而编程的核心是从来不是编程语言而是逻辑。所以说即使使用蓝图编辑器使用图形化编程也请确保本身有一定编程基础但开发和编程又并不完全一样。另外编程本身是一项极其枯燥和费脑子的工作请做好打持久战的准备哦并且我这里不会讲什么内存地址啥啥啥的东西就mc开发而言那玩意百分之90的部分都用不上等用上再讲也不迟。
1. 变量类型
在开发初期,我们只需要认识以下变量名称就足矣,剩下的等我们用到了再补充,不然讲多了我们大伙也记不住。
1. Any
这个不做解释,当你不知道定义为啥的时候就写它。但我不建议这么干,以为时常会因为变量类型导致节点连不上。
2. Int
整数类型,简称整型,用人话说就是整数,用它定义的变量都是整数。
3. Float
浮点型用人话说就是有小数点的数用它定义的变量都是浮点数。即使定义的是一个“整数”如2023也会变成2023.0这点在编程时需要注意。另外建议没啥特殊要求就用int因为同样的数字int比float节约内存而且可以减少因为小数点出奇奇怪怪bug的概率。
4. Bool
布尔型就是对与错。微软定义0为False1为True当然因为编程语言的区别或者编译器的区别可能代之的字符不一样这里就不详细解释了因为这玩意用的地方比较少。
5. Str
字符串类型说白了就是一串字。字符串类型的数字在进行运算前要转换成int或者float才行如何转换我们后面再讲。
6. Vector3
坐标变量说白了就是三个串在一起的float分别代表XYZ轴。一般自己创建用不上大部分是通过合并三维坐标来的。
![img](./images/4_0.png)
7. 字典类型
我其实不大清楚这玩意算不算变量类型但是也不知道放在哪里讲好字典就是一个名字key对应一个值value通过构造字典节点创建。具体内容后面实操的时候我们再讲。
![img](./images/4_1.png)
2. 环境安装
[官网教程](https://mc.163.com/dev/mcmanual/mc-dev/mcguide/20-%E7%8E%A9%E6%B3%95%E5%BC%80%E5%8F%91/13-%E6%A8%A1%E7%BB%84SDK%E7%BC%96%E7%A8%8B/2-Python%E8%84%9A%E6%9C%AC%E5%BC%80%E5%8F%91/0-%E8%84%9A%E6%9C%AC%E5%BC%80%E5%8F%91%E5%85%A5%E9%97%A8.html?key=%E7%8E%AF%E5%A2%83&docindex=1&type=0)。
看完开发环境搭建这一节就好,别的不用管。
![img](./images/4_2.png)
为了防止大家下载各种软件麻烦,我为大家整理打包好了,安装请务必按照教程一步步来!!!
别问我蓝图编辑器不安装环境能不能用,问就是我不清楚,没试过!!!
3. 创建工程和简单操作
首先创建一个空白附加包。
![img](./images/4_3.png)
这里我们需要修改的只有作品名称,别的都不用管。
![img](./images/4_4.png)
我们点击作品——>命名空间修改一个好记的名字。命名空间相当于姓不要有大写、符号、中文小写英文组合就行了花里胡哨的容易出bug也别信它说什么可以有下划线我之前就被坑过。
![img](./images/4_5.png)
![img](./images/4_6.png)
先创建一个预设,起一个好听的名字,要求如命名空间,不过这个可以有数字。
![img](./images/4_7.png)
![img](./images/4_8.png)
同样,我们创建一个蓝图零件。
![img](./images/4_9.png)
都创建完成后我们可以在主界面看到我们创建的玩意了。
![img](./images/4_10.png)
![img](./images/4_11.png)
我们切换到预设编辑器,点击我们刚刚创建的预设。
![img](./images/4_12.png)
我们点击零件,点击我们之前创建的蓝图零件,把它拖到预设上。
![img](./images/4_13.png)
我们点击那个空预设,将预加载和常加载勾上,只有这样我们的蓝图才能运行。
![img](./images/4_14.png)
最后检查一遍挂载是否成功、加载是否开启。
![img](./images/4_15.png)
我们切换到逻辑编辑器节目,也就是我们常说的蓝图编辑器界面,我们会发现我们默认打开的为不可保存的测试蓝图。我们点击资源管理器中的蓝图分类。
![img](./images/4_16.png)
点击我们之前创建的蓝图,会发现主界面中多了很多东西,这才是我们要用的蓝图。
![img](./images/4_17.png)
那么完成了创建工程之后我们就可以开始正式的工作了在主界面右键网格背景可以呼出查找列表输入响应节点的名称就可以搜索出想要的节点了长按节点的端口可以拖出连接线继续拖动可以将连接线连接到其他节点上点击节点可以看到属性。常用的快捷键如Ctrl+Z撤回Del删除在mcstudio里面都是可以正常使用的。
4. 蓝图工作流程。
蓝图是由节点构成的一种可视化编程方式,网易的蓝图编辑器和虚幻引擎的蓝图编辑器很像。如果您有使用虚幻引擎进行开发的经验,这一段就可以跳过。
我们都知道无论是py、c++、蓝图电脑都是没法直接识别运行的他们都要转译成010101之类的玩意才能运行这个过程就是我们常说的编译。
一段完整的蓝图代码主要是由监听、判断、运行三部分组成,每个部分都是由很多节点串起来的。
如图所示就是一段简单的蓝图逻辑。
![img](./images/4_18.png)
当玩家发送消息的时候,比较发送的消息内容,如果发送的消息是“华夏”,则执行发送“打钱”的消息节点,
我们发现在蓝图逻辑中,每个节点之间有橙色和蓝色的连接线。橙色的是逻辑连接线,决定的是每个节点之间的执行逻辑。蓝色的是数据连接线,用于在每个节点之间传输数据。
我们发现每个节点之间的都只连接了一些端口还有很多端口是空着的但其实并不是每一个端口都要连接。我们可以将鼠标移动到节点上就可以看到技术文档的链接了技术文档里面会阐明哪些端口是必连的这里就不再赘述。有些小伙伴可能会问args端口有什么用这个我只能说没什么用因为我到现在也没用过这个端口问了几位大佬也是一样的回答。
![img](./images/4_19.png)
监听就是守株待兔,当游戏触发了一个特定的条件的时候,监听节点就会被激活,然后执行后续的逻辑。
当监听节点被激活后,我们将监听节点获取到的数据进行处理,也就是下一步——判断。我们这里使用“字符串比较”节点判断玩家发送的消息是否是“华夏”,如果是就进入运行接下来的逻辑——发送“打钱”,如果不是就啥也不干。
需要注意的是即使玩家在聊天框内输入的是纯数字但是系统获取到的依然是字符串格式str的数字如果要进行数学运算就需要在比较之前转化为int或者float类型这个我们后面再讲。
现在我们已经完成了一个简单的逻辑我们现在点击左上角的保存——》运行来看看我们的工作成果吧其实点击运行就会自动保存但我有点信不过这玩意因为mcstudio内测的时候正常出现自动保存失灵的情况。
![img](./images/4_20.png)
在版本选择的时候,我们选择 **稳定版** ,如果都是稳定版就选择版本号更新的那个,然后等待启动。
![img](./images/4_21.png)
启动后我们会看到如图的界面,红色框子的是测试工具,紫色框子的是游戏本体。
![img](./images/4_22.png)
我们会遇到两种报错,一是弹窗报错,二是在测试工具的日志里面报错。如果看不懂报错的英文,拍照翻译软件是个好东西,实测有道翻译官还行,倒不是它功能有多好用,主要是别家的拍照翻译做的比它还烂。
我们点击这个按钮可以将日志导出,方便我们与其他开发者交流。如果有解决不了的问题,求助时请务必附上源代码和日志!!!
![img](./images/4_23.png)
我们在聊天框内输入 **华夏** ,会发现系统确实给我们回答了一句打钱,但却是在我们的话之前回答的,难道是因为我们的模组有时空魔法?
![img](./images/4_24.png)
当然不只是系统会优先响应组件的逻辑我们可以为我们的逻辑中加入延迟处理如图。注意延迟节点在默认下延迟秒数为0需要手动更改 ![img](./images/4_25.png)
我们现在再保存运行,就会发现顺序正常了。
![img](./images/4_26.png)
我们保存并关闭编辑器回到mcstudio主界面。将鼠标指针移动到我们的项目上点击更多选择导出就可以了。普通导出就是导出模组是加密的版本一般用于发布这个版本是无法查看和更改源码的。而含编辑信息的导出就是未加密的版本就是我们常说的源代码可以查看和更改一般用于交流学习使用。
![img](./images/4_27.png)
5. 章末小技巧
每章末尾我会写一些小技巧,回答大家在开发工作会遇到的一些问题,希望对大家有些帮助。
1. 本地多人联机测试。
首先我们进入编辑器启动运行。将编辑器中的游戏切到后台打开mcstudio主界面点击创作界面点击工具箱点击ModPC开发包选择一个和编辑器中游戏一样的游戏版本点击启动。
![img](./images/4_28.png)
之后我们会发现ModPC开发包启动的是一个国际版mc的界面我们点击游戏。
![img](./images/4_29.png)
点击好友,就可以看到我们在编辑器中启动的游戏,点击加入。
![img](./images/4_30.png)
点击之后我们就发现在我们的电脑上运行了两个联机的mc就可以用于多人模式测试了。
2. 手机版测试。
首先参加手机版测试的成员需要准备一个使用“163邮箱”注册的正式服游戏账号一定要163邮箱并登录正式服等待信息。
我们打开浏览器,使用开发者主账号登录[我的世界开发者内容管理](https://mcdev.webapp.163.com/#/login)点击账号管理——》协作成员管理——》添加成员输入那位成员的游戏id点击添加成员。
添加之后那位成员在正式服的游戏消息中会收到开发者协作成员邀请,同意后主账号就可以在后台看到那位成员。我们点击那位成员名字后面的 **发起实名认证** ,之后让那位成员登录[认证网页](https://mcdev.webapp.163.com/#/subAccountAuth),进行实名认证。
![img](./images/4_31.png)
认证通过后我们打开开发者内容管理,在成员管理中点击那个成员后面的权限设置。
![img](./images/4_32.png)
给与他测试版启动器登录权限,保存并应用。
![img](./images/4_33.png)
之后那位成员便可下载登录测试版启动器参与组件测试。我们可以在开发者内容管理中获取到下载二维码但QQ频道不让发二维码请各位自行前往下载。
![img](./images/4_34.png)
测试版启动器功能和正式服一样,不过只有将制作的组件提交到作品管理并开启内测后才能在内测服的资源中心内下载。注意,成为开发者协作成员的账号,在正式服会出现在开发者成员列表中,并且在相应组件评论区发言时会有开发成员的标签,相当于一个工作室官方成员的标签认证,要注意防止有人拿着协作账号招摇撞骗,引起损失。
3. 测试版游戏自定义id。
在主界面点击账号头像——》设置——》ModPC开发包可以设置固定的id不过这个固定id只在ModPC开发包中生效对于编辑器版本的游戏是不生效的。比如设置成自己工作室的简写或者自己的名字如我们工作室的简写是SSCSimple Shadow China Studio 简影中国工作室),在录制实机的时候可以当一个隐藏水印。
![img](./images/4_35.png)

View File

@@ -0,0 +1,153 @@
# 制作爆炸生物
> 本篇教程获得第二期知识库优秀教程奖。
>
> 获奖作者:云易工作室-Moxuan。
今天来写一个关于生物像苦力怕一样爆炸的行为吧,我们首先还是新建一个名叫爆炸牛牛的附加包吧。
![img](./images/3_0.png)
点击启动编辑即可,然后点击新建。
![img](./images/3_1.png)
点击左侧配置菜单项,选择实体再点下一步。
![img](./images/3_2.png)
直接点击创建即可。
![img](./images/3_3.png)
在上方的整体模板中选择牛,然后按右边的对勾应用。
![img](./images/3_4.png)
这个时候我们就要为牛牛君添加爆炸行为了,我们首先点击图示圈圈处打开文件。
![img](./images/3_5.png)
打开行为文件后先为牛牛添加玩家为攻击者的行为我们在components里添加这么一段行为组件这段组件是为牛牛添加了如果在一定范围内有玩家就会对其产生敌意。
![img](./images/3_6.png)
然后为牛牛君添加行为传感器我们同样也在components里添加这么一段行为组件这段组件是为牛牛添加了如果有敌意的目标进入一定范围就会触发的相应的事件。
![img](./images/3_7.png)
刚刚传感器在玩家进入攻击范围或者离开攻击范围的时候会触发两个事件一个是minecraft:start_exploding另一个是minecraft:stop_exploding我们将这两个事件添加至events。这两个事件分别是添加或者删除生物的额外组件类别。
![img](./images/3_8.png)
我们在component_groups里添加这个名字叫做minecraft:exploding组件名。
![img](./images/3_9.png)
这样子最后就大功告成了!我们最后来看看结果吧!
![img](./images/3_10.png)
**00:30** 真是被牛牛君炸飞了呢本次教程由云易工作室MoXuan编写继续招人哈下面是精简内容图片和精简内容源码。
![img](./images/3_11.png)
```json
{
"format_version":"1.13.0",
"minecraft:entity":{
"component_groups":{
"minecraft:exploding":{
"minecraft:explode":{
"fuse_length":1.5,
"fuse_lit":true,
"power":3,
"causes_fire":false,
"destroy_affected_by_griefing":true
}
}
},
"components":{
"minecraft:behavior.nearest_attackable_target":{
"priority":1,
"must_see":true,
"must_see_forget_duration":3,
"entity_types":[
{
"filters":{
"test":"is_family",
"subject":"other",
"value":"player"
},
"max_dist":16
}
]
},
"minecraft:target_nearby_sensor":{
"inside_range":2.5,
"outside_range":6,
"must_see":true,
"on_inside_range":{
"event":"minecraft:start_exploding",
"target":"self"
},
"on_outside_range":{
"event":"minecraft:stop_exploding",
"target":"self"
},
"on_vision_lost_inside_range":{
"event":"minecraft:stop_exploding",
"target":"self"
}
}
},
"description":{
"identifier":"vknch:entity",
"is_experimental":false,
"is_spawnable":true,
"is_summonable":true
},
"events":{
"minecraft:start_exploding":{
"add":{
"component_groups":[
"minecraft:exploding"
]
}
},
"minecraft:stop_exploding":{
"remove":{
"component_groups":[
"minecraft:exploding"
]
}
}
}
}
}
```

View File

@@ -0,0 +1,102 @@
# 可以发射的火焰弹
>本篇教程获得第二期知识库优秀教程奖。
>
>获奖作者MaShuGG。
**视频教程:**
<iframe frameborder="0" height="600" width="800" allowfullscreen="allowfullscreen" src="http://cc.163.com/v/core/externplayer/63e39aa829279d2f4acfc257/"/>
考虑到视频教程有点听不清我这里在做一个图文:
首先新加一个物品,名字自定义。
![img](./images/6_0.png)
然后配置好基础信息 。
![img](./images/6_1.png)
把的添加属性的选项全部勾满√ 。
接下来是如何导入原版贴图。
![img](./images/6_2.png)
选择物品贴图,跟着下面操作。
导入完成后你就可以在贴图里找到火球的贴图啦~。
再根据上面配置好物品信息就可以了!
接下里就是写蓝图了。
首先创建玩家预设在创建蓝图。
在把零件拖入进去。
点击蓝图,然后打开他!
监听抛射物碰撞。
![img](./images/6_3.png)
再来一个字符串比较。
![img](./images/6_4.png)
里面填入`minecraft:fireball`,在加入合并三维坐标。
![img](./images/6_5.png)
有人问,纳尼?三维坐标是啥。
其实三维坐标就是xyz轴。
咋获取?
你看到了监听事件的碰撞xyz了吗?
批次链接就好了。
![img](./images/6_6.png)
有伤害来源实体id和玩家id是啥。
![img](./images/6_7.png)
把倒数第二个伤害来源端口链接伤害来源实体id和玩家id。
然后进入游戏测试!
成功!感谢您的观看。
我是麻薯。

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 75 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 314 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 160 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 62 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 145 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 77 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 115 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 118 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 102 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 99 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 100 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 110 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 102 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 98 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 76 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 82 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 86 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 87 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 155 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 98 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 51 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 67 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 78 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 94 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 80 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 79 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 86 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 76 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 95 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 91 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 90 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 94 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 88 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 114 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 117 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 104 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 103 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 101 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 94 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 77 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 89 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 99 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 90 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 99 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 86 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

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