跳转至

特效接口

本页列出中国版模组SDK中与粒子特效、序列帧特效、文字面板及后处理效果相关的客户端接口。这些接口均在客户端可用,服务端无法直接创建或控制特效,通常需通过事件通知客户端后在客户端执行。接口域总览入口见中国版ModAPI接口域索引

与国际版脚本API分开使用

本页接口属于中国版Python模组SDK客户端体系,与国际版@minecraft/server脚本API无关。粒子效果的资源文件定义(.json粒子文件)可与附加包共用,但接口调用方式不同。

粒子特效

粒子特效通过ClientSystem实例的CreateEngineParticle方法创建,返回particleEntityId作为后续组件操作的目标。粒子创建后默认处于停止状态,需调用ParticleControlComp.Play()播放。

创建与销毁

接口 参数 返回值 说明
CreateEngineParticle(path,pos) 客户端 path:strpos:tuple(float,float,float) intNone 创建粒子特效,path为资源路径(含扩展名,如effects/fire.json);返回particleEntityId。粒子创建后需调用Play()播放。
DestroyEntity(particleEntityId) 客户端 particleEntityId:int 销毁粒子特效实体,释放资源。

绑定(CreateParticleEntityBind

将粒子绑定到实体,粒子会跟随实体移动。通过GetEngineCompFactory().CreateParticleEntityBind(particleEntityId)获取组件。

接口 参数 返回值 说明
Bind(bindEntityId,offset,rot,correction,isClientEntity) 客户端 bindEntityId:stroffset:tuple(float,float,float)rot:tuple(float,float,float)correction:boolisClientEntity:bool bool 将粒子绑定到实体脚下中心点,附加偏移量和旋转角度。correction开启后旋转角度以玩家为参照。isClientEntityTrue时用于绑定客户端实体。

骨骼绑定(CreateParticleSkeletonBind

将粒子绑定到骨骼模型的指定骨骼节点。通过GetEngineCompFactory().CreateParticleSkeletonBind(particleEntityId)获取组件。

接口 参数 返回值 说明
Bind(modelId,boneName,offset,rot) 客户端 modelId:intboneName:stroffset:tuple(float,float,float)rot:tuple(float,float,float) bool 将粒子绑定到骨骼模型的指定骨骼,modelId来自模型组件的GetModelId()

控制(CreateParticleControl

控制粒子的播放、停止和位置。通过GetEngineCompFactory().CreateParticleControl(particleEntityId)获取组件。

接口 参数 返回值 说明
Play() 客户端 播放粒子特效。若粒子位于非当前维度,同时更新粒子所属维度。
Stop() 客户端 停止粒子特效播放。
Pause() 客户端 暂停粒子特效播放,可通过Play()继续。
SetPos(pos) 客户端 pos:tuple(float,float,float) 设置粒子在世界中的位置。
SetRot(rot) 客户端 rot:tuple(float,float,float) 设置粒子的旋转角度。
SetLayer(layer) 客户端 layer:int bool 设置粒子渲染图层,影响半透明粒子的渲染顺序。
import mod.client.extraClientApi as clientApi

class MyClientSystem(clientApi.GetClientSystemCls()):
    def SpawnFireEffect(self, pos):
        particleEntityId = self.CreateEngineParticle("effects/fire.json", pos)
        if particleEntityId is None:
            return
        controlComp = clientApi.GetEngineCompFactory().CreateParticleControl(particleEntityId)
        controlComp.Play()

    def BindParticleToPlayer(self, particleEntityId, playerId):
        bindComp = clientApi.GetEngineCompFactory().CreateParticleEntityBind(particleEntityId)
        bindComp.Bind(playerId, (0, 1.5, 0), (0, 0, 0))

序列帧特效

序列帧特效与粒子特效的操作模式相同:通过ClientSystem.CreateEngineSfx创建,获取sfxEntityId,再通过各组件控制。序列帧特效是平面纹理动画,适合爆炸、烟雾、闪光等效果。

创建(ClientSystem方法)

接口 参数 返回值 说明
CreateEngineSfx(path,pos,rot,scale) 客户端 path:strpos:tuple(float,float,float)rot:tuple(float,float,float)scale:float intNone 创建序列帧特效,path为序列帧JSON资源路径;返回sfxEntityId
CreateEngineSfxFromMs(path,pos,rot,scale) 客户端 path:strpos:tuple(float,float,float)rot:tuple(float,float,float)scale:float intNone 创建微软粒子(基于minecraft:particle_emitter格式)序列帧特效。

绑定

CreateFrameAniEntityBind(sfxEntityId):绑定到实体。CreateFrameAniSkeletonBind(sfxEntityId):绑定到骨骼模型骨骼节点。接口签名与粒子绑定相同,详见粒子特效绑定

控制(CreateFrameAniControl

通过GetEngineCompFactory().CreateFrameAniControl(sfxEntityId)获取组件,接口与粒子控制组件相同(Play()Stop()Pause()SetPos()SetRot()SetLayer())。

文字面板

文字面板用于在世界空间中显示悬浮文字,可绑定实体跟随移动。通过GetEngineCompFactory().CreateTextBoard(levelId)获取TextBoardComponentClient实例。

接口 参数 返回值 说明
CreateTextBoardInWorld(text,textColor,boardColor,faceCamera) 客户端 text:strtextColor:tuple(float,float,float,float)boardColor:tuple(float,float,float,float)NonefaceCamera:bool intNone 在世界中创建文字面板,textColorboardColorRGBA值(范围0到1);返回boardId,创建失败返回None
RemoveTextBoard(boardId) 客户端 boardId:int bool 删除指定文字面板,释放资源。
SetBoardText(boardId,text) 客户端 boardId:inttext:str bool 更新文字面板的显示文字内容。
SetBoardPos(boardId,pos) 客户端 boardId:intpos:tuple(float,float,float) bool 设置文字面板的世界坐标位置。
SetBoardBackgroundColor(boardId,color) 客户端 boardId:intcolor:tuple(float,float,float,float) bool 设置文字面板背景颜色,RGBA值范围0到1。
SetBoardTextColor(boardId,color) 客户端 boardId:intcolor:tuple(float,float,float,float) bool 设置文字面板文字颜色,RGBA值范围0到1。
BindEntityToBoard(boardId,entityId,offset) 客户端 boardId:intentityId:stroffset:tuple(float,float,float) bool 将文字面板绑定到实体,面板随实体移动;offset为相对于实体的偏移量。
UnBindEntityToBoard(boardId) 客户端 boardId:int bool 解除文字面板与实体的绑定。
SetBoardDepthTest(boardId,enable) 客户端 boardId:intenable:bool bool 设置文字面板是否进行深度测试,关闭后面板始终显示在其他物体之上。
import mod.client.extraClientApi as clientApi

levelId = clientApi.GetLevelId()
textBoardComp = clientApi.GetEngineCompFactory().CreateTextBoard(levelId)

# 在世界坐标创建文字面板
boardId = textBoardComp.CreateTextBoardInWorld(
    "Hello World",
    (1.0, 1.0, 1.0, 1.0),  # 白色文字
    (0.0, 0.0, 0.0, 0.8),  # 半透明黑色背景
    True                    # 始终朝向摄像机
)

if boardId is not None:
    # 绑定到玩家头顶
    playerId = clientApi.GetLocalPlayerId()
    textBoardComp.BindEntityToBoard(boardId, playerId, (0, 2.5, 0))

后处理效果

后处理效果接口位于接口\后处理目录,包含渐晕、模糊、色彩分级、镜头效果与完全自定义后处理管线,均为客户端接口。通过对应组件工厂创建后处理组件实例后调用。

组件 创建方法 主要接口 说明
渐晕 CreatePostProcess(levelId) + 渐晕类 SetVignetteIntensity(intensity)SetVignetteStart(start) 屏幕边缘渐暗效果。
模糊 CreatePostProcess(levelId) + 模糊类 SetBlurRadius(radius) 全屏或局部模糊效果。
色彩分级 CreatePostProcess(levelId) + 色彩类 SetColorMatrix(matrix) 全屏色彩矩阵变换。
镜头效果 CreatePostProcess(levelId) + 镜头类 SetLensFlare(enable) 镜头光晕、色差等光学效果。
自定义 CreatePostProcess(levelId) + 自定义类 SetCustomShader(path) 自定义GLSL/HLSL着色器后处理管线。

后处理接口依赖平台支持

部分后处理效果在低端设备或关闭高级图形设置时不会生效。建议通过GetPlatform()和设备性能检测决定是否启用后处理。