跳到主要内容

开发者 API

CloudCosmetics 就是通过这套 API 使用云模型的,你的插件也可以。

引入​

把 CloudModel-<版本>.jar 加为 compileOnly 依赖(不要打包进你的插件),并在 plugin.yml 声明:

softdepend: [CloudModel]

快速示例​

import com.cloudplugins.cloudmodel.api.CloudModelAPI;
import com.cloudplugins.cloudmodel.api.ModelHandle;
import com.cloudplugins.cloudmodel.api.ModelOptions;

if (CloudModelAPI.isReady() && CloudModelAPI.hasModel("wings")) {
ModelHandle h = CloudModelAPI.attach(player, "wings", ModelOptions.defaults()
.autoStates(false) // 不自动播放 idle / walk
.hideBase(false) // 不隐藏玩家本体
.visibleByDefault(false) // 先对所有人隐藏
.yaw(() -> smoothYaw) // 自定义朝向(在渲染线程调用)
.offset(() -> new Vector3f(0, 0, 0.2f)));
h.setVisible(viewer, true);
h.playAnimation("idle", 3, 3, 1f, true);
// ...
h.remove();
}

CloudModelAPI​

全部方法在主线程调用。

方法说明
isReady()模型是否已读取完成
hasModel(id) / modelIds()模型是否存在 / 全部模型 ID
attach(entity, id, options)挂上模型,模型不存在返回 null;同一实体重复挂同一模型会取代旧的
get(entity, id) / getAll(entity)取得实体上的模型
detach(entity, id)移除模型,id = null 代表全部;返回移除数量

ModelOptions​

方法默认说明
scale(float)1大小
autoStates(boolean)true自动播放 idle / walk / spawn / death
hideBase(Boolean)依配置隐藏原本的实体(隐形 + 隐藏装备)
persist(boolean)false存进实体数据,区块重载、重启后自动套回
lockPitch(boolean)false不跟随实体的上下视角
hurtTint(boolean)—受伤泛红
deathAnimation(boolean)true实体死亡时播放 death 动画
selfVisible(boolean)—实体是玩家时,自己是否看得到
visibleByDefault(boolean)truefalse = 默认所有人看不到,用 setVisible 逐个开启
yaw(Supplier<Float>)跟随身体自定义朝向(度),在渲染线程调用
offset(Supplier<Vector3f>)无本地坐标偏移(格):+x 右、+y 上、+z 后,在渲染线程调用
inheritDisplay(Boolean)依配置底座是展示实体时继承它的变换、朝向、插值与亮度;null = 看 render.inherit-display(1.0.3 起)

ModelHandle​

方法可以在主线程调用,会排进渲染队列,不会卡主线程。

方法说明
playAnimation(name, lerpIn, lerpOut, speed, loop)播放动画;loop 为 null 使用 Blockbench 设定,true 强制循环,false 播放一次
stopAnimation(name, immediate) / stopAllAnimations()停止动画
isPlaying(name) / animations()是否在播放 / 模型的全部动画
setVisible(viewer, visible)对个别玩家显示 / 隐藏
setBoneVisible(bone, visible)显示 / 隐藏骨骼(含子骨骼)
setBrightness(bone, block, sky)亮度,bone = null 代表整个模型
setTint(bone, color)染色,color = null 还原
setScale(float) / scale()大小
remove()移除模型(不影响原本的实体)
entityIds()客户端 display 的实体 ID(只存在于封包)