Files
netease-modsdk-wiki/docs/mcdocs/1-ModAPI/事件/方块.md
2025-03-17 13:24:39 +08:00

2326 lines
88 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.

---
sidebarDepth: 1
---
# 方块
# 索引
| 事件 | <div style="width: 3em"></div> | 描述 |
| --- | --- | --- |
| [BlockDestroyByLiquidServerEvent](方块.md#blockdestroybyliquidserverevent) | <span style="display:inline;color:#ff5555">服务端</span> | 触发时机:方块被水流破坏的事件 |
| [BlockLiquidStateChangeAfterServerEvent](方块.md#blockliquidstatechangeafterserverevent) | <span style="display:inline;color:#ff5555">服务端</span> | 触发时机:方块转为含水或者脱离含水(流体)后触发 |
| [BlockLiquidStateChangeServerEvent](方块.md#blockliquidstatechangeserverevent) | <span style="display:inline;color:#ff5555">服务端</span> | 触发时机:方块转为含水或者脱离含水(流体)前触发 |
| [BlockNeighborChangedServerEvent](方块.md#blockneighborchangedserverevent) | <span style="display:inline;color:#ff5555">服务端</span> | 触发时机自定义方块周围的方块发生变化时需要配置netease:neighborchanged_sendto_script详情请查阅《自定义农作物》文档 |
| [BlockRandomTickServerEvent](方块.md#blockrandomtickserverevent) | <span style="display:inline;color:#ff5555">服务端</span> | 触发时机:自定义方块配置<a href="../../../mcguide/20-玩法开发/15-自定义游戏内容/2-自定义方块/1-JSON组件.html#netease-random-tick">netease:random_tick</a>随机tick时 |
| [BlockRemoveServerEvent](方块.md#blockremoveserverevent) | <span style="display:inline;color:#ff5555">服务端</span> | 触发时机:监听该事件的方块在销毁时触发,可以通过[ListenOnBlockRemoveEvent](#listenonblockremoveevent)方法进行监听或者通过json组件<a href="../../../mcguide/20-玩法开发/15-自定义游戏内容/2-自定义方块/1-JSON组件.html#netease-listen-block-remove">netease:listen_block_remove</a>进行配置 |
| [BlockSnowStateChangeAfterServerEvent](方块.md#blocksnowstatechangeafterserverevent) | <span style="display:inline;color:#ff5555">服务端</span> | 触发时机:方块转为含雪或者脱离含雪后触发 |
| [BlockSnowStateChangeServerEvent](方块.md#blocksnowstatechangeserverevent) | <span style="display:inline;color:#ff5555">服务端</span> | 触发时机:方块转为含雪或者脱离含雪前触发 |
| [BlockStrengthChangedServerEvent](方块.md#blockstrengthchangedserverevent) | <span style="display:inline;color:#ff5555">服务端</span> | 触发时机:自定义机械元件方块红石信号量发生变化时触发 |
| [ChestBlockTryPairWithServerEvent](方块.md#chestblocktrypairwithserverevent) | <span style="display:inline;color:#ff5555">服务端</span> | 触发时机:两个并排的小箱子方块准备组合为一个大箱子方块时 |
| [ClientBlockUseEvent](方块.md#clientblockuseevent) | <span style="display:inline;color:#7575f9">客户端</span> | 触发时机玩家右键点击新版自定义方块或者通过接口AddBlockItemListenForUseEvent增加监听的MC原生游戏方块时客户端抛出该事件该事件tick执行需要注意效率问题。 |
| [CommandBlockContainerOpenEvent](方块.md#commandblockcontaineropenevent) | <span style="display:inline;color:#ff5555">服务端</span> | 触发时机:玩家点击命令方块,尝试打开命令方块的设置界面 |
| [CommandBlockUpdateEvent](方块.md#commandblockupdateevent) | <span style="display:inline;color:#ff5555">服务端</span> | 触发时机:玩家尝试修改命令方块的内置命令时 |
| [DestroyBlockEvent](方块.md#destroyblockevent) | <span style="display:inline;color:#ff5555">服务端</span> | 触发时机:当方块已经被玩家破坏时触发该事件。 |
| [DirtBlockToGrassBlockServerEvent](方块.md#dirtblocktograssblockserverevent) | <span style="display:inline;color:#ff5555">服务端</span> | 触发时机:泥土方块变成草方块时触发 |
| [EntityPlaceBlockAfterServerEvent](方块.md#entityplaceblockafterserverevent) | <span style="display:inline;color:#ff5555">服务端</span> | 触发时机:当生物成功放置方块后触发 |
| [FallingBlockBreakServerEvent](方块.md#fallingblockbreakserverevent) | <span style="display:inline;color:#ff5555">服务端</span> | 触发时机:当下落的方块实体被破坏时,服务端触发该事件 |
| [FallingBlockCauseDamageBeforeClientEvent](方块.md#fallingblockcausedamagebeforeclientevent) | <span style="display:inline;color:#7575f9">客户端</span> | 触发时机:当下落的方块开始计算砸到实体的伤害时,客户端触发该事件 |
| [FallingBlockCauseDamageBeforeServerEvent](方块.md#fallingblockcausedamagebeforeserverevent) | <span style="display:inline;color:#ff5555">服务端</span> | 触发时机:当下落的方块开始计算砸到实体的伤害时,服务端触发该事件 |
| [FallingBlockReturnHeavyBlockServerEvent](方块.md#fallingblockreturnheavyblockserverevent) | <span style="display:inline;color:#ff5555">服务端</span> | 触发时机:当下落的方块实体变回普通重力方块时,服务端触发该事件 |
| [FarmBlockToDirtBlockServerEvent](方块.md#farmblocktodirtblockserverevent) | <span style="display:inline;color:#ff5555">服务端</span> | 触发时机:耕地退化为泥土时触发 |
| [GrassBlockToDirtBlockServerEvent](方块.md#grassblocktodirtblockserverevent) | <span style="display:inline;color:#ff5555">服务端</span> | 触发时机:草方块变成泥土方块时触发 |
| [HeavyBlockStartFallingServerEvent](方块.md#heavyblockstartfallingserverevent) | <span style="display:inline;color:#ff5555">服务端</span> | 触发时机:当重力方块变为下落的方块实体后,服务端触发该事件 |
| [HopperTryPullInServerEvent](方块.md#hoppertrypullinserverevent) | <span style="display:inline;color:#ff5555">服务端</span> | 触发时机:当漏斗上方连接容器后,容器往漏斗开始输入物品时触发,事件仅触发一次 |
| [HopperTryPullOutServerEvent](方块.md#hoppertrypulloutserverevent) | <span style="display:inline;color:#ff5555">服务端</span> | 触发时机:当漏斗以毗邻的方式连接容器时,即从旁边连接容器时,漏斗向容器开始输出物品时触发,事件仅触发一次 |
| [OnAfterFallOnBlockClientEvent](方块.md#onafterfallonblockclientevent) | <span style="display:inline;color:#7575f9">客户端</span> | 触发时机:当实体降落到方块后客户端触发,主要用于力的计算 |
| [OnAfterFallOnBlockServerEvent](方块.md#onafterfallonblockserverevent) | <span style="display:inline;color:#ff5555">服务端</span> | 触发时机:当实体降落到方块后服务端触发,主要用于力的计算 |
| [OnBeforeFallOnBlockServerEvent](方块.md#onbeforefallonblockserverevent) | <span style="display:inline;color:#ff5555">服务端</span> | 触发时机:当实体刚降落到方块上时服务端触发,主要用于伤害计算 |
| [OnEntityInsideBlockClientEvent](方块.md#onentityinsideblockclientevent) | <span style="display:inline;color:#7575f9">客户端</span> | 触发时机:当实体碰撞盒所在区域有方块时,客户端持续触发 |
| [OnEntityInsideBlockServerEvent](方块.md#onentityinsideblockserverevent) | <span style="display:inline;color:#ff5555">服务端</span> | 触发时机:当实体碰撞盒所在区域有方块时,服务端持续触发 |
| [OnModBlockNeteaseEffectCreatedClientEvent](方块.md#onmodblockneteaseeffectcreatedclientevent) | <span style="display:inline;color:#7575f9">客户端</span> | 自定义方块实体绑定的特效创建成功事件在自定义方块实体中绑定的特效创建成功时触发以及使用接口CreateFrameEffectForBlockEntity或CreateParticleEffectForBlockEntity为自定义方块实体添加特效成功时触发。 |
| [OnStandOnBlockClientEvent](方块.md#onstandonblockclientevent) | <span style="display:inline;color:#7575f9">客户端</span> | 触发时机:当实体站立到方块上时客户端持续触发 |
| [OnStandOnBlockServerEvent](方块.md#onstandonblockserverevent) | <span style="display:inline;color:#ff5555">服务端</span> | 触发时机:当实体站立到方块上时服务端持续触发 |
| [PistonActionServerEvent](方块.md#pistonactionserverevent) | <span style="display:inline;color:#ff5555">服务端</span> | 触发时机:活塞或者粘性活塞推送/缩回影响附近方块时 |
| [PlayerTryDestroyBlockClientEvent](方块.md#playertrydestroyblockclientevent) | <span style="display:inline;color:#7575f9">客户端</span> | 当玩家即将破坏方块时客户端线程触发该事件。主要用于床旗帜箱子这些根据方块实体数据进行渲染的方块一般情况下请使用ServerPlayerTryDestroyBlockEvent |
| [ServerBlockEntityTickEvent](方块.md#serverblockentitytickevent) | <span style="display:inline;color:#ff5555">服务端</span> | 触发时机自定义方块配置了netease:block_entity组件并设tick为true方块在玩家的模拟距离新建存档时可以设置默认为4个区块或者在tickingarea内的时候触发 |
| [ServerBlockUseEvent](方块.md#serverblockuseevent) | <span style="display:inline;color:#ff5555">服务端</span> | 触发时机玩家右键点击新版自定义方块或者通过接口AddBlockItemListenForUseEvent增加监听的MC原生游戏方块时服务端抛出该事件该事件tick执行需要注意效率问题。 |
| [ServerEntityTryPlaceBlockEvent](方块.md#serverentitytryplaceblockevent) | <span style="display:inline;color:#ff5555">服务端</span> | 触发时机:当生物试图放置方块时触发该事件。 |
| [ServerPlaceBlockEntityEvent](方块.md#serverplaceblockentityevent) | <span style="display:inline;color:#ff5555">服务端</span> | 触发时机:手动放置或通过接口创建含自定义方块实体的方块时触发,此时可向该方块实体中存放数据 |
| [ServerPlayerTryDestroyBlockEvent](方块.md#serverplayertrydestroyblockevent) | <span style="display:inline;color:#ff5555">服务端</span> | 当玩家即将破坏方块时,服务端线程触发该事件。 |
| [ShearsDestoryBlockBeforeClientEvent](方块.md#shearsdestoryblockbeforeclientevent) | <span style="display:inline;color:#7575f9">客户端</span> | 触发时机:玩家手持剪刀破坏方块时,有剪刀特殊效果的方块会在客户端线程触发该事件 |
| [ShearsDestoryBlockBeforeServerEvent](方块.md#shearsdestoryblockbeforeserverevent) | <span style="display:inline;color:#ff5555">服务端</span> | 触发时机:玩家手持剪刀破坏方块时,有剪刀特殊效果的方块会在服务端线程触发该事件 |
| [StartDestroyBlockClientEvent](方块.md#startdestroyblockclientevent) | <span style="display:inline;color:#7575f9">客户端</span> | 玩家开始挖方块时触发。创造模式下不触发。 |
| [StartDestroyBlockServerEvent](方块.md#startdestroyblockserverevent) | <span style="display:inline;color:#ff5555">服务端</span> | 玩家开始挖方块时触发。创造模式下不触发。 |
| [StepOffBlockClientEvent](方块.md#stepoffblockclientevent) | <span style="display:inline;color:#7575f9">客户端</span> | 触发时机:实体移动离开一个实心方块时触发 |
| [StepOffBlockServerEvent](方块.md#stepoffblockserverevent) | <span style="display:inline;color:#ff5555">服务端</span> | 触发时机:实体移动离开一个实心方块时触发 |
| [StepOnBlockClientEvent](方块.md#steponblockclientevent) | <span style="display:inline;color:#7575f9">客户端</span> | 触发时机:实体刚移动至一个新实心方块时触发。 |
| [StepOnBlockServerEvent](方块.md#steponblockserverevent) | <span style="display:inline;color:#ff5555">服务端</span> | 触发时机:实体刚移动至一个新实心方块时触发。 |
# 方块
## BlockDestroyByLiquidServerEvent
<span style="display:inline;color:#ff5555">服务端</span>
- 描述
触发时机:方块被水流破坏的事件
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| x | int | 方块x坐标 |
| y | int | 方块y坐标 |
| z | int | 方块z坐标 |
| liquidName | str | 流体方块id |
| blockName | str | 方块id |
| auxValue | int | 方块附加值 |
- 返回值
- 备注
- 指令或者接口的设置不会触发该事件
## BlockLiquidStateChangeAfterServerEvent
<span style="display:inline;color:#ff5555">服务端</span>
- 描述
触发时机:方块转为含水或者脱离含水(流体)后触发
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| blockName | str | 方块的identifier包含命名空间及名称 |
| auxValue | int | 方块附加值 |
| dimension | int | 方块维度 |
| x | int | 方块x坐标 |
| y | int | 方块y坐标 |
| z | int | 方块z坐标 |
| turnLiquid | bool | 是否转为含水true则转为含水false则脱离含水 |
- 返回值
## BlockLiquidStateChangeServerEvent
<span style="display:inline;color:#ff5555">服务端</span>
- 描述
触发时机:方块转为含水或者脱离含水(流体)前触发
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| blockName | str | 方块的identifier包含命名空间及名称 |
| auxValue | int | 方块附加值 |
| dimension | int | 方块维度 |
| x | int | 方块x坐标 |
| y | int | 方块y坐标 |
| z | int | 方块z坐标 |
| turnLiquid | bool | 是否转为含水true则转为含水false则脱离含水 |
- 返回值
## BlockNeighborChangedServerEvent
<span style="display:inline;color:#ff5555">服务端</span>
- 描述
触发时机自定义方块周围的方块发生变化时需要配置netease:neighborchanged_sendto_script详情请查阅《自定义农作物》文档
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| dimensionId | int | 维度 |
| posX | int | 方块x坐标 |
| posY | int | 方块y坐标 |
| posZ | int | 方块z坐标 |
| blockName | str | 方块的identifier包含命名空间及名称 |
| auxValue | int | 方块附加值 |
| neighborPosX | int | 变化方块x坐标 |
| neighborPosY | int | 变化方块y坐标 |
| neighborPosZ | int | 变化方块z坐标 |
| fromBlockName | str | 方块变化前的identifier包含命名空间及名称 |
| fromBlockAuxValue | int | 方块变化前附加值 |
| toBlockName | str | 方块变化后的identifier包含命名空间及名称 |
| toAuxValue | int | 方块变化后附加值 |
- 返回值
## BlockRandomTickServerEvent
<span style="display:inline;color:#ff5555">服务端</span>
- 描述
触发时机:自定义方块配置<a href="../../../mcguide/20-玩法开发/15-自定义游戏内容/2-自定义方块/1-JSON组件.html#netease-random-tick">netease:random_tick</a>随机tick时
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| posX | int | 方块x坐标 |
| posY | int | 方块y坐标 |
| posZ | int | 方块z坐标 |
| blockName | str | 方块名称 |
| fullName | str | 方块的identifier包含命名空间及名称 |
| auxValue | int | 方块附加值 |
| dimensionId | int | 实体维度 |
- 返回值
## BlockRemoveServerEvent
<span style="display:inline;color:#ff5555">服务端</span>
- 描述
触发时机:监听该事件的方块在销毁时触发,可以通过[ListenOnBlockRemoveEvent](#listenonblockremoveevent)方法进行监听或者通过json组件<a href="../../../mcguide/20-玩法开发/15-自定义游戏内容/2-自定义方块/1-JSON组件.html#netease-listen-block-remove">netease:listen_block_remove</a>进行配置
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| x | int | 方块位置x |
| y | int | 方块位置y |
| z | int | 方块位置z |
| fullName | str | 方块的identifier包含命名空间及名称 |
| auxValue | int | 方块的附加值 |
| dimension | int | 该方块所在的维度 |
- 返回值
### 相关接口
<span id="ListenOnBlockRemoveEvent"></span>
### ListenOnBlockRemoveEvent
method in mod.server.component.blockInfoCompServer.BlockInfoComponentServer
- 描述
是否监听方块BlockRemoveServerEvent事件可以动态修改json组件<a href="../../../mcguide/20-玩法开发/15-自定义游戏内容/2-自定义方块/1-JSON组件.html#netease-listen-block-remove">netease:listen_block_remove</a>的值
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| identifier | str | 方块identifier如minecraft:wheat |
| listen | bool | 是否监听 |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| bool | 是否设置成功 |
- 备注
- 对于一些特殊的方块注意要使用对应的方块Id参数如砖块楼梯监听的方块Id应该为minecraft:brick_block
- 示例
```python
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateBlockInfo(levelId)
comp.ListenOnBlockRemoveEvent("minecraft:wheat", True)
```
## BlockSnowStateChangeAfterServerEvent
<span style="display:inline;color:#ff5555">服务端</span>
- 描述
触发时机:方块转为含雪或者脱离含雪后触发
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| dimension | int | 方块维度 |
| x | int | 方块x坐标 |
| y | int | 方块y坐标 |
| z | int | 方块z坐标 |
| turnSnow | bool | 是否转为含雪true则转为含雪false则脱离含雪 |
| setBlockType | int | 方块进入脱离含雪的原因,参考[SetBlockType](../枚举值/SetBlockType.md) |
- 返回值
## BlockSnowStateChangeServerEvent
<span style="display:inline;color:#ff5555">服务端</span>
- 描述
触发时机:方块转为含雪或者脱离含雪前触发
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| dimension | int | 方块维度 |
| x | int | 方块x坐标 |
| y | int | 方块y坐标 |
| z | int | 方块z坐标 |
| turnSnow | bool | 是否转为含雪true则转为含雪false则脱离含雪 |
| setBlockType | int | 方块进入脱离含雪的原因,参考[SetBlockType](../枚举值/SetBlockType.md) |
- 返回值
## BlockStrengthChangedServerEvent
<span style="display:inline;color:#ff5555">服务端</span>
- 描述
触发时机:自定义机械元件方块红石信号量发生变化时触发
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| posX | int | 方块x坐标 |
| posY | int | 方块y坐标 |
| posZ | int | 方块z坐标 |
| blockName | str | 方块的identifier包含命名空间及名称 |
| auxValue | int | 方块附加值 |
| newStrength | int | 变化后的红石信号量 |
| dimensionId | int | 维度 |
- 返回值
## ChestBlockTryPairWithServerEvent
<span style="display:inline;color:#ff5555">服务端</span>
- 描述
触发时机:两个并排的小箱子方块准备组合为一个大箱子方块时
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| cancel | bool | 是否允许触发默认为False若设为True可阻止小箱子组合成为一个大箱子 |
| blockX | int | 小箱子方块x坐标 |
| blockY | int | 小箱子方块y坐标 |
| blockZ | int | 小箱子方块z坐标 |
| otherBlockX | int | 将要与之组合的另外一个小箱子方块x坐标 |
| otherBlockY | int | 将要与之组合的另外一个小箱子方块y坐标 |
| otherBlockZ | int | 将要与之组合的另外一个小箱子方块z坐标 |
| dimensionId | int | 维度id |
- 返回值
## ClientBlockUseEvent
<span style="display:inline;color:#7575f9">客户端</span>
- 描述
触发时机玩家右键点击新版自定义方块或者通过接口AddBlockItemListenForUseEvent增加监听的MC原生游戏方块时客户端抛出该事件该事件tick执行需要注意效率问题
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| playerId | str | 玩家Id |
| blockName | str | 方块的identifier包含命名空间及名称 |
| aux | int | 方块附加值 |
| cancel | bool | 设置为True可拦截与方块交互的逻辑。 |
| x | int | 方块x坐标 |
| y | int | 方块y坐标 |
| z | int | 方块z坐标 |
- 返回值
- 备注
- 有的方块是在ServerBlockUseEvent中设置cancel生效但是有部分方块是在ClientBlockUseEvent中设置cancel才生效如有需求建议在两个事件中同时设置cancel以保证生效。
在零件中直接声明一个同名函数,即可完成监听,详情参考<a href="../../../mcguide/20-玩法开发/14-预设玩法编程/2-深入理解零件/0-零件开发.html#零件事件">零件事件</a>
### 相关接口
<span id="AddBlockItemListenForUseEvent"></span>
### AddBlockItemListenForUseEvent
method in mod.client.component.blockUseEventWhiteListCompClient.BlockUseEventWhiteListComponentClient
- 描述
增加blockName方块对ClientBlockUseEvent事件的脚本层监听
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| blockName | str | 方块名称格式namespace:name:auxvalue其中namespace:name:*匹配所有的auxvalue |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| bool | 是否增加成功 |
- 示例
```python
import mod.client.extraClientApi as clientApi
comp = clientApi.GetEngineCompFactory().CreateBlockUseEventWhiteList(clientApi.GetLevelId())
comp.AddBlockItemListenForUseEvent("minecraft:nether_brick_stairs:2")
# 注意blockName格式为namespace:name:auxvalue如果不填auxvalue则默认为0
# auxValue详细值详见官方wiki如https://minecraft-zh.gamepedia.com/楼梯 中的‘方块数据值’
```
<span id="RemoveBlockItemListenForUseEvent"></span>
### RemoveBlockItemListenForUseEvent
method in mod.client.component.blockUseEventWhiteListCompClient.BlockUseEventWhiteListComponentClient
- 描述
移除blockName方块对ClientBlockUseEvent事件的脚本层监听
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| blockName | str | 方块名称格式namespace:name:auxvalue其中namespace:name:*匹配所有的auxvalue |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| bool | 是否移除成功 |
- 示例
```python
import mod.client.extraClientApi as clientApi
comp = clientApi.GetEngineCompFactory().CreateBlockUseEventWhiteList(clientApi.GetLevelId())
comp.RemoveBlockItemListenForUseEvent("minecraft:nether_brick_stairs:2")
# 注意blockName格式为namespace:name:auxvalue如果不填auxvalue则默认为0
# auxValue详细值详见官方wiki如https://minecraft-zh.gamepedia.com/楼梯 中的‘方块数据值’
```
<span id="ClearAllListenForBlockUseEventItems"></span>
### ClearAllListenForBlockUseEventItems
method in mod.client.component.blockUseEventWhiteListCompClient.BlockUseEventWhiteListComponentClient
- 描述
清空所有已添加方块对ClientBlockUseEvent事件的脚本层监听
- 参数
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| bool | 是否清空成功 |
- 示例
```python
import mod.client.extraClientApi as clientApi
comp = clientApi.GetEngineCompFactory().CreateBlockUseEventWhiteList(clientApi.GetLevelId())
comp.ClearAllListenForBlockUseEventItems()
```
## CommandBlockContainerOpenEvent
<span style="display:inline;color:#ff5555">服务端</span>
- 描述
触发时机:玩家点击命令方块,尝试打开命令方块的设置界面
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| playerId | str | 玩家实体id |
| isBlock | bool | 是否以方块坐标的形式定位命令方块当为True时下述的blockX/blockY/blockZ有意义当为False时下述的victimId有意义 |
| blockX | int | 命令方块位置x当isBlock为True时有效 |
| blockY | int | 命令方块位置y当isBlock为True时有效 |
| blockZ | int | 命令方块位置z当isBlock为True时有效 |
| victimId | str | 命令方块对应的逻辑实体的唯一id当isBlock为False时有效 |
| cancel | bool | 修改为True时可以阻止玩家打开命令方块的设置界面 |
- 返回值
在零件中直接声明一个同名函数,即可完成监听,详情参考<a href="../../../mcguide/20-玩法开发/14-预设玩法编程/2-深入理解零件/0-零件开发.html#零件事件">零件事件</a>
## CommandBlockUpdateEvent
<span style="display:inline;color:#ff5555">服务端</span>
- 描述
触发时机:玩家尝试修改命令方块的内置命令时
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| playerId | str | 玩家实体id |
| playerUid | int/long | 玩家的uid |
| command | str | 企图修改的命令方块中的命令内容字符串 |
| isBlock | bool | 是否以方块坐标的形式定位命令方块当为True时下述的blockX/blockY/blockZ有意义当为False时下述的victimId有意义 |
| blockX | int | 命令方块位置x当isBlock为True时有效 |
| blockY | int | 命令方块位置y当isBlock为True时有效 |
| blockZ | int | 命令方块位置z当isBlock为True时有效 |
| victimId | str | 命令方块对应的逻辑实体的唯一id当isBlock为False时有效 |
| cancel | bool | 修改为True时可以阻止玩家修改命令方块的内置命令 |
- 返回值
- 备注
- 当修改的目标为命令方块矿车时此时isBlock为False设置cancel为True依旧可以阻止修改命令方块矿车的内部指令但是从客户端能够看到命令方块矿车的内部指令变化了不过这仅仅是假象重新登录或者其他客户端打开命令方块矿车的设置界面就会发现其实内部指令没有变化
在零件中直接声明一个同名函数,即可完成监听,详情参考<a href="../../../mcguide/20-玩法开发/14-预设玩法编程/2-深入理解零件/0-零件开发.html#零件事件">零件事件</a>
## DestroyBlockEvent
<span style="display:inline;color:#ff5555">服务端</span>
- 描述
触发时机:当方块已经被玩家破坏时触发该事件。
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| x | int | 方块x坐标 |
| y | int | 方块y坐标 |
| z | int | 方块z坐标 |
| face | int | 方块被敲击的面向id参考[Facing枚举](../枚举值/Facing.md) |
| fullName | str | 方块的identifier包含命名空间及名称 |
| auxData | int | 方块附加值 |
| playerId | str | 破坏方块的玩家ID |
| dimensionId | int | 维度id |
- 返回值
- 备注
- 在生存模式或创造模式下都会触发
在零件中直接声明一个同名函数,即可完成监听,详情参考<a href="../../../mcguide/20-玩法开发/14-预设玩法编程/2-深入理解零件/0-零件开发.html#零件事件">零件事件</a>
## DirtBlockToGrassBlockServerEvent
<span style="display:inline;color:#ff5555">服务端</span>
- 描述
触发时机:泥土方块变成草方块时触发
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| dimension | int | 方块维度 |
| x | int | 方块x坐标 |
| y | int | 方块y坐标 |
| z | int | 方块z坐标 |
- 返回值
- 备注
- 指令或者接口的设置不会触发该事件
## EntityPlaceBlockAfterServerEvent
<span style="display:inline;color:#ff5555">服务端</span>
- 描述
触发时机:当生物成功放置方块后触发
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| x | int | 方块x坐标 |
| y | int | 方块y坐标 |
| z | int | 方块z坐标 |
| fullName | str | 方块的identifier包含命名空间及名称 |
| auxData | int | 方块附加值 |
| entityId | str | 试图放置方块的生物ID |
| dimensionId | int | 维度id |
| face | int | 点击方块的面,参考[Facing枚举](../枚举值/Facing.md) |
- 返回值
- 备注
- 部分放置后会产生实体的方块、可操作的方块、带有特殊逻辑的方块,不会触发该事件,包括但不限于床、门、告示牌、花盆、红石中继器、船、炼药锅、头部模型、蛋糕、酿造台、盔甲架等。
在零件中直接声明一个同名函数,即可完成监听,详情参考<a href="../../../mcguide/20-玩法开发/14-预设玩法编程/2-深入理解零件/0-零件开发.html#零件事件">零件事件</a>
## FallingBlockBreakServerEvent
<span style="display:inline;color:#ff5555">服务端</span>
- 描述
触发时机:当下落的方块实体被破坏时,服务端触发该事件
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| fallingBlockId | str | 下落的方块实体id |
| fallingBlockX | float | 下落的方块实体位置x |
| fallingBlockY | float | 下落的方块实体位置y |
| fallingBlockZ | float | 下落的方块实体位置z |
| blockName | str | 重力方块的identifier包含命名空间及名称 |
| fallTickAmount | int | 下落的方块实体持续下落了多少tick |
| dimensionId | int | 下落的方块实体维度id |
| cancelDrop | bool | 是否取消方块物品掉落,可以在脚本层中设置 |
- 返回值
- 备注
- 不是所有下落的方块都会触发该事件需要在json中先配置触发开关详情参考<a href="../../../mcguide/20-玩法开发/15-自定义游戏内容/2-自定义方块/3-特殊方块/6-自定义重力方块.html">自定义重力方块</a>
## FallingBlockCauseDamageBeforeClientEvent
<span style="display:inline;color:#7575f9">客户端</span>
- 描述
触发时机:当下落的方块开始计算砸到实体的伤害时,客户端触发该事件
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| fallingBlockId | int | 下落的方块实体id |
| fallingBlockX | float | 下落的方块实体位置x |
| fallingBlockY | float | 下落的方块实体位置y |
| fallingBlockZ | float | 下落的方块实体位置z |
| blockName | str | 重力方块的identifier包含命名空间及名称 |
| dimensionId | int | 下落的方块实体维度id |
| collidingEntitys | list(str) | 当前碰撞到的实体列表id客户端只能获取到玩家如果没有的话是None |
| fallTickAmount | int | 下落的方块实体持续下落了多少tick |
| fallDistance | float | 下落的方块实体持续下落了多少距离 |
| isHarmful | bool | 客户端始终为false因为客户端不会计算伤害值 |
| fallDamage | int | 对实体的伤害 |
- 返回值
- 备注
- 不是所有下落的方块都会触发该事件需要在json中先配置触发开关详情参考<a href="../../../mcguide/20-玩法开发/15-自定义游戏内容/2-自定义方块/3-特殊方块/6-自定义重力方块.html">自定义重力方块</a>
- 当该事件的参数数据fallTickAmountfallDistancecollidingEntitysfallDamage与服务端事件FallingBlockCauseDamageBeforeServerEvent数据有差异时请以服务端事件数据为准。
## FallingBlockCauseDamageBeforeServerEvent
<span style="display:inline;color:#ff5555">服务端</span>
- 描述
触发时机:当下落的方块开始计算砸到实体的伤害时,服务端触发该事件
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| fallingBlockId | str | 下落的方块实体id |
| fallingBlockX | float | 下落的方块实体位置x |
| fallingBlockY | float | 下落的方块实体位置y |
| fallingBlockZ | float | 下落的方块实体位置z |
| blockName | str | 重力方块的identifier包含命名空间及名称 |
| dimensionId | int | 下落的方块实体维度id |
| collidingEntitys | list(str) | 当前碰撞到的实体列表id如果没有的话是None |
| fallTickAmount | int | 下落的方块实体持续下落了多少tick |
| fallDistance | float | 下落的方块实体持续下落了多少距离 |
| isHarmful | bool | 是否计算对实体的伤害引擎传来的值由json配置和伤害是否大于0决定可在脚本层修改传回引擎 |
| fallDamage | int | 对实体的伤害引擎传来的值距离和json配置决定可在脚本层修改传回引擎 |
- 返回值
- 备注
- 不是所有下落的方块都会触发该事件需要在json中先配置触发开关详情参考<a href="../../../mcguide/20-玩法开发/15-自定义游戏内容/2-自定义方块/3-特殊方块/6-自定义重力方块.html">自定义重力方块</a>
- 服务端通常触发在客户端之后而且有时会相差一个tick这就意味着可能发生以下现象:服务端fallTickAmount比配置强制破坏时间多1tick下落的距离、下落的伤害计算出来比客户端时间多1tick的误差。
## FallingBlockReturnHeavyBlockServerEvent
<span style="display:inline;color:#ff5555">服务端</span>
- 描述
触发时机:当下落的方块实体变回普通重力方块时,服务端触发该事件
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| fallingBlockId | int | 下落的方块实体id |
| blockX | int | 方块位置x |
| blockY | int | 方块位置y |
| blockZ | int | 方块位置z |
| heavyBlockName | str | 重力方块的identifier包含命名空间及名称 |
| prevHereBlockName | str | 变回重力方块时原本方块位置的identifier包含命名空间及名称 |
| dimensionId | int | 下落的方块实体维度id |
| fallTickAmount | int | 下落的方块实体持续下落了多少tick |
- 返回值
- 备注
- 不是所有下落的方块都会触发该事件需要在json中先配置触发开关详情参考<a href="../../../mcguide/20-玩法开发/15-自定义游戏内容/2-自定义方块/3-特殊方块/6-自定义重力方块.html">自定义重力方块</a>
## FarmBlockToDirtBlockServerEvent
<span style="display:inline;color:#ff5555">服务端</span>
- 描述
触发时机:耕地退化为泥土时触发
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| dimension | int | 方块维度 |
| x | int | 方块x坐标 |
| y | int | 方块y坐标 |
| z | int | 方块z坐标 |
| setBlockType | int | 耕地退化为泥土的原因,参考[SetBlockType](../枚举值/SetBlockType.md) |
- 返回值
- 备注
- 指令或者接口的设置不会触发该事件
## GrassBlockToDirtBlockServerEvent
<span style="display:inline;color:#ff5555">服务端</span>
- 描述
触发时机:草方块变成泥土方块时触发
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| dimension | int | 方块维度 |
| x | int | 方块x坐标 |
| y | int | 方块y坐标 |
| z | int | 方块z坐标 |
- 返回值
- 备注
- 指令或者接口的设置不会触发该事件
## HeavyBlockStartFallingServerEvent
<span style="display:inline;color:#ff5555">服务端</span>
- 描述
触发时机:当重力方块变为下落的方块实体后,服务端触发该事件
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| fallingBlockId | str | 下落的方块实体id |
| blockX | int | 方块位置x |
| blockY | int | 方块位置y |
| blockZ | int | 方块位置z |
| blockName | str | 重力方块的identifier包含命名空间及名称 |
| dimensionId | int | 下落的方块实体维度id |
- 返回值
- 备注
- 不是所有下落的方块都会触发该事件需要在json中先配置触发开关详情参考<a href="../../../mcguide/20-玩法开发/15-自定义游戏内容/2-自定义方块/3-特殊方块/6-自定义重力方块.html">自定义重力方块</a>
## HopperTryPullInServerEvent
<span style="display:inline;color:#ff5555">服务端</span>
- 描述
触发时机:当漏斗上方连接容器后,容器往漏斗开始输入物品时触发,事件仅触发一次
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| x | int | 漏斗位置x |
| y | int | 漏斗位置y |
| z | int | 漏斗位置z |
| abovePosX | int | 交互的容器位置x |
| abovePosY | int | 交互的容器位置y |
| abovePosZ | int | 交互的容器位置z |
| dimensionId | int | 维度id |
| canHopper | bool | 是否允许容器往漏斗加东西(要关闭此交互,需先监听此事件再放置容器) |
- 返回值
## HopperTryPullOutServerEvent
<span style="display:inline;color:#ff5555">服务端</span>
- 描述
触发时机:当漏斗以毗邻的方式连接容器时,即从旁边连接容器时,漏斗向容器开始输出物品时触发,事件仅触发一次
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| x | int | 漏斗位置x |
| y | int | 漏斗位置y |
| z | int | 漏斗位置z |
| attachedPosX | int | 交互的容器位置x |
| attachedPosY | int | 交互的容器位置y |
| attachedPosZ | int | 交互的容器位置z |
| dimensionId | int | 维度id |
| canHopper | bool | 是否允许漏斗往容器加东西(要关闭此交互,需先监听此事件再放置容器) |
- 返回值
## OnAfterFallOnBlockClientEvent
<span style="display:inline;color:#7575f9">客户端</span>
- 描述
触发时机:当实体降落到方块后客户端触发,主要用于力的计算
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| entityId | str | 实体id |
| posX | float | 实体位置x |
| posY | float | 实体位置y |
| posZ | float | 实体位置z |
| motionX | float | 瞬时移动X方向的力 |
| motionY | float | 瞬时移动Y方向的力 |
| motionZ | float | 瞬时移动Z方向的力 |
| blockName | str | 方块的identifier包含命名空间及名称 |
| calculate | bool | 是否按脚本层传值计算力 |
- 返回值
- 备注
- 不是所有方块都会触发该事件需要在json中先配置触发开关详情参考<a href="../../../mcguide/20-玩法开发/15-自定义游戏内容/2-自定义方块/1-JSON组件.html">自定义方块JSON组件</a>
- 如果要在脚本层修改motion回传的需要是浮点型例如需要赋值0.0而不是0
- 如果需要修改实体的力,最好配合服务端事件同步修改,避免产生非预期现象
- 因为引擎最后一定会按照原版方块规则计算力普通方块置0床、粘液块等反弹所以脚本层如果想直接修改当前力需要将calculate设为true取消原版计算按照传回值计算
- 引擎在落地之后OnAfterFallOnBlockClientEvent会一直触发因此请在脚本层中做对应的逻辑判断
在零件中直接声明一个同名函数,即可完成监听,详情参考<a href="../../../mcguide/20-玩法开发/14-预设玩法编程/2-深入理解零件/0-零件开发.html#零件事件">零件事件</a>
## OnAfterFallOnBlockServerEvent
<span style="display:inline;color:#ff5555">服务端</span>
- 描述
触发时机:当实体降落到方块后服务端触发,主要用于力的计算
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| entityId | str | 实体id |
| posX | float | 实体位置x |
| posY | float | 实体位置y |
| posZ | float | 实体位置z |
| motionX | float | 瞬时移动X方向的力 |
| motionY | float | 瞬时移动Y方向的力 |
| motionZ | float | 瞬时移动Z方向的力 |
| blockName | str | 方块的identifier包含命名空间及名称 |
| calculate | bool | 是否按脚本层传值计算力 |
- 返回值
- 备注
- 不是所有方块都会触发该事件需要在json中先配置触发开关详情参考<a href="../../../mcguide/20-玩法开发/15-自定义游戏内容/2-自定义方块/1-JSON组件.html">自定义方块JSON组件</a>
- 如果要在脚本层修改motion回传的需要是浮点型例如需要赋值0.0而不是0
- 如果需要修改实体的力,最好配合客户端事件同步修改,避免产生非预期现象
- 因为引擎最后一定会按照原版方块规则计算力普通方块置0床、粘液块等反弹所以脚本层如果想直接修改当前力需要将calculate设为true取消原版计算按照传回值计算
- 引擎在落地之后OnAfterFallOnBlockServerEvent会一直触发因此请在脚本层中做对应的逻辑判断
在零件中直接声明一个同名函数,即可完成监听,详情参考<a href="../../../mcguide/20-玩法开发/14-预设玩法编程/2-深入理解零件/0-零件开发.html#零件事件">零件事件</a>
## OnBeforeFallOnBlockServerEvent
<span style="display:inline;color:#ff5555">服务端</span>
- 描述
触发时机:当实体刚降落到方块上时服务端触发,主要用于伤害计算
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| entityId | str | 实体id |
| blockX | int | 方块位置x |
| blockY | int | 方块位置y |
| blockZ | int | 方块位置z |
| blockName | str | 方块的identifier包含命名空间及名称 |
| fallDistance | float | 实体下降距离,可在脚本层传给引擎 |
| cancel | bool | 是否取消引擎对实体下降伤害的计算 |
- 返回值
- 备注
- 不是所有方块都会触发该事件需要在json中先配置触发开关详情参考<a href="../../../mcguide/20-玩法开发/15-自定义游戏内容/2-自定义方块/1-JSON组件.html">自定义方块JSON组件</a>
- 如果要在脚本层修改fallDistance回传的一定要是浮点型例如需要赋值0.0而不是0
- 可能会因为轻微的反弹触发多次可在脚本层针对fallDistance的值进行判断
在零件中直接声明一个同名函数,即可完成监听,详情参考<a href="../../../mcguide/20-玩法开发/14-预设玩法编程/2-深入理解零件/0-零件开发.html#零件事件">零件事件</a>
## OnEntityInsideBlockClientEvent
<span style="display:inline;color:#7575f9">客户端</span>
- 描述
触发时机:当实体碰撞盒所在区域有方块时,客户端持续触发
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| entityId | str | 实体id |
| dimensionId | int | 实体所在维度id |
| slowdownMultiX | float | 实体移速X方向的减速比例 |
| slowdownMultiY | float | 实体移速Y方向的减速比例 |
| slowdownMultiZ | float | 实体移速Z方向的减速比例 |
| blockX | int | 方块位置x |
| blockY | int | 方块位置y |
| blockZ | int | 方块位置z |
| blockName | str | 方块的identifier包含命名空间及名称 |
| cancel | bool | 可由脚本层回传True给引擎阻止触发后续原版逻辑 |
- 返回值
- 备注
- 不是所有方块都会触发该事件需要在json中先配置触发开关详情参考<a href="../../../mcguide/20-玩法开发/15-自定义游戏内容/2-自定义方块/1-JSON组件.html">自定义方块JSON组件</a>
原版方块需要先通过RegisterOnEntityInside接口注册才能触发
- 如果需要修改slowdownMulti/cancel强烈建议与服务端事件同步修改避免出现被服务端矫正等非预期现象。
- 如果要在脚本层修改slowdownMulti回传的一定要是浮点型例如需要赋值1.0而不是1
- 有任意slowdownMulti参数被传回非0值时生效减速比例
- slowdownMulti参数更像是一个Buff例如并不是立刻计算而是先保存在实体属性里延后计算、在已经有slowdownMulti属性的情况下会取最低的值、免疫掉落伤害等与原版蜘蛛网逻辑基本一致。
在零件中直接声明一个同名函数,即可完成监听,详情参考<a href="../../../mcguide/20-玩法开发/14-预设玩法编程/2-深入理解零件/0-零件开发.html#零件事件">零件事件</a>
### 相关接口
<span id="RegisterOnEntityInside"></span>
### RegisterOnEntityInside
method in mod.client.component.blockInfoCompClient.BlockInfoComponentClient
- 描述
可以动态注册与修改netease:on_entity_inside组件
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| blockName | str | 方块标识符包含命名空间如minecraft:grass |
| sendPythonEvent | bool | 是否发送python事件为True |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| bool | 是否注册成功 |
- 备注
- 目前仅能动态添加与修改原版方块的netease:on_entity_inside组件
- 可以多次调用修改原组件的值删除组件请使用UnRegisterOnEntityInside接口
- 示例
```python
import mod.client.extraClientApi as clientApi
comp = clientApi.GetEngineCompFactory().CreateBlockInfo(levelId)
comp.RegisterOnEntityInside("minecraft:redstone_ore", True)
```
<span id="UnRegisterOnEntityInside"></span>
### UnRegisterOnEntityInside
method in mod.client.component.blockInfoCompClient.BlockInfoComponentClient
- 描述
可以动态删除netease:on_entity_inside组件
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| blockName | str | 方块标识符包含命名空间如minecraft:grass |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| bool | 是否删除成功 |
- 备注
- 目前仅能动态删除原版方块的netease:on_entity_inside组件
- 示例
```python
import mod.client.extraClientApi as clientApi
comp = clientApi.GetEngineCompFactory().CreateBlockInfo(levelId)
comp.UnRegisterOnEntityInside("minecraft:redstone_ore")
```
## OnEntityInsideBlockServerEvent
<span style="display:inline;color:#ff5555">服务端</span>
- 描述
触发时机:当实体碰撞盒所在区域有方块时,服务端持续触发
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| entityId | str | 实体id |
| slowdownMultiX | float | 实体移速X方向的减速比例可在脚本层被修改 |
| slowdownMultiY | float | 实体移速Y方向的减速比例可在脚本层被修改 |
| slowdownMultiZ | float | 实体移速Z方向的减速比例可在脚本层被修改 |
| blockX | int | 方块位置x |
| blockY | int | 方块位置y |
| blockZ | int | 方块位置z |
| blockName | str | 方块的identifier包含命名空间及名称 |
| cancel | bool | 可由脚本层回传True给引擎阻止触发后续原版逻辑 |
- 返回值
- 备注
- 不是所有方块都会触发该事件需要在json中先配置触发开关详情参考<a href="../../../mcguide/20-玩法开发/15-自定义游戏内容/2-自定义方块/1-JSON组件.html">自定义方块JSON组件</a>
原版方块需要先通过RegisterOnEntityInside接口注册才能触发
- 如果需要修改slowdownMulti/cancel强烈建议与客户端事件同步修改避免出现客户端表现不一致等非预期现象。
- 如果要在脚本层修改slowdownMulti回传的一定要是浮点型例如需要赋值1.0而不是1
- 有任意slowdownMulti参数被传回非0值时生效减速比例
- slowdownMulti参数更像是一个Buff例如并不是立刻计算而是先保存在实体属性里延后计算、在已经有slowdownMulti属性的情况下会取最低的值、免疫掉落伤害等与原版蜘蛛网逻辑基本一致。
在零件中直接声明一个同名函数,即可完成监听,详情参考<a href="../../../mcguide/20-玩法开发/14-预设玩法编程/2-深入理解零件/0-零件开发.html#零件事件">零件事件</a>
### 相关接口
<span id="RegisterOnEntityInside"></span>
### RegisterOnEntityInside
method in mod.server.component.blockInfoCompServer.BlockInfoComponentServer
- 描述
可以动态注册与修改netease:on_entity_inside组件
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| blockName | str | 方块标识符包含命名空间如minecraft:grass |
| sendPythonEvent | bool | 是否发送python事件为True |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| bool | 是否注册成功 |
- 备注
- 目前仅能动态添加与修改原版方块的netease:on_entity_inside组件
- (非租赁服联机)使用服务端接口注册会影响到房主客户端组件
- 可以多次调用修改原组件的值删除组件请使用UnRegisterOnEntityInside接口
- 示例
```python
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateBlockInfo(levelId)
comp.RegisterOnEntityInside("minecraft:redstone_ore", True)
```
<span id="UnRegisterOnEntityInside"></span>
### UnRegisterOnEntityInside
method in mod.server.component.blockInfoCompServer.BlockInfoComponentServer
- 描述
可以动态删除netease:on_entity_inside组件
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| blockName | str | 方块标识符包含命名空间如minecraft:grass |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| bool | 是否删除成功 |
- 备注
- 目前仅能动态删除原版方块的netease:on_entity_inside组件
- (非租赁服联机)使用服务端接口注册会影响到房主客户端组件
- 示例
```python
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateBlockInfo(levelId)
comp.UnRegisterOnEntityInside("minecraft:redstone_ore")
```
## OnModBlockNeteaseEffectCreatedClientEvent
<span style="display:inline;color:#7575f9">客户端</span>
- 描述
自定义方块实体绑定的特效创建成功事件在自定义方块实体中绑定的特效创建成功时触发以及使用接口CreateFrameEffectForBlockEntity或CreateParticleEffectForBlockEntity为自定义方块实体添加特效成功时触发。
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| effectName | str | 创建成功的特效的自定义键值名称 |
| id | int | 该特效的id |
| effectType | int | 该特效的类型0为粒子特效1为序列帧特效 |
| blockPos | tuple(float,float,float) | 该特效绑定的自定义方块实体的世界坐标 |
- 返回值
在零件中直接声明一个同名函数,即可完成监听,详情参考<a href="../../../mcguide/20-玩法开发/14-预设玩法编程/2-深入理解零件/0-零件开发.html#零件事件">零件事件</a>
## OnStandOnBlockClientEvent
<span style="display:inline;color:#7575f9">客户端</span>
- 描述
触发时机:当实体站立到方块上时客户端持续触发
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| entityId | str | 实体id |
| dimensionId | int | 实体所在维度id |
| posX | float | 实体位置x |
| posY | float | 实体位置y |
| posZ | float | 实体位置z |
| motionX | float | 瞬时移动X方向的力 |
| motionY | float | 瞬时移动Y方向的力 |
| motionZ | float | 瞬时移动Z方向的力 |
| blockX | int | 方块位置x |
| blockY | int | 方块位置y |
| blockZ | int | 方块位置z |
| blockName | str | 方块的identifier包含命名空间及名称 |
| cancel | bool | 可由脚本层回传True给引擎阻止触发后续原版逻辑 |
- 返回值
- 备注
- 不是所有方块都会触发该事件需要在json中先配置触发开关详情参考<a href="../../../mcguide/20-玩法开发/15-自定义游戏内容/2-自定义方块/1-JSON组件.html">自定义方块JSON组件</a>
原版方块需要先通过RegisterOnStandOn接口注册才能触发
- 如果要在脚本层修改motion/cancel强烈建议配合OnStandOnBlockServerEvent服务端事件同步修改避免出现被服务端矫正等非预期现象
- 如果要在脚本层修改motion回传的一定要是浮点型例如需要赋值0.0而不是0
在零件中直接声明一个同名函数,即可完成监听,详情参考<a href="../../../mcguide/20-玩法开发/14-预设玩法编程/2-深入理解零件/0-零件开发.html#零件事件">零件事件</a>
### 相关接口
<span id="RegisterOnStandOn"></span>
### RegisterOnStandOn
method in mod.client.component.blockInfoCompClient.BlockInfoComponentClient
- 描述
可以动态注册与修改netease:on_stand_on组件
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| blockName | str | 方块标识符包含命名空间如minecraft:grass |
| sendPythonEvent | bool | 是否发送python事件为True |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| bool | 是否注册成功 |
- 备注
- 目前仅能动态添加与修改原版方块的netease:on_stand_on组件
- 游戏原版逻辑是不会跑方块客户端OnStandOn相关逻辑使用接口给原版方块添加客户端组件的话无论是否发送python事件都会使原版方块多跑客户端相关逻辑
例如粘液块这种会有一定物理计算的方块,在客户端多跑一次计算之后,会有手感上的差别。
- 可以多次调用修改原组件的值删除组件请使用UnRegisterOnStandOn接口
- 示例
```python
import mod.client.extraClientApi as clientApi
comp = clientApi.GetEngineCompFactory().CreateBlockInfo(levelId)
comp.RegisterOnStandOn("minecraft:redstone_ore", True)
```
<span id="UnRegisterOnStandOn"></span>
### UnRegisterOnStandOn
method in mod.client.component.blockInfoCompClient.BlockInfoComponentClient
- 描述
可以动态删除netease:on_stand_on组件
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| blockName | str | 方块标识符包含命名空间如minecraft:grass |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| bool | 是否删除成功 |
- 备注
- 目前仅能动态删除原版方块的netease:on_stand_on组件
- 示例
```python
import mod.client.extraClientApi as clientApi
comp = clientApi.GetEngineCompFactory().CreateBlockInfo(levelId)
comp.UnRegisterOnStandOn("minecraft:redstone_ore")
```
## OnStandOnBlockServerEvent
<span style="display:inline;color:#ff5555">服务端</span>
- 描述
触发时机:当实体站立到方块上时服务端持续触发
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| entityId | str | 实体id |
| dimensionId | int | 实体所在维度id |
| posX | float | 实体位置x |
| posY | float | 实体位置y |
| posZ | float | 实体位置z |
| motionX | float | 瞬时移动X方向的力 |
| motionY | float | 瞬时移动Y方向的力 |
| motionZ | float | 瞬时移动Z方向的力 |
| blockX | int | 方块位置x |
| blockY | int | 方块位置y |
| blockZ | int | 方块位置z |
| blockName | str | 方块的identifier包含命名空间及名称 |
| cancel | bool | 可由脚本层回传True给引擎阻止触发后续原版逻辑 |
- 返回值
- 备注
- 不是所有方块都会触发该事件需要在json中先配置触发开关详情参考<a href="../../../mcguide/20-玩法开发/15-自定义游戏内容/2-自定义方块/1-JSON组件.html">自定义方块JSON组件</a>
原版方块需要先通过RegisterOnStandOn接口注册才能触发
- 如果需要修改motion/cancel强烈建议配合客户端事件同步修改避免出现客户端表现不一致等现象
- 如果要在脚本层修改motion回传的一定要是浮点型例如需要赋值0.0而不是0
在零件中直接声明一个同名函数,即可完成监听,详情参考<a href="../../../mcguide/20-玩法开发/14-预设玩法编程/2-深入理解零件/0-零件开发.html#零件事件">零件事件</a>
### 相关接口
<span id="RegisterOnStandOn"></span>
### RegisterOnStandOn
method in mod.server.component.blockInfoCompServer.BlockInfoComponentServer
- 描述
可以动态注册与修改netease:on_stand_on组件
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| blockName | str | 方块标识符包含命名空间如minecraft:grass |
| sendPythonEvent | bool | 是否发送python事件为True |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| bool | 是否注册成功 |
- 备注
- 目前仅能动态添加与修改原版方块的netease:on_stand_on组件
- (非租赁服联机)使用服务端接口注册会影响到房主客户端组件
- 游戏原版逻辑是不会跑方块客户端OnStandOn相关逻辑使用接口给原版方块添加客户端组件的话无论是否发送python事件都会使原版方块多跑客户端相关逻辑
例如粘液块这种会有一定物理计算的方块,在客户端多跑一次计算之后,会有手感上的差别。
- 可以多次调用修改原组件的值删除组件请使用UnRegisterOnStandOn接口
- 示例
```python
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateBlockInfo(levelId)
comp.RegisterOnStandOn("minecraft:redstone_ore", True)
```
<span id="UnRegisterOnStandOn"></span>
### UnRegisterOnStandOn
method in mod.server.component.blockInfoCompServer.BlockInfoComponentServer
- 描述
可以动态删除netease:on_stand_on组件
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| blockName | str | 方块标识符包含命名空间如minecraft:grass |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| bool | 是否删除成功 |
- 备注
- 目前仅能动态删除原版方块的netease:on_stand_on组件
- (非租赁服联机)使用服务端接口注册会影响到房主客户端组件
- 示例
```python
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateBlockInfo(levelId)
comp.UnRegisterOnStandOn("minecraft:redstone_ore")
```
## PistonActionServerEvent
<span style="display:inline;color:#ff5555">服务端</span>
- 描述
触发时机:活塞或者粘性活塞推送/缩回影响附近方块时
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| cancel | bool | 是否允许触发默认为False若设为True可阻止触发后续的事件 |
| action | str | 推送时=expanding缩回时=retracting |
| pistonFacing | int | 活塞的朝向,参考[Facing枚举](../枚举值/Facing.md) |
| pistonMoveFacing | int | 活塞的运动方向,参考[Facing枚举](../枚举值/Facing.md) |
| dimensionId | int | 活塞方块所在的维度 |
| pistonX | int | 活塞方块的x坐标 |
| pistonY | int | 活塞方块的y坐标 |
| pistonZ | int | 活塞方块的z坐标 |
| blockList | list[(x,y,z),...] | 活塞运动影响到产生被移动效果的方块坐标(x,y,z)均为int类型 |
| breakBlockList | list[(x,y,z),...] | 活塞运动影响到产生被破坏效果的方块坐标(x,y,z)均为int类型 |
| entityList | list[string,...] | 活塞运动影响到产生被移动或被破坏效果的实体的ID列表 |
- 返回值
## PlayerTryDestroyBlockClientEvent
<span style="display:inline;color:#7575f9">客户端</span>
- 描述
当玩家即将破坏方块时客户端线程触发该事件。主要用于床旗帜箱子这些根据方块实体数据进行渲染的方块一般情况下请使用ServerPlayerTryDestroyBlockEvent
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| x | int | 方块x坐标 |
| y | int | 方块y坐标 |
| z | int | 方块z坐标 |
| face | int | 方块被敲击的面向id参考[Facing枚举](../枚举值/Facing.md) |
| blockName | str | 方块的identifier包含命名空间及名称 |
| auxData | int | 方块附加值 |
| playerId | str | 试图破坏方块的玩家ID |
| cancel | bool | 默认为False在脚本层设置为True就能取消该方块的破坏 |
- 返回值
在零件中直接声明一个同名函数,即可完成监听,详情参考<a href="../../../mcguide/20-玩法开发/14-预设玩法编程/2-深入理解零件/0-零件开发.html#零件事件">零件事件</a>
## ServerBlockEntityTickEvent
<span style="display:inline;color:#ff5555">服务端</span>
- 描述
触发时机自定义方块配置了netease:block_entity组件并设tick为true方块在玩家的模拟距离新建存档时可以设置默认为4个区块或者在tickingarea内的时候触发
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| blockName | str | 该方块名称 |
| dimension | int | 该方块所在的维度 |
| posX | int | 该方块的x坐标 |
| posY | int | 该方块的y坐标 |
| posZ | int | 该方块的z坐标 |
- 返回值
- 备注
- **方块实体的tick事件频率为每秒钟20次**
- 触发本事件时若正在退出游戏将无法获取到抛出本事件的方块实体数据GetBlockEntityData函数返回None也无法对其进行操作
## ServerBlockUseEvent
<span style="display:inline;color:#ff5555">服务端</span>
- 描述
触发时机玩家右键点击新版自定义方块或者通过接口AddBlockItemListenForUseEvent增加监听的MC原生游戏方块时服务端抛出该事件该事件tick执行需要注意效率问题
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| playerId | str | 玩家Id |
| blockName | str | 方块的identifier包含命名空间及名称 |
| aux | int | 方块附加值 |
| cancel | bool | 设置为True可拦截与方块交互的逻辑。 |
| x | int | 方块x坐标 |
| y | int | 方块y坐标 |
| z | int | 方块z坐标 |
| dimensionId | int | 维度id |
- 返回值
- 备注
- 当对原生方块进行使用时,如堆肥桶等类似有 使用 功能的方块使用物品时会触发该事件而ServerItemUseOnEvent则不会被触发。当需要获取触发时使用的物品时可以通过item组件获取手上有的物品。对应的客户端事件同理。
- 有的方块是在ServerBlockUseEvent中设置cancel生效但是有部分方块是在ClientBlockUseEvent中设置cancel才生效如有需求建议在两个事件中同时设置cancel以保证生效。
在零件中直接声明一个同名函数,即可完成监听,详情参考<a href="../../../mcguide/20-玩法开发/14-预设玩法编程/2-深入理解零件/0-零件开发.html#零件事件">零件事件</a>
### 相关接口
<span id="AddBlockItemListenForUseEvent"></span>
### AddBlockItemListenForUseEvent
method in mod.server.component.blockUseEventWhiteListCompServer.BlockUseEventWhiteListComponentServer
- 描述
增加blockName方块对ServerBlockUseEvent事件的脚本层监听
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| blockName | str | 方块名称格式namespace:name:auxvalue其中namespace:name:*匹配所有的auxvalue |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| bool | 是否增加成功 |
- 示例
```python
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateBlockUseEventWhiteList(levelId)
comp.AddBlockItemListenForUseEvent("minecraft:nether_brick_stairs:2")
# 注意blockName格式为namespace:name:auxvalue如果不填auxvalue则默认为0
# auxValue详细值详见官方wiki如https://minecraft-zh.gamepedia.com/楼梯 中的‘方块数据值’
```
<span id="RemoveBlockItemListenForUseEvent"></span>
### RemoveBlockItemListenForUseEvent
method in mod.server.component.blockUseEventWhiteListCompServer.BlockUseEventWhiteListComponentServer
- 描述
移除blockName方块对ServerBlockUseEvent事件的脚本层监听
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| blockName | str | 方块名称格式namespace:name:auxvalue其中namespace:name:*匹配所有的auxvalue |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| bool | 是否移除成功 |
- 示例
```python
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateBlockUseEventWhiteList(levelId)
comp.RemoveBlockItemListenForUseEvent("minecraft:nether_brick_stairs:2")
# 注意blockName格式为namespace:name:auxvalue如果不填auxvalue则默认为0
# auxValue详细值详见官方wiki如https://minecraft-zh.gamepedia.com/楼梯 中的‘方块数据值’
```
<span id="ClearAllListenForBlockUseEventItems"></span>
### ClearAllListenForBlockUseEventItems
method in mod.server.component.blockUseEventWhiteListCompServer.BlockUseEventWhiteListComponentServer
- 描述
清空所有已添加方块对ServerBlockUseEvent事件的脚本层监听
- 参数
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| bool | 是否清空成功 |
- 示例
```python
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateBlockUseEventWhiteList(levelId)
comp.ClearAllListenForBlockUseEventItems()
```
## ServerEntityTryPlaceBlockEvent
<span style="display:inline;color:#ff5555">服务端</span>
- 描述
触发时机:当生物试图放置方块时触发该事件。
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| x | int | 方块x坐标 |
| y | int | 方块y坐标 |
| z | int | 方块z坐标 |
| fullName | str | 方块的identifier包含命名空间及名称 |
| auxData | int | 方块附加值 |
| entityId | str | 试图放置方块的生物ID |
| dimensionId | int | 维度id |
| face | int | 点击方块的面,参考[Facing枚举](../枚举值/Facing.md) |
| cancel | bool | 默认为False在脚本层设置为True就能取消该方块的放置 |
- 返回值
- 备注
- 部分放置后会产生实体的方块、可操作的方块、带有特殊逻辑的方块,不会触发该事件,包括但不限于床、门、告示牌、花盆、红石中继器、船、炼药锅、头部模型、蛋糕、酿造台、盔甲架等。
在零件中直接声明一个同名函数,即可完成监听,详情参考<a href="../../../mcguide/20-玩法开发/14-预设玩法编程/2-深入理解零件/0-零件开发.html#零件事件">零件事件</a>
## ServerPlaceBlockEntityEvent
<span style="display:inline;color:#ff5555">服务端</span>
- 描述
触发时机:手动放置或通过接口创建含自定义方块实体的方块时触发,此时可向该方块实体中存放数据
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| blockName | str | 该方块名称 |
| dimension | int | 该方块所在的维度 |
| posX | int | 该方块的x坐标 |
| posY | int | 该方块的y坐标 |
| posZ | int | 该方块的z坐标 |
- 返回值
## ServerPlayerTryDestroyBlockEvent
<span style="display:inline;color:#ff5555">服务端</span>
- 描述
当玩家即将破坏方块时,服务端线程触发该事件。
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| x | int | 方块x坐标 |
| y | int | 方块y坐标 |
| z | int | 方块z坐标 |
| face | int | 方块被敲击的面向id参考[Facing枚举](../枚举值/Facing.md) |
| fullName | str | 方块的identifier包含命名空间及名称 |
| auxData | int | 方块附加值 |
| playerId | str | 试图破坏方块的玩家ID |
| dimensionId | int | 维度id |
| cancel | bool | 默认为False在脚本层设置为True就能取消该方块的破坏 |
| spawnResources | bool | 是否生成掉落物默认为True在脚本层设置为False就能取消生成掉落物 |
- 返回值
- 备注
- 若需要禁止某些特殊方块的破坏需要配合PlayerTryDestroyBlockClientEvent一起使用例如床旗帜箱子这些根据方块实体数据进行渲染的方块
在零件中直接声明一个同名函数,即可完成监听,详情参考<a href="../../../mcguide/20-玩法开发/14-预设玩法编程/2-深入理解零件/0-零件开发.html#零件事件">零件事件</a>
## ShearsDestoryBlockBeforeClientEvent
<span style="display:inline;color:#7575f9">客户端</span>
- 描述
触发时机:玩家手持剪刀破坏方块时,有剪刀特殊效果的方块会在客户端线程触发该事件
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| blockX | int | 方块位置x |
| blockY | int | 方块位置y |
| blockZ | int | 方块位置z |
| blockName | str | 方块的identifier包含命名空间及名称 |
| auxData | int | 方块附加值 |
| dropName | str | 触发剪刀效果的掉落物identifier包含命名空间及名称 |
| dropCount | int | 触发剪刀效果的掉落物数量 |
| playerId | str | 触发剪刀效果的玩家id |
| dimensionId | int | 玩家触发时的维度id |
| cancelShears | bool | 是否取消剪刀效果 |
- 返回值
- 备注
- 目前仅绊线会触发需要取消剪刀效果得配合ShearsDestoryBlockBeforeServerEvent同时使用
在零件中直接声明一个同名函数,即可完成监听,详情参考<a href="../../../mcguide/20-玩法开发/14-预设玩法编程/2-深入理解零件/0-零件开发.html#零件事件">零件事件</a>
## ShearsDestoryBlockBeforeServerEvent
<span style="display:inline;color:#ff5555">服务端</span>
- 描述
触发时机:玩家手持剪刀破坏方块时,有剪刀特殊效果的方块会在服务端线程触发该事件
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| blockX | int | 方块位置x |
| blockY | int | 方块位置y |
| blockZ | int | 方块位置z |
| blockName | str | 方块的identifier包含命名空间及名称 |
| auxData | int | 方块附加值 |
| dropName | str | 触发剪刀效果的掉落物identifier包含命名空间及名称 |
| dropCount | int | 触发剪刀效果的掉落物数量 |
| playerId | str | 触发剪刀效果的玩家id |
| dimensionId | int | 玩家触发时的维度id |
| cancelShears | bool | 是否取消剪刀效果 |
- 返回值
- 备注
- 该事件触发在ServerPlayerTryDestroyBlockEvent之后如果在ServerPlayerTryDestroyBlockEvent事件中设置了取消Destory或取消掉落物会导致该事件不触发
- 取消剪刀效果后不掉落任何东西的方块类型:蜘蛛网、枯萎的灌木、草丛、下界苗、树叶、海草、藤蔓
- 绊线取消剪刀效果需要配合ShearsDestoryBlockBeforeClientEvent同时使用否则在表现上可能展现出来的还是剪刀剪断后的效果。绊线取消剪刀效果后依然会掉落成线。
在零件中直接声明一个同名函数,即可完成监听,详情参考<a href="../../../mcguide/20-玩法开发/14-预设玩法编程/2-深入理解零件/0-零件开发.html#零件事件">零件事件</a>
## StartDestroyBlockClientEvent
<span style="display:inline;color:#7575f9">客户端</span>
- 描述
玩家开始挖方块时触发。创造模式下不触发。
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| pos | tuple(float,float,float) | 方块的坐标 |
| blockName | str | 方块的identifier包含命名空间及名称 |
| auxValue | int | 方块的附加值 |
| playerId | str | 玩家id |
| cancel | bool | 修改为True时可阻止玩家进入挖方块的状态。需要与StartDestroyBlockServerEvent一起修改。 |
- 返回值
- 备注
- 如果是隔着火焰挖方块即使将该事件cancel掉火焰也会被扑灭。如果要阻止火焰扑灭需要配合ExtinguishFireClientEvent使用
在零件中直接声明一个同名函数,即可完成监听,详情参考<a href="../../../mcguide/20-玩法开发/14-预设玩法编程/2-深入理解零件/0-零件开发.html#零件事件">零件事件</a>
## StartDestroyBlockServerEvent
<span style="display:inline;color:#ff5555">服务端</span>
- 描述
玩家开始挖方块时触发。创造模式下不触发。
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| pos | tuple(float,float,float) | 方块的坐标 |
| blockName | str | 方块的identifier包含命名空间及名称 |
| auxValue | int | 方块的附加值 |
| playerId | str | 玩家id |
| dimensionId | int | 维度id |
| cancel | bool | 修改为True时可阻止玩家进入挖方块的状态。需要与StartDestroyBlockClientEvent一起修改。 |
- 返回值
- 备注
- 如果是隔着火焰挖方块即使将该事件cancel掉火焰也会被扑灭。如果要阻止火焰扑灭需要配合ExtinguishFireServerEvent使用
在零件中直接声明一个同名函数,即可完成监听,详情参考<a href="../../../mcguide/20-玩法开发/14-预设玩法编程/2-深入理解零件/0-零件开发.html#零件事件">零件事件</a>
## StepOffBlockClientEvent
<span style="display:inline;color:#7575f9">客户端</span>
- 描述
触发时机:实体移动离开一个实心方块时触发
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| blockX | int | 方块x坐标 |
| blockY | int | 方块y坐标 |
| blockZ | int | 方块z坐标 |
| entityId | str | 触发的entity的唯一ID |
| blockName | str | 方块的identifier包含命名空间及名称 |
| dimensionId | int | 维度id |
- 返回值
- 备注
- 不是所有方块都会触发该事件自定义方块需要在json中先配置触发开关详情参考<a href="../../../mcguide/20-玩法开发/15-自定义游戏内容/2-自定义方块/1-JSON组件.html">自定义方块JSON组件</a>
原版方块需要先通过RegisterOnStepOff接口注册才能触发
- 压力板与绊线钩这种非实心方块不会触发
在零件中直接声明一个同名函数,即可完成监听,详情参考<a href="../../../mcguide/20-玩法开发/14-预设玩法编程/2-深入理解零件/0-零件开发.html#零件事件">零件事件</a>
### 相关接口
<span id="RegisterOnStepOff"></span>
### RegisterOnStepOff
method in mod.client.component.blockInfoCompClient.BlockInfoComponentClient
- 描述
可以动态注册与修改netease:on_step_off组件
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| blockName | str | 方块标识符包含命名空间如minecraft:grass |
| sendPythonEvent | bool | 是否发送python事件为True |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| bool | 是否注册成功 |
- 备注
- 目前仅能动态添加与修改原版方块的netease:on_step_off组件
- 可以多次调用修改原组件的值删除组件请使用UnRegisterOnStepOff接口
- 示例
```python
import mod.client.extraClientApi as clientApi
comp = clientApi.GetEngineCompFactory().CreateBlockInfo(levelId)
comp.RegisterOnStepOff("minecraft:redstone_ore", True)
```
<span id="UnRegisterOnStepOff"></span>
### UnRegisterOnStepOff
method in mod.client.component.blockInfoCompClient.BlockInfoComponentClient
- 描述
可以动态删除netease:on_step_off组件
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| blockName | str | 方块标识符包含命名空间如minecraft:grass |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| bool | 是否删除成功 |
- 备注
- 目前仅能动态删除原版方块的netease:on_step_off组件
- 示例
```python
import mod.client.extraClientApi as clientApi
comp = clientApi.GetEngineCompFactory().CreateBlockInfo(levelId)
comp.UnRegisterOnStepOff("minecraft:redstone_ore")
```
## StepOffBlockServerEvent
<span style="display:inline;color:#ff5555">服务端</span>
- 描述
触发时机:实体移动离开一个实心方块时触发
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| blockX | int | 方块x坐标 |
| blockY | int | 方块y坐标 |
| blockZ | int | 方块z坐标 |
| entityId | str | 触发的entity的唯一ID |
| blockName | str | 方块的identifier包含命名空间及名称 |
| dimensionId | int | 维度id |
- 返回值
- 备注
- 不是所有方块都会触发该事件自定义方块需要在json中先配置触发开关详情参考<a href="../../../mcguide/20-玩法开发/15-自定义游戏内容/2-自定义方块/1-JSON组件.html">自定义方块JSON组件</a>
原版方块需要先通过RegisterOnStepOff接口注册才能触发
- 压力板与绊线钩这种非实心方块不会触发
在零件中直接声明一个同名函数,即可完成监听,详情参考<a href="../../../mcguide/20-玩法开发/14-预设玩法编程/2-深入理解零件/0-零件开发.html#零件事件">零件事件</a>
### 相关接口
<span id="RegisterOnStepOff"></span>
### RegisterOnStepOff
method in mod.server.component.blockInfoCompServer.BlockInfoComponentServer
- 描述
可以动态注册与修改netease:on_step_off组件
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| blockName | str | 方块标识符包含命名空间如minecraft:grass |
| sendPythonEvent | bool | 是否发送python事件为True |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| bool | 是否注册成功 |
- 备注
- 目前仅能动态添加与修改原版方块的netease:on_step_off组件
- (非租赁服联机)使用服务端接口注册会影响到房主客户端组件
- 可以多次调用修改原组件的值删除组件请使用UnRegisterOnStepOff接口
- 示例
```python
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateBlockInfo(levelId)
comp.RegisterOnStepOff("minecraft:redstone_ore", True)
```
<span id="UnRegisterOnStepOff"></span>
### UnRegisterOnStepOff
method in mod.server.component.blockInfoCompServer.BlockInfoComponentServer
- 描述
可以动态删除netease:on_step_off组件
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| blockName | str | 方块标识符包含命名空间如minecraft:grass |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| bool | 是否删除成功 |
- 备注
- 目前仅能动态删除原版方块的netease:on_step_off组件
- (非租赁服联机)使用服务端接口注册会影响到房主客户端组件
- 示例
```python
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateBlockInfo(levelId)
comp.UnRegisterOnStepOff("minecraft:redstone_ore")
```
## StepOnBlockClientEvent
<span style="display:inline;color:#7575f9">客户端</span>
- 描述
触发时机:实体刚移动至一个新实心方块时触发。
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| cancel | bool | 是否允许触发默认为False若设为True可阻止触发后续原版逻辑 |
| blockX | int | 方块x坐标 |
| blockY | int | 方块y坐标 |
| blockZ | int | 方块z坐标 |
| entityId | str | 触发的entity的唯一ID |
| blockName | str | 方块的identifier包含命名空间及名称 |
| dimensionId | int | 维度id |
- 返回值
- 备注
- 在合并微软更新之后本事件触发时机与微软molang实验性玩法组件"minecraft:on_step_on"一致
- 压力板与绊线钩在过去的版本的事件是可以触发的但在更新后这种非实心方块并不会触发有需要的可以使用OnEntityInsideBlockClientEvent事件。
- 不是所有方块都会触发该事件自定义方块需要在json中先配置触发开关详情参考<a href="../../../mcguide/20-玩法开发/15-自定义游戏内容/2-自定义方块/1-JSON组件.html">自定义方块JSON组件</a>
原版方块需要先通过RegisterOnStepOn接口注册才能触发。原版的红石矿默认注册了但深层红石矿没有默认注册。
- 如果需要修改cancel强烈建议配合服务端事件同步修改避免出现被服务端矫正等非预期现象。
在零件中直接声明一个同名函数,即可完成监听,详情参考<a href="../../../mcguide/20-玩法开发/14-预设玩法编程/2-深入理解零件/0-零件开发.html#零件事件">零件事件</a>
### 相关接口
<span id="RegisterOnStepOn"></span>
### RegisterOnStepOn
method in mod.client.component.blockInfoCompClient.BlockInfoComponentClient
- 描述
可以动态注册与修改netease:on_step_on组件
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| blockName | str | 方块标识符包含命名空间如minecraft:grass |
| sendPythonEvent | bool | 是否发送python事件为True |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| bool | 是否注册成功 |
- 备注
- 目前仅能动态添加与修改原版方块的netease:on_step_on组件
- 示例
```python
import mod.client.extraClientApi as clientApi
comp = clientApi.GetEngineCompFactory().CreateBlockInfo(levelId)
comp.RegisterOnStepOn("minecraft:redstone_ore", True)
```
<span id="UnRegisterOnStepOn"></span>
### UnRegisterOnStepOn
method in mod.client.component.blockInfoCompClient.BlockInfoComponentClient
- 描述
可以动态删除netease:on_step_on组件
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| blockName | str | 方块标识符包含命名空间如minecraft:grass |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| bool | 是否删除成功 |
- 备注
- 目前仅能动态删除原版方块的netease:on_step_on组件
- 示例
```python
import mod.client.extraClientApi as clientApi
comp = clientApi.GetEngineCompFactory().CreateBlockInfo(levelId)
comp.UnRegisterOnStepOn("minecraft:redstone_ore")
```
## StepOnBlockServerEvent
<span style="display:inline;color:#ff5555">服务端</span>
- 描述
触发时机:实体刚移动至一个新实心方块时触发。
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| cancel | bool | 是否允许触发默认为False若设为True可阻止触发后续物理交互事件 |
| blockX | int | 方块x坐标 |
| blockY | int | 方块y坐标 |
| blockZ | int | 方块z坐标 |
| entityId | str | 触发的entity的唯一ID |
| blockName | str | 方块的identifier包含命名空间及名称 |
| dimensionId | int | 维度id |
- 返回值
- 备注
- 在合并微软更新之后本事件触发时机与微软molang实验性玩法组件"minecraft:on_step_on"一致
- 压力板与绊线钩在过去的版本的事件是可以触发的但在更新后这种非实心方块并不会触发有需要的可以使用OnEntityInsideBlockServerEvent事件。
- 不是所有方块都会触发该事件自定义方块需要在json中先配置触发开关详情参考<a href="../../../mcguide/20-玩法开发/15-自定义游戏内容/2-自定义方块/1-JSON组件.html">自定义方块JSON组件</a>
原版方块需要先通过RegisterOnStepOn接口注册才能触发。原版的红石矿默认注册了但深层红石矿没有默认注册。
- 如果需要修改cancel强烈建议配合客户端事件同步修改避免出现客户端表现不一致等非预期现象。
在零件中直接声明一个同名函数,即可完成监听,详情参考<a href="../../../mcguide/20-玩法开发/14-预设玩法编程/2-深入理解零件/0-零件开发.html#零件事件">零件事件</a>
### 相关接口
<span id="RegisterOnStepOn"></span>
### RegisterOnStepOn
method in mod.server.component.blockInfoCompServer.BlockInfoComponentServer
- 描述
可以动态注册与修改netease:on_step_on组件
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| blockName | str | 方块标识符包含命名空间如minecraft:grass |
| sendPythonEvent | bool | 是否发送python事件为True |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| bool | 是否注册成功 |
- 备注
- 目前仅能动态添加与修改原版方块的netease:on_step_on组件
- (非租赁服联机)使用服务端接口注册会影响到房主客户端组件
- 示例
```python
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateBlockInfo(levelId)
comp.RegisterOnStepOn("minecraft:redstone_ore", True)
```
<span id="UnRegisterOnStepOn"></span>
### UnRegisterOnStepOn
method in mod.server.component.blockInfoCompServer.BlockInfoComponentServer
- 描述
可以动态删除netease:on_step_on组件
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| blockName | str | 方块标识符包含命名空间如minecraft:grass |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| bool | 是否删除成功 |
- 备注
- 目前仅能动态删除原版方块的netease:on_step_on组件
- (非租赁服联机)使用服务端接口注册会影响到房主客户端组件
- 示例
```python
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateBlockInfo(levelId)
comp.UnRegisterOnStepOn("minecraft:redstone_ore")
```