开发者 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) | true | false = 默认所有人看不到,用 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(只存在于封包) |