本站文本内容除另有声明外,均在知识共享 署名-非商业性使用-相同方式共享 3.0 协议下提供。(详情…本站文本内容除另有声明外,均在知识共享 署名-非商业性使用-相同方式共享 3.0 协议下提供。(详情…中文Minecraft Wiki是完全公开的。请勇于扩充与修正内容!中文Minecraft Wiki是完全公开的。请勇于扩充与修正内容!Minecraft中文Wiki微博正在更新!或许有兴趣去看看Minecraft中文Wiki微博正在更新!或许有兴趣去看看想与其他用户进行编辑上的沟通?社区专页正是为此创建的。想与其他用户进行编辑上的沟通?社区专页正是为此创建的。翻译或创建页面之前,不妨看看译名标准化Wiki条例页面。翻译或创建页面之前,不妨看看译名标准化Wiki条例页面。需要管理员的协助?在管理员告示板留言也许可以帮到您。需要管理员的协助?在管理员告示板留言也许可以帮到您。

基岩版beta脚本文档

来自Minecraft Wiki
跳转至: 导航搜索
该条目需要定义标准名称以符合标准译名列表
请帮助我们定义标准名称来使它更规范。
Information icon.svg
此特性为基岩版独有。


版本:1.10.0.3[编辑 | 编辑源代码]

这是 Minecraft 发布的的一个测试版的文档。这个版本中的新特性、组件和功能都不是最终版本,并且可能在最终版本发布之前有所更改而不做任何提醒。 如果你的附加包在测试结束之后出现运行错误,请务必重新核对本文档。因为在这个测试版中所写的资源包和行为包都不确保能够在最终版本中运行。

脚本系统[编辑 | 编辑源代码]

Minecraft 脚本引擎(Minecraft Script Engine)使用 JavaScript 语言。
你可以编写 JavaScript 脚本并将他们绑定到行为包中来监听并应答游戏事件,修改实体拥有的组件中的数据,并影响游戏的不同部分。

示例[编辑 | 编辑源代码]

这里有一些从你的 Minecraft 官方手里来的示例,这些能帮助你入门 Minecraft 脚本。可以简单地解压他们来查看代码,或者将他们以.mcpack文件导入以游玩

示例 最新更新 下载链接
回合制RPG 10/24/2018 https://aka.ms/minecraftscripting_turnbased
生物竞技场 10/24/2018 https://aka.ms/minecraftscripting_mobarena


已知问题[编辑 | 编辑源代码]

这是一份Minecraft脚本引擎的当前已知问题的清单

问题 解决方案
脚本从压缩包中无法正确加载 在将它们应用到世界之前解压压缩包。如果你导入了一个.mcpack后缀的脚本包,那么游戏会自动为你解压
在 VR 或 MR 状态下自定义 UI 无法使用 当前你只能在常规模式中使用自定义 UI
脚本暂停之后自定义 UI 重置 当前没有此问题的解决方案
自定义 UI 遮挡Minecraft菜单显示(比如暂停菜单按钮) 你需要关闭并重启 Minecraft 来退出一个使用了自定义UI的世界
自定义 UI 出现在聊天窗口和聊天弹出窗口的上层 如果你在使用自定义 UI ,我们建议你使用 Visual Studio 去调试你的脚本。脚本错误会在聊天栏输出但你可能不会看到他们因为你可能有一个自定义 UI 引起了这个漏洞
自定义UI在暂停和继续时不保持之前的状态 当前没有此问题的解决方案
退出一个没有脚本的世界之后,加载一个带有脚本的世界会导致世界加载出错 加载带有脚本新世界前重启 Minecraft
在提供的示例游玩结束时按下离开按钮会显示一些错误 这个错误来自一个替换一个已经存在的方块的/fill命令,这条错误没有危险,可以忽视
在游戏的开头会可能有一个额外的豹猫 这是由于内置的豹猫生成行为出现了一点小小的且无害的错误


开始之前[编辑 | 编辑源代码]

所以你现在想制作你自己的脚本了?在这个板块里你将会了解你现在所需要的最低配置和建议配置的软件。
注意:脚本目前只支持装有 Windows 10 的 PC 。如果你想在一个不支持脚本的设备上打开一个含有脚本的存档,你将会看到一个告诉你无法进入此存档的错误信息。

软件 最低配置 建议配置
Minecraft 你 Windows 10 设备上的 Minecraft 你 Windows 10 设备上的 Minecraft
代码编辑器 Visual Studio Code 或任何纯文本编辑器 装有以下组件的 Visual Studio Community 2017 :“ JavaScript 诊断”“ JavaScript 和 TypeScript 语言支持”和“实时调试器”
调试器 N/A Visual Studio Community 2017
其他 从https://aka.ms/behaviorpacktemplate 获取的原版行为包 从https://aka.ms/behaviorpacktemplate 获取的原版行为包
存储 为文本编辑器、游戏和脚本腾出的1.0GB的空间 为Visual Studio、游戏和脚本腾出的3.0GB的空间

开始[编辑 | 编辑源代码]

首先你需要下载最新的原版行为包。你可以从此连接获取:https://aka.ms/behaviorpacktemplate
在你已经下载好行为包之后,将它解压到一个文件夹内。在这个行为包里你可以看到scripts文件夹,它包含着所有你想要运行的脚本文件。
在这个scripts文件夹里你能看到两个文件夹:一个用来存储客户端脚本,另一个则是存储服务端脚本。
-Server 脚本:这些脚本运行在游戏的服务端。包括生成新实体、添加组件或者修改实体的组件。
-Client 脚本:这些脚本运行在各个游戏中独立玩家的客户端。这里是一个应答游戏事件和和处理关于玩家的一些特殊事件的好地方。
当你选择了你将要做一个客户端或者是服务端的脚本后,在对应的文件夹中简单地添加一个.js后缀的新空白文件,并打开你选择的代码编辑器。然后开始编程吧!你可以根据你的意愿创建任意数量的 JavaScript 文件(文件的名字没有任何影响),并且他们会各自独立地运行!

注意:要使游戏能够运行脚本,你需要在你运行脚本的世界上打开“使用实验性玩法”。这是非常重要的一点,因为脚本系统只有在实验性玩法中才能运行。
当进入一个拥有客户端脚本的世界时,你将会收到您是否愿意在您的设备上运行脚本的提示(这在本地世界和多人世界中都会显示)。

文件夹结构
vanilla_behavior_pack
|-scripts
|--client
|----myClientScript.js
|--server
|----myServerScript.js
|-manifest.json
|-pack_icon.png


脚本结构[编辑 | 编辑源代码]

在这个章节里你能获取 Minecraft 脚本引擎中 JavaScript 脚本基本结构的介绍。如果你想学习有关 JavaScript 的更多知识或者想跟随一个基本的教程学习,你可以从这里查看 Mozilla Developer Network 上的官方文档:https://developer.mozilla.org/docs/Web/JavaScript
在某种意义上,这些是脚本的必须的部分,但并不是唯一的部分。你可以在你需要的时候创建其它方法 - 只需要确保以下方法之一能在某处调用它们!

1. 系统注册

首先,我们需要为脚本文件注册系统。这标志着我们的脚本是要在游戏的客户端还是服务端的线程上使用。总的来说,你要根据你是把脚本文件放到了client还是server文件夹里了来选择函数。你只需要简单地在client或者server对象上调用registerSystem方法并传入你所需要的 API 的版本就可以完成它。

参数
类型 描述
Integer majorVersion 这是你设计的脚本应该工作在的 Minecraft 脚本引擎的主版本号
Integer minorVersion 这是你设计的脚本应该工作在的 Minecraft 脚本引擎的子版本号
代码示例:
客户端系统
let sampleClientSystem = client.registerSystem(0, 0);
服务端系统
let sampleServerSystem = server.registerSystem(0, 0);


2. 脚本初始化

这是系统注册之后会立马调用的第一个方法。它会在世界被打开时脚本载入的时候运行。
你可以使用此来建立你脚本的环境:注册自定义组件和事件,注册事件监听器等等。这将会在世界准备好和玩家被添加进世界之前运行,所以你不应该在这里尝试生成实体!

代码示例:
sampleSystem.initialize = function() {
	//初始化所有的东西
};


3. 信息更新

这个方法每游戏刻都会调用一次。服务端和客户端每秒会更新20次。这是一个获取、检查和反应组件的变更情况的好地方。

代码示例:
sampleSystem.update = function() {
	//更新所有的东西
};


4. 脚本停止

这个方法会在 Minecraft 脚本引擎关闭时调用。对于客户端来说,这是当玩家离开世界时;对于服务端,这是当最后一个玩家离开世界时。

代码示例:
sampleSystem.shutdown = function() {
	//清理不要的变量
};



调试[编辑 | 编辑源代码]

你的脚本没有运行或者没有按照设想的方式工作?别担心!我们在脚本引擎中添加了了一些调试功能,来帮你了解你脚本的状况。如果你对编程尚不熟悉或者想要了解更多有关调试的信息,我们建议你从下方链接查阅有关 Visual Studio 调试的文档:https://docs.microsoft.com/visualstudio/debugger

这里有两种途径来记录脚本出错时的运行信息:游戏内调试和另一种高级方法(将会在下方给出)。你只需要游戏和你的脚本就能进行游戏内调试,但你需要一台基于 Windows 10 的 PC ,并装好 Visual Studio 才能进行高级调试。

游戏内

当你在游戏内运行脚本,脚本引擎会在脚本发生错误时输出错误信息。例如,如果你尝试获取一个脚本引擎没有记录的组件,你就会收到一条错误信息。
你可以打开聊天界面,在那里会有已经产生的错误信息,或者你可以打开游戏生成的记录文件。不同平台的记录文件的位置有所不同。在 Windows 10 上你可以在以下目录中找到记录文件:

%APPDATA%\..\Local\Packages\Microsoft.MinecraftUWP_8wekyb3d8bbwe\LocalState\logs


我们强烈建议你在脚本编写中添加进一步的调试信息和工具。这会帮你在脚本工作异常时进行辨别。如果你需要额外的帮助,你可以查阅官方 Discord 频道:https://discord.gg/Minecraft


实时(高级)

如果你有一台装有 Visual Studio 的 Windows 10 PC ,你可以添加 Visual Studio 调试器并实时调试你的脚本。
如果你在 Visual Studio 上一同安装了在本文档中“建议配置”部分推荐的那些组件并且启用了实时调试器,那么这个组件会弹出一条来自 Visual Studio 的信息并允许你用 Visual Studio 查看脚本发生错误时的相应的行。

此外,你可以手动连接脚本引擎并调试代码。你可以使用远程调试以连接另一台运行 Minecraft 的设备,并在上面调试。请参阅上方 Visual Studio Debugger 文件以获得有关远程调试的使用指导。
首先你需要打开 Visual Studio 。如果这是你在安装 Visual Studio 后第一次加载,我们建议你将开发环境设置为 JavaScript 开发,并在提示时登陆你的 Microsoft 账户。这会建立起 Visual Studio 与最为关键工具之间的接口。
如果你已经打开了 Visual Studio ,你应该首先加载 Minecraft ,然后创造一个启用了“使用实验性玩法”的新世界,并且应用含有你脚本的行为包
在创建一个新世界后回到 Visual Studio 并点击调试菜单,然后点击“附加到进程...”。在打开的窗口中会有一个名称为过滤进程的搜索框,点击它并输入 Minecraft 。
一旦列表变窄下来至只有正在运行的 Minecraft 实例,你就可以通过看类型列确认脚本引擎是正在运行的。这里会显示 Script 且运行环境是x86或x64。

选择进程并点击附加来将调试器添加到游戏上。现在你就可以在下一行命令执行前,按暂停按钮来暂停脚本引擎。这将使你能够监察脚本中变量的值,并能够在错误发生的时候去 Visual Studio 中暂停。
警告:当你添加断点来用调试器步进执行脚本,客户端有可能超时掉线,服务器端有可能与所有玩家断开链接。




脚本 API 对象[编辑 | 编辑源代码]

这里你能够找到脚本 API 会返回的一些对象的定义。

实体 JS API 对象[编辑 | 编辑源代码]

类型 实体 JS API 对象 描述
String __type__ 只读,这里定义了对象的类型。可以为:entityitem_entity
String __identifier__ 只读,这是该对象namespace:name格式的标识符。例如,如果类型为entity且该对象代表原版的牛,那么这个标识符应该为minecraft:cow
Positive Integer id 只读,这是该实体的唯一标识符。


存档 JS API 对象[编辑 | 编辑源代码]

类型 存档 JS API 对象 描述
String __type__ 只读,这里定义了对象的类型。将为:level
Positive Integer level_id 只读,这是该存档的唯一标识符。


组件 JS API 对象[编辑 | 编辑源代码]

类型 组件 JS API 对象 描述
String __type__ 只读,这里定义了对象的类型。将为:component
JavaScript 对象 data 只读,这是该组件的内容。


查询 JS API 对象[编辑 | 编辑源代码]

类型 查询 JS API 对象 描述
String __type__ 只读,这里定义了对象的类型。将为:query
Positive Integer query_id 只读,这是该查询的唯一标识符。



脚本绑定[编辑 | 编辑源代码]

绑定(Binding)是供 Minecraft 脚本引擎在游戏中更改或修改内容的一个功能。

实体绑定[编辑 | 编辑源代码]

createEntity()

创建一个没有组件且没有被放置在世界里的空实体。

返回值
类型 描述
实体 JS API 对象 object 一个代表新创建实体的对象
JavaScript 对象 null 创建该实体时发生了错误



createEntity(Type, TemplateIdentifier)

创建一个实体,并对其应用以JSON格式定义的指定模板。这允许你快速地从已应用的行为包中创建一个实体,它将作为脚本中创建的实体的基础。这个实体生成在世界里时会带有定义在指定标识符的 JSON 文件里的所有组件、组件组和事件触发器。只在在服务端注册的脚本上生效。

参数
类型 描述
String Type 指定从模板创建的实体的类型。有效输入包括entityitem_entity
String TemplateIdentifier 这可以是已应用的行为包中的任一实体标识符。例如在这里指定minecraft:cow将会使该实体成为一个在 JSON 中定义的牛


返回值
类型 描述
实体 JS API 对象 object 一个代表新创建实体的对象
JavaScript 对象 null 创建该实体时发生了错误



destroyEntity(EntityObject)

销毁由EntityObject标识的实体。如果这个实体已经存在在世界里,则这会从世界中移除它并将它销毁。这也会使EntityObject不再有效 - 你只需在该实体发挥作用之后销毁他即可,而不需再次调用它以移除。这不是杀死这个实体,因此不会触发它的实体死亡事件:它仅仅是被移除了。

参数
类型 描述
实体 JS API 对象 EntityObject 一个从对createEntity()的调用或从一个事件中所检索的对象


返回值
类型 描述
Boolean true 该实体被成功地销毁
JavaScript 对象 null 在销毁实体的时候发生了错误



isValidEntity(EntityObject)

检查给定的EntityObject是否对应一个有效的实体。

参数
类型 描述
实体 JS API 对象 EntityObject 一个从对createEntity()的调用或从一个事件中所检索的对象


返回值
类型 描述
Boolean true 该实体在脚本引擎的实体数据库中
Boolean false 该实体不在脚本引擎的实体数据库中
JavaScript 对象 null 在检查这个实体时发生了错误




组件绑定[编辑 | 编辑源代码]

registerComponent(ComponentIdentifier, ComponentData)

创建一个只存在于脚本中的自定义组件。它接下来可以被添加到实体中,从实体中移除以及在实体里更新。这些组件只在脚本运行时存在。

参数
类型 描述
String ComponentIdentifier 自定义组件的标识符。它需要一个命名空间,以便你可以在后面精准地指向它而不需覆盖内置的组件。例如:myPack:myCustomComponent
JavaScript 对象 ComponentData 个定义了组件内部的字段名以及每个字段所包含的数据的数据的 JavaScript 对象


返回值
类型 描述
Boolean true 组件成功地注册
JavaScript 对象 null 注册组件时发生了错误



createComponent(EntityObject, ComponentIdentifier)

创建指定组件并将它添加到实体中。这个方法使用的组件在之前必须要先注册好。如果这个实体已经拥有了该组件,这个方法就会检索已存在的那个组件。

参数
类型 描述
实体 JS API 对象 EntityObject 从对createEntity()的调用或一个事件中所检索的EntityObject
String ComponentIdentifier 要添加到实体的组件标识符。这个可以是一个内置组件的标识符(可以查阅脚本组件部分),也可以是一个调用registerComponent()方法创建的自定义组件的标识符


返回值
类型 描述
组件 JS API 对象 object 一个包含上述字段和所有应该像在组件中那样定义的字段的对象
JavaScript 对象 null 创建该组件时发生了错误



hasComponent(EntityObject, ComponentIdentifier)

检查给定的实体是否有指定的组件。

参数
类型 描述
实体 JS API 对象 EntityObject 从对createEntity()的调用或一个事件中所检索的EntityObject
String ComponentIdentifier 要添加到实体的组件标识符。这个可以是一个内置组件的标识符(可以查阅脚本组件部分),也可以是一个调用registerComponent()方法创建的自定义组件的标识符


返回值
类型 描述
Boolean true EntityObject具有这个组件
Boolean false EntityObject不具有这个组件
JavaScript 对象 null 传入了一个未知的组件或在检查该EntityObject是否拥有该组件时发生了错误



getComponent(EntityObject, ComponentIdentifier)

在实体中的查找指定组件。如果存在,从该组件中检索数据并将其返回。

参数
类型 描述
实体 JS API 对象 EntityObject 从对createEntity()的调用或一个事件中所检索的EntityObject
String ComponentIdentifier 要添加到实体的组件标识符。这个可以是一个内置组件的标识符(可以查阅脚本组件部分),也可以是一个调用registerComponent()方法创建的自定义组件的标识符


返回值
类型 描述
组件 JS API 对象 object 一个包含下述字段和所有应该像在组件中那样定义的字段的对象
组件 JS API 对象
类型 组件 JS API 对象 描述
String __type__ 只读,这里定义了对象的类型。将为:component
JavaScript 对象 data 只读,这是该组组件的内容。


JavaScript 对象 null 实体不拥有该组件或在获取组件时发生了错误



applyComponentChanges(EntityObject, ComponentObject)

将指定组件和在脚本中对这个组件所做的所有更改应用到指定实体中。这对每个组件意味着什么可能会略有不同:它使得实体以新的数据重载组件,就好像它刚刚被添加到实体上一样。

参数
类型 描述
实体 JS API 对象 EntityObject 我们要将组件更改应用到的那个实体对象
组件 JS API 对象 ComponentObject createComponent()getComponent()返回的实体中检索到的组件对象


返回值
类型 描述
Boolean true 组件成功更新
JavaScript 对象 null 在更新组件时发生了错误



destroyComponent(EntityObject, ComponentIdentifier)

从给定实体中移除指定的组件。如果这个实体拥有这个组件,那么它就会被移除。目前这个方法只能在自定义组件上工作,而不可以用来移除本就在JSON中为一个实体定义好的一个组件。

参数
类型 描述
实体 JS API 对象 EntityObject 从对createEntity()的调用或一个事件中所检索的EntityObject
String ComponentIdentifier 要添加到实体的组件标识符。这个可以是一个内置组件的标识符(可以查阅脚本组件部分),也可以是一个调用registerComponent()方法创建的自定义组件的标识符


返回值
类型 描述
Boolean true 成功从实体中移除指定组件
JavaScript 对象 null 实体不具有这个该组件或移除组件时发生了错误




事件绑定[编辑 | 编辑源代码]

这是一些用来处理事件的绑定。查看文档的脚本事件部分来获取你可以反应或触发的事件列表。

listenForEvent(EventIdentifier, CallbackObject)

允许你注册一个当特定事件被广播时就会被调用JavaScript对象。这个事件可以是一个内置的,也可以是脚本中一个指定的的事件。

参数
类型 描述
String EventIdentifier 这是我们想要反应的事件的标识符。可以是一个内置的,也可以是脚本中自定义的标识符
JavaScript 对象 CallbackObject 当事件广播时会被调用的 JavaScript 对象


返回值
类型 描述
Boolean true 成功注册以监听事件
JavaScript 对象 null 注册用来监听的事件时发生了错误



broadcastEvent(EventIdentifier, EventData)

允许你用脚本中所需要的数据触发事件。任何注册过了的监听该事件的元素都会获知并得到这些传递给他们的数据。

参数
类型 描述
String EventIdentifier 这是我们想要反应的事件的标识符。可以是一个内置的,也可以是脚本中自定义的标识符
JavaScript 对象 EventData 该事件的数据。你可以创建一个新的带有你想要传递给监听器的参数的 JavaScript 对象,然后引擎就会将数据传递给它们


返回值
类型 描述
Boolean true 成功广播了该事件
JavaScript 对象 null 广播事件时发生了错误




实体查询[编辑 | 编辑源代码]

实体查询(Query)是一种基于实体的组件来过滤它们的途径。当你注册一个查询后,你就能请求所有该查询捕获到的实体。实体查询只会返回在当前存档中处于活动状态的实体。如果你想扩展到当前没有加载的那些区块中,其中的实体不会被包括到查询里。

registerQuery()

允许你注册一个查询。该查询将包含所有满足过滤条件的实体。当你注册查询时,缺省状态下它不会添加任何过滤器,所以这是它会捕获所有实体。

返回值
类型 描述
查询 JS API 对象 object 一个包含该查询的 ID 的对象
JavaScript 对象 null 创建该查询时发生了错误



registerQuery(Component, ComponentField1, ComponentField2, ComponentField3)

允许你注册一个查询,该查询只会给出拥有给定组件的实体,并且它定义了组件中的哪些字段将会被作为从查询中获得实体时的过滤器。

参数
类型 默认值 描述
String Component 这是过滤实体时所用组件的标识符
String ComponentField1 "x" 这是我们想要用于过滤实体的第一个组件中字段的名字。默认会设为x。如果在你使用的组件中没有你在这里定义的这个字段,那么该字段将被忽略
String ComponentField2 "y" 这是我们想要用于过滤实体的第二个组件中字段的名字。默认会设为y。如果在你使用的组件中没有你在这里定义的这个字段,那么该字段将被忽略
String ComponentField3 "z" 这是我们想要用于过滤实体的第三个组件中字段的名字。默认会设为z。如果在你使用的组件中没有你在这里定义的这个字段,那么该字段将被忽略


返回值
类型 描述
查询 JS API 对象 object 一个包含该查询的 ID 的对象
JavaScript 对象 null 创建该查询时发生了错误



addFilterToQuery(Query, ComponentIdentifier)

缺省状态下不加入任何过滤器。这时允许查询该查询捕获所有实体。

参数
类型 描述
查询 JS API 对象 Query 该对象含有你想将过滤器应用到的那个查询的 ID
String ComponentIdentifier 这是将会添加到过滤器列表里的组件的标识符。只有拥有那个组件的实体会被列入查询中


getEntitiesFromQuery(Query)

允许你获取查询捕获的实体。

参数
类型 描述
查询 JS API 对象 Query 这是你先前用registerQuery()注册的查询


返回值
类型 描述
Array array 一个EntityObject的数组,它代表着从查询中获取到的实体
JavaScript 对象 null 创建实体时发生了错误



getEntitiesFromQuery(Query, ComponentField1_Min, ComponentField2_Min, ComponentField3_Min, ComponentField1_Max, ComponentField2_Max, ComponentField3_Max)

允许你获取由一个内置的组件过滤器创建的查询所捕获的实体。它唯一会返回的那些实体,是拥有那些在查询注册的时候定义的组件,并且在那三个字段里的值都在这些调用getEntitiesFromQuery时指定的值之间的实体。

参数
类型 描述
查询 JS API 对象 Query 这是你先前用 registerQuery(...) 注册的查询
Decimal ComponentField1_Min 第一个需要被包含在查询中的实体所需要的组件的字段的最小值
Decimal ComponentField2_Min 第二个需要被包含在查询中的实体所需要的组件的字段的最小值
Decimal ComponentField3_Min 第三个需要被包含在查询中的实体所需要的组件的字段的最小值
Decimal ComponentField1_Max 第一个需要被包含在查询中的实体所需要的组件的字段的最大值
Decimal ComponentField2_Max 第二个需要被包含在查询中的实体所需要的组件的字段的最大值
Decimal ComponentField3_Max 第三个需要被包含在查询中的实体所需要的组件的字段的最大值


返回值
类型 描述
Array array 一个EntityObjec的数组,它代表着从查询中获取到的实体
JavaScript 对象 null 创建实体时发生了错误





脚本组件[编辑 | 编辑源代码]

这是一份有关 Minecraft 脚本引擎中可用的特性属性以及组件的文档。
引擎中有两种组件:服务端组件和客户端组件。我们将在下面的它们各自的部分里给出更多的细节。
组件可以添加到实体、检索、更新和从实体中移除。它们不是独立存在的。目前只有用户自定义的组件才能被添加或者从实体中移除。一个组件必须存在于一个实体中才能检索或更新它。
你可以查阅[#脚本绑定|脚本引擎绑定]章节来了解如何添加、移除、检索以及更新组件。本章节介绍每个组件的特定 API 。

服务端组件[编辑 | 编辑源代码]

这些是在服务端上运行,并且和世界中所有的客户端(玩家)同步的组件。
每个组件的 API 都尽可能地与它 JSON 的对应部分相匹配(除了一些标注了的差异)。

minecraft:attack

这个组件控制着实体的Attack Damage特性。它允许你改变它当前的最小值和最大值。在所做的更改被应用之后,对应实体的当前攻击将被重置为该指定的最小值。只有最小和最大值会被更改为指定值,实体具有的的任何良性或恶性效果都保持不变。

参数
类型 默认值 描述
范围 [a, b] damage 近战攻击造成的随机伤害范围。 填入负值则会治愈实体而非伤害它
String effect_name 要应用到被该实体攻击的实体身上的状态效果的标识符
Decimal effect_duration 0.0 应用到受伤害实体身上的状态效果的持续时间


minecraft:collision_box

控制实体的碰撞箱。在更改被应用到组件之后,该实体的碰撞箱会立马改变为新的尺寸。警告:如果此碰撞箱尺寸的更改会导致该实体进入到一个方块中,那么该实体就会被困在其中并开始窒息。

参数
类型 默认值 描述
Decimal width 1.0 碰撞箱的宽度和深度,以方块为单位。负值会被认作是0
Decimal height 1.0 碰撞箱的高度,以方块为单位。负值会被认作是0


minecraft:damage_sensor

定义了一个有关伤害以及实体如何反映伤害的数组 – 包括实体是否会无视该伤害。由于当前 Minecraft 的触发器无法正确地序列化,所以任何已存在的触发器都会在执行applyComponentChanges()时完全被替换。

参数
类型 默认值 描述
List on_damage 有当受到特定种类伤害时要调用的事件的触发器的一个列表,允许对实体的定义和事件指定过滤器
Boolean deals_damage true 如果是true,那么实体将会正常减少生命值,设定为 false 会使得实体无视该伤害
String cause 触发这一系列事件的伤害类型
// 该示例会使得一个实体(在本例中,为一个苦力怕)在玩家攻击它时开始爆炸。
// 注意:该实体必须拥有 damage_sensor 组件,并且有与之相关联的在 JSON 的描述中定义好了的事件。
this.listenForEvent("minecraft:player_attacked_entity", function(eventData) {
	let damageSensorComponent = serverSystem.getComponent(eventData.attacked_entity, "minecraft:damage_sensor");
	damageSensorComponent.data[0].on_damage = { event:"minecraft:start_exploding", filters:[{test:"has_component", operator:"==", value:"minecraft:breathable"}] };
	serverSystem.applyComponentChanges(eventData.attacked_entity, damageSensorComponent);
});


minecraft:equipment

定义实体使用的战利品表以定义它的装备。在更改被应用之后,候选装备会重新滚动,然后实体的一套新的装备会被选中。

参数
类型 默认值 描述
String table 装备表的文件路径,是一个相对于行为包根目录的相对路径
List slot_drop_chance 一个物品槽位的概率的列表,代表从那个槽位掉落物品的概率


minecraft:equippable

定义了有多少以及是什么物品该实体可以装备。

参数
slots

带有物品槽位和可装备物品的列表

参数
类型 默认值 描述
Integer slot 0 该槽位的槽位编号
List accepted_items 可以装备进该槽位的物品的列表
String item 可以装备进该槽位的物品的标识符
String interact_text 在使用触摸屏控制下当实体可以装备有该物品时显示在屏幕上的交互性文本
String on_equip 该实体装备该物品时要触发的事件
String on_unequip 该实体卸下该物品时要触发的事件



minecraft:explode

控制实体的爆炸、爆炸的计时器以及计时器是计数还是停止。

参数
类型 默认值 描述
范围 [a, b] fuseLength [0.0, 0.0] 爆炸前到引线被点燃时刻的随机大小的时间的范围
Decimal power 3.0 以方块为单位的爆炸半径以及爆炸产生的伤害的大小
Decimal maxResistance Infinite 当一个爆炸发生时,方块的爆炸抗性会被最高限制在此值
Boolean fuseLit false 如果是true,则当该组件被添加到实体上时,引线就已经点燃
Boolean causesFire false 如果是true,则爆炸半径内所有方块均会着火
Boolean breaks_blocks true 如果是true,则爆炸会破坏爆炸半径内的方块
Boolean fireAffectedByGriefing false 如果是true,则爆炸是否点燃方块将取决于mobgriefing游戏规则
Boolean destroyAffectedByGriefing false 如果是true,则爆炸是否破坏方块将取决于mobgriefing游戏规则


minecraft:healable

定义了实体是否能被玩家治愈。这不决定实体能够拥有多少生命值;你必须使用Health组件来做这件事。

参数
类型 默认值 描述
Array items 可以用来治愈实体的物品的数组
参数
类型 默认值 描述
String item 能用来治愈实体的物品的标识符
Integer heal_amount 1 喂了该物品后实体得到的生命值
Minecraft Filter filters 定义了能够使用物品治愈实体的条件的过滤器组
Boolean force_use false 决定物品是否可以在无视实体是否满生命值的情况下使用
Minecraft Filter filters 定义了该触发器的条件的过滤器组


minecraft:health

定义了实体的当前以及最大可能的生命值。当该组件被应用回实体后,生命值会立马改变。如果它达到了0或者更低,那么该实体会死亡。

参数
类型 默认值 描述
Integer value 1 实体的当前生命值
Integer max 10 实体能治愈到的最大生命值


minecraft:interact

定义了对于该组件被应用到的那个实体,玩家能够如何与之交互。

参数
类型 默认值 描述
Array spawn_entities 当交互发生时要生成的实体的标识符的数组
String on_interact 当交互发生时要触发的事件的标识符
JSON 对象 particle_on_start 在交互开始时要触发的粒子效果
参数
类型 默认值 描述
String particle_type 将要生成的粒子的种类
Decimal particle_y_offset 0.0 粒子将会在y轴上移动的增益
Boolean particle_offset_towards_interactor false 粒子是否会在离交互者方向更近的位置生成
Decimal cooldown 0.0 距该实体可以再次交互所需的时间,以秒为单位
Boolean swing false 如果是true,玩家与实体交互时会执行swing动画
Boolean use_item false 如果是true,则该交互会消耗一个物品
Integer hurt_item 0 当物品被用于与该实体交互时会造成的伤害,填入0值代表该物品不会消耗耐久
String interact_text 在使用触摸屏控制下当玩家可以与该实体交互时显示在屏幕上的交互性文本
JSON 对象 add_items 当成功交互时会掉落的物品的战利品表
参数
类型 默认值 描述
String table 战利品表的文件路径,相对于行为包的路径
JSON 对象 spawn_items 当成功交互时会掉落的物品的战利品表
参数
类型 默认值 描述
String table 战利品表的文件路径,相对于行为包的路径
String transform_to_item 当成功交互时要将已有物品转换为的物品。格式:itemName:auxValue
Array play_sounds 一个交互发生时要发出的声音的标识符的数组


minecraft:inventory

定义了实体的背包(大小、限制等)。当前它尚不允许更改实体背包的内容。

参数
类型 默认值 描述
String container_type none 该实体拥有的容器的种类。可以为horseminecart_chestminecart_hopperinventorycontainerhopper
Integer inventory_size 5 该容器拥有的槽位的数量
Boolean can_be_siphoned_from false 如果是true,该容器的内容可以被一个漏斗移除
Boolean private false 如果是true,则只有该实体可以访问此背包
Boolean restrict_to_owner false 如果是true,则只有该实体的主人或它自己能够访问它的背包
Integer additional_slots_per_strength 0 每个额外的运输力度会给实体添加的槽位的数量


minecraft:lookat

使一个实体看另一个实体。当应用后,如果一个指定类型的实体在附近并且能够成为目标,则该实体会转向它。

参数
类型 默认值 描述
Boolean setTarget true 如果是true,这个实体会将看向它的实体设定为攻击目标
Decimal searchRadius 10.0 该实体查找正看向着它的实体的最远距离
Boolean mAllowInvulnerable false 如果是true,无敌的实体(例如,创造模式下的玩家)也会被考虑为有效的目标
范围 [a, b] look_cooldown [0.0, 0.0] 实体“逐渐冷却”然后不会再被激怒或寻找目标的这个过程所持续的的随机大小的时间的范围
Minecraft Filter filters player 定义能触发该组件的实体
String look_event 当过滤器中指定的实体看向该实体时会运行的事件


minecraft:nameable

Nameable组件描述了在应用它之后一个实体能否被命名牌命名以及名字显示与否的能力。另外地,脚本引擎允许直接通过属性name来命名实体。

参数
类型 默认值 描述
JSON 对象 name_actions 描述该实体的特殊候选名以及当这个实体获得此名字时会调用的事件
参数
类型 默认值 描述
String on_named 当实体获得了name_filter中指定的名字时会调用的事件
List name_filter 将导致on_named中定义的事件触发的特殊名字列表
String default_trigger 当实体获得名字时运行的触发器
Boolean alwaysShow false 如果是true,则该名字会一直显示
Boolean allowNameTagRenaming true 如果是true,则该实体可以被命名牌重命名
String name 实体的当前的名字,如果该实体还没未命名,则这里为空,把这里改为非空则会导致实体被命名


minecraft:position

这个组件允许你控制实体在世界中的的当前位置。在被应用之后,该实体会被传送到新的指定位置。

参数
类型 默认值 描述
Decimal x 0.0 实体沿X轴(东西方向)的位置
Decimal y 0.0 实体沿Y轴(高程)的位置
Decimal z 0.0 实体沿Z轴(南北方向)的位置


minecraft:rotation

这个组件允许你控制实体的当前视角,也就是该实体头部的转动情况。在应用之后,该实体会以指定的角度被旋转。

参数
类型 默认值 描述
Decimal x 0.0 控制头部的垂直视角
Decimal y 0.0 控制头部的水平视角


minecraft:shooter

定义了实体的远程攻击。这不会使得实体进行一次远程攻击:它只是定义了它会发射什么弹射物而已。

参数
类型 默认值 描述
String def 远程攻击要使用的弹射物实体的标识符。该实体必须具有该弹射物组件以能够将其以弹射物的形式射出
Integer auxVal -1 将要应用到目标上的药水效果的 ID


minecraft:spawn_entity

控制实体生出一个实体或一个物品的能力。这类似于鸡在每隔一定时间后生出鸡蛋的能力。

参数
类型 默认值 描述
Boolean should_leash false 如果是true,该生出的实体将会被父实体拴住
Integer num_to_spawn 1 每次触发会生出的这种类型的实体的数量
Integer min_wait_time 300 在另一个实体生出前最小的随机等待时间,以秒为单位
Integer max_wait_time 600 在另一个实体生出前最大的随机等待时间,以秒为单位
String spawn_sound plop 当实体生出时播放的音效的标识符
String spawn_item egg 要生出的物品的标识符
String spawn_entity 要生出的实体的标识符,如果要生上面定义的物品,则这里留空
String spawn_method born 生出实体要使用的方法
String spawn_event minecraft:entity_born 当实体生出后要调用的事件
Minecraft Filter filters 如果存在,则指定的实体只会在该过滤器运算结果为true时生出
Boolean single_use false 如果是true,该组件一共只会使其生出指定实体一次


minecraft:teleport

这个控制了实体传送自己的能力(类似于末影人)。如果你想要直接传送实体,请使用Position组件来完成

参数
类型 默认值 描述
Boolean randomTeleports true 如果是true,实体将会随机地传送
Decimal minRandomTeleportTime 0.0 在两次随机传送之间的最小数量时间,以秒为单位
Decimal maxRandomTeleportTime 20.0 在两次随机传送之间的最大数量时间,以秒为单位
向量 [a, b, c] randomTeleportCube [32.0, 16.0, 32.0] 实体会传送到这里定义的矩形中的一个随机的位置
Decimal targetDistance 16.0 实体在追逐目标时会传送的最远距离
Decimal target_teleport_chance 1.0 实体追逐目标时会进行传送的概率,在0.01.0之间。1.0代表100%
Decimal lightTeleportChance 0.01 修改实体在进入光亮中时传送的概率
Decimal darkTeleportChance 0.01 修改实体在进入黑暗中时传送的概率



客户端组件[编辑 | 编辑源代码]

这些组件只能在脚本所运行的客户端上运行,只能从客户端脚本中使用。

minecraft:molang

MoLang 组件可以使你访问实体中的 MoLang 变量。若想了解更多关于 MoLang 变量的有关信息,请查阅附加包文档。在脚本中,你可以获取和设定这些定义在实体 JSON 文件中的变量。由于 MoLang 变量的所采用的格式的因素(比如entity.isgrazing),你必须在对象上使用 [] 运算符来访问其中的变量。下面的示例展示了如何使用 [] 运算符来访问变量。

代码示例:
let molangComponent = this.createComponent(entity, "minecraft:molang"); 
molangComponent["variable.molangexample"] = 1.0; 
this.applyComponentChanges(molangComponent); 




用户自定义组件[编辑 | 编辑源代码]

用户自定义组件是一种特殊类型的组件,它可以在脚本中定义,却没有任何一个游戏内置的系统会对其起作用。
这种组件需要在脚本引擎中注册并给定一个名字和一系列的字段,字段为name:value的形式。在应用之后,该组件会表现得像任何一种内置组件一样:你可以从一个实体中获取它,修改它的值,并将它的更改应用到实体上。
当前用户自定义组件还仅只是一种可以被脚本动态添加到和移除自实体的组件。他们不必预先在实体的 JSON 文件中定义好。在当前的版本中这些组件不会在退出和重进存档后被保存:他们只在实体存在时存在,并且需要在重进存档时再次手动添加。

代码示例:
Component Registration
this.registerComponent("myNamespace:myComponent", { myString: "TamerJeison", myInt: 42, myFloat: 1.0, myArray: [1, 2, 3] });


脚本事件[编辑 | 编辑源代码]

在这里你能找到可以在你的代码中监听和响应的事件的列表。

客户端事件[编辑 | 编辑源代码]

监听中事件

以下 Minecraft 事件是脚本引擎持续监听的事件,并且你可以对它们作出反应。

minecraft:client_entered_world 

该事件在玩家加入世界时触发。事件数据包含玩家在世界中的 ID 。该 ID 唯一定义了世界中的玩家,但它当玩家断开连接并重新连接后将会发生改变。


minecraft:hit_result_changed 

该事件在当光罩(即HUD的覆盖层)的指向(即屏幕中心点)于方块、空气、实体或其他事物之间发生改变时触发。支持范围至多1000格方块远。

参数
类型 描述
实体 JS API 对象 entity 当指向一个实体时返回该实体,移开时返回null
向量 [a, b, c] position 当指向一个实体或方块时返回该实体或方块的坐标,移开时返回null
代码示例:
system.initialize = function() {
	this.listenForEvent("minecraft:hit_result_changed", (eventData) = > this.onPick(eventData)); 
}; 
system.onPick = function(eventData) { 
	if (eventData.position !== null) { 
		this.broadcastEvent("minecraft:display_chat_event", "Pick at X:" + eventData.position.X + " Y:" + eventData.position.Y + " Z:" + eventData.position.Z); 
	} 
};


minecraft:hit_result_continuous 

每次时钟主循环的更新都会触发一次该事件,它给出了世界中每时每刻光罩正在指向的实体或方块。至多1000格方块远。

参数
类型 描述
实体 JS API 对象 entity 当指向一个实体时返回该实体,不指向实体时返回null
向量 [a, b, c] position 当指向一个实体或方块时返回它的坐标
代码示例:
system.initialize = function() {
	this.listenForEvent("minecraft:hit_result_continuous", (eventData) = > this.onPick(eventData)); 
}; 
system.onPick = function(eventData) { 
	if (eventData.position !== null) { 
		this.broadcastEvent("minecraft:display_chat_event", "Pick at X:" + eventData.position.X + " Y:" + eventData.position.Y + " Z:" + eventData.position.Z); 
	} 
};


minecraft:pick_hit_result_changed 

该事件在当鼠标指针(包括触屏模式的圆圈和分离控制以及键鼠模式的十字准星)的指向(即圆圈或准星的中心)于方块、空气、实体或其他事物之间发生改变时触发。支持范围至多1000格方块远。

参数
类型 描述
实体 JS API 对象 entity 当指向一个实体时返回该实体,移开时返回null
向量 [a, b, c] position 当指向一个实体或方块时返回该实体或方块的坐标,移开时返回null
代码示例:
system.initialize = function() {
	this.listenForEvent("minecraft:pick_hit_result_changed", (eventData) = > this.onPick(eventData)); 
}; 
system.onPick = function(eventData) { 
	if (eventData.position !== null) { 
		this.broadcastEvent("minecraft:display_chat_event", "Pick at X:" + eventData.position.X + " Y:" + eventData.position.Y + " Z:" + eventData.position.Z); 
	} 
};


minecraft:pick_hit_result_continuous 

每次时钟主循环的更新都会触发一次该事件,它给出了世界中每时每刻鼠标指针正在指向的实体或方块。至多1000格方块远。

参数
类型 描述
实体 JS API 对象 entity 当指向一个实体时返回该实体,不指向实体时返回null
向量 [a, b, c] position 当指向一个实体或方块时返回它的坐标
代码示例:
system.initialize = function() {
	this.listenForEvent("minecraft:pick_hit_result_continuous", (eventData) = > this.onPick(eventData)); 
}; 
system.onPick = function(eventData) { 
	if (eventData.position !== null) { 
		this.broadcastEvent("minecraft:display_chat_event", "Pick at X:" + eventData.position.X + " Y:" + eventData.position.Y + " Z:" + eventData.position.Z); 
	} 
};



可触发事件

下面的 Minecraft 事件能够从脚本中被触发,并使游戏相应地做出回应。

minecraft:display_chat_event 

该事件可以用于使运行着这个客户端脚本的一个指定玩家显示一个聊天信息。该事件的数据为你所要显示的文字的纯文本。特殊格式字符是支持的,它与平常一个玩家正常发送信息时的支持状况完全相同。


minecraft:execute_command 

该事件用于从运行客户端脚本的指定玩家处执行斜杠命令。脚本以该玩家的身份执行命令。该事件的数据为纯文本形式的斜杠命令。斜杠命令将会在触发事件后立刻执行。


minecraft:load_ui 

该事件用于对正在运行本客服端脚本的指定玩家显示一个 UI 界面。并将该 UI 界面放置在 UI 界面栈的顶层。在事件触发后,界面会直接加载显示。只有使用 HTML 定义的界面才能使用该事件显示。

Event Data;参数
类型 默认值 描述
String path 界面的 HTML 文件的路径
JSON 对象 options 你可以通过将下面这些选项的值设定为truefalse来控制界面:
always_accepts_input 

如果是true,则界面只要还在栈中,它就会一直接受并处理输入,即使其它的自定义 UI 覆盖到了它的上面


render_game_behind 

如果是true,则游戏将一直在界面的下方渲染


absorbs_input 

如果是true,则输入就不会再传递给该界面下面的任何一个界面


is_showing_menu 

如果是true,该界面会被认作是一个暂停菜单,而暂停菜单不能在屏幕的顶层显示


should_steal_mouse 

如果是true,则该界面会捕获鼠标指针并将它的移动限制在 UI 界面中


force_render_below 

如果是true,则该界面会被强制渲染,即使它的上层有其他界面甚至有 HUD 的正在其上渲染


render_only_when_topmost 

如果是 true ,则该界面只会在它位于栈的最上层时会渲染



minecraft:send_ui_event 

该事件用于将 UI 事件发送到正在运行本客服端脚本的指定玩家的 UI 引擎中当该事件触发后, UI 事件会立刻被发送。自定义 UI 是基于 HTML 5 的。请查阅脚本的示例,以作为自定义 UI 的参考。

参数
类型 描述
String eventIdentifier 事件的标识符
String data 将被触发的事件的数据


minecraft:spawn_particle_attached_entity 

该事件用于创造一个跟随实体周围的粒子效果。该粒子效果只对正在运行触发该事件的客服端脚本的指定玩家可见。任何定义在 JSON 文件中(包括你资源包中的和 Minecraft 自带的)的效果都可以在这里使用。在 JSON 文件中定义的 MoLang 变量在此之后就可以使用以改变它们附着着的实体。

参数
类型 默认值 描述
String effect 你想要附着到实体上的粒子效果的标识符。这个名字和你在 JSON 文件里给予效果的名字需要相同
向量 [a, b, c] offset [0, 0, 0] 效果相对于实体“中心”的生成的偏移增益
实体 JS API 对象 entity 你想要附着到的实体对象


minecraft:spawn_particle_in_world 

该事件用于创建一个世界中的静态粒子效果。该粒子效果只对正在运行触发该事件的客服端脚本的指定玩家可见。任何定义在 JSON 文件中(包括你资源包中的和 Minecraft 自带的)的效果都可以在这里使用。一旦该粒子生成后,你就不可以再对它进行控制。不像该事件的服务端版本,本客户端版本只能在玩家当前所在的维度生成粒子。

参数
类型 默认值 描述
String effect 你想要生成的粒子效果的标识符。这个名字和你在 JSON 文件里给予效果的名字需要相同
向量 [a, b, c] position [0, 0, 0] 你想要生成该效果的在世界中的位置


minecraft:unload_ui 

该事件用于从正在运行本客服端脚本的指定玩家的栈顶上移除一个 UI 界面。该事件的数据为要移除的界面的名字的字符串。在事件触发后,界面将被安排到下一次 UI 引擎可以这么做的时候被移除。只有通过 HTML 文件定义的界面可以通过该事件移除。




服务端事件[编辑 | 编辑源代码]

监听中事件

以下 Minecraft 事件是脚本引擎持续监听的事件,并且你可以对它们作出反应。

minecraft:player_attacked_entity 

只要玩家攻击一个实体,该事件就会触发。

参数
类型 描述
实体 JS API 对象 player 攻击实体的玩家
实体 JS API 对象 attacked_entity 被玩家攻击的实体


minecraft:entity_created 

只要一个实体被增加到世界,该事件就会触发。

参数
类型 描述
实体 JS API 对象 entity 刚被创建的实体


minecraft:entity_death 

只要一个实体死亡,该事件就会触发。它不会在实体仅被移除时触发(例如当你使用destroyEntity时)。

参数
类型 描述
实体 JS API 对象 entity 死亡的那个实体


minecraft:entity_start_riding 

只要一个实体成为骑在另一个实体身上的骑士,该事件就会触发。

参数
类型 描述
实体 JS API 对象 entity 该骑士
实体 JS API 对象 ride 被骑着的实体


minecraft:entity_stop_riding 

只要一个实体停止骑乘另一个实体,该事件就会触发

参数
类型 描述
实体 JS API 对象 entity 骑着另一个实体的那个实体
Boolean exit_from_rider 如果是true,则骑士是根据自己的意愿决定停止骑乘的
Boolean entity_is_being_destroyed 如果是true,则骑士是由于死亡而停止骑乘的
Boolean switching_rides 如果是true,则骑士是因为骑上了另一个实体而停止骑乘的


minecraft:entity_tick 

只要一个实体更新,该事件就会触发。该事件不会因为玩家的更新而触发。

参数
类型 描述
实体 JS API 对象 entity 更新了的那个实体


minecraft:weather_changed 

只要天气发生改变,该事件就会触发。它包含了将要改变为的天气的信息。

参数
类型 描述
String dimension 天气改变发生在的维度的名字
Boolean raining 给出了新天气是否有雨雪
Boolean lightning 给出了新天气是否有雷暴



Trigger-able Events

下面的 Minecraft 事件能够从脚本中被触发,并使游戏相应地做出回应。

minecraft:display_chat_event 

该事件用于从服务器向玩家发送一条聊天信息。该事件的数据是要被发送的信息的纯文本。特殊格式字符是支持的,它与平常一个玩家正常发送信息时的支持状况完全相同。


minecraft:execute_command 

该事件用于从服务器以世界所有人的身份执行斜杠命令。该事件的数据为纯文本形式的斜杠命令。斜杠命令将会在触发事件后立刻执行。


minecraft:spawn_particle_attached_entity 

该事件用于创造一个跟随实体周围的粒子效果。该粒子效果对所有玩家可见。任何定义在 JSON 文件中(包括你资源包中的和 Minecraft 自带的)的效果都可以在这里使用。在 JSON 文件中定义的 MoLang 变量在此之后就可以使用以改变它们附着着的实体。

参数
类型 默认值 描述
String effect 你想要附着到实体上的粒子效果的标识符。这个名字和你在 JSON 文件里给予效果的名字需要相同
向量 [a, b, c] offset [0, 0, 0] 效果相对于实体“中心”的生成的偏移增益
实体 JS API 对象 entity 你想要附着到的实体对象


minecraft:spawn_particle_in_world 

该事件用于创建一个世界中的静态粒子效果。该粒子效果对所有玩家可见。任何定义在 JSON 文件中(包括你资源包中的和 Minecraft 自带的)的效果都可以在这里使用。一旦该粒子生成后,你就不可以再对它进行控制。

参数
类型 默认值 描述
String effect 你想要生成的粒子效果的标识符。这个名字和你在 JSON 文件里给予效果的名字需要相同
向量 [a, b, c] position [0, 0, 0] 你想要生成该效果的在世界中的位置
String dimension overworld 你想要生成的效果所在的维度。可以为overworldnetherthe end