ArcartXPlayer:玩家管理对象
ArcartX玩家管理对象API
ArcartXPlayer
ArcartXPlayer继承自ArcartXEntity,是ArcartX对玩家的完整管理对象。- 通过
ArcartXAPI.getEntityManager().getPlayer(player)获取。 - 除了继承自
ArcartXEntity的所有方法外,还提供了大量玩家专属功能。 - 本类的方法分为两种发送模式:
- 点对点 — 仅向该玩家自身的客户端发送数据包(如相机、着色器、特效等)
- 广播 — 向所有能看到该玩家的客户端发送数据包(如模型、控制器、状态、额外模型、时装、变体、动画包等)
模型管理、动画控制(setState / setController)、额外模型、时装、模型变体、动画包等方法是广播模式,会同步给所有能看到该玩家的客户端。相机、着色器、天空盒、特效等方法是点对点模式,仅发送给该玩家自身。
公开属性
ArcartXPlayer 自身声明的公开属性如下(继承自父类的属性见 ArcartXEntity 页):
player: Player — 该对象对应的 Bukkit 玩家实例(构造时传入,只读)encryptor: AESEncryptor? — 与客户端通信使用的 AES 加密器,可能为 nullkey: String? — 通信密钥,可能为 nullalt: boolean — 是否为小号(alt)客户端标记callbacks: Map<String, CallBack> — 回调映射表,用于客户端异步回调crc64: Set<Long> — 已发送资源的 CRC64 校验集合area: Area? — 玩家当前所处的区域,可能为 nullplayerModel: String — 当前玩家模型ID(只读,通过 setModel 更新)playerModelScale: double — 当前玩家模型缩放比例(只读)variant: PlayerModelVariant — 当前玩家模型变体(只读,DEFAULT_BBMODEL / CUSTOM_BBMODEL)animationPackId: String — 当前玩家动画包ID(只读,空字符串表示无)sentResource: boolean — 是否已向该玩家发送资源jumpTime: long — 上一次跳跃的时间戳
模型管理
setModel(modelID, scale)
- 设置玩家模型,会触发
PlayerModelUpdateEvent事件,并向所有能看到该玩家的其他玩家广播模型变更 - 重写自
ArcartXEntity.setModel,额外记录playerModel/playerModelScale并派发玩家专属事件
- 参数:
modelID: String — 模型IDscale: double — 模型缩放比例
- 返回值:无
- 调用示例
removeModel()
- 移除玩家模型,恢复默认外观,并重置
playerModel与playerModelScale - 重写自
ArcartXEntity.removeModel
- 参数:无
- 返回值:无
- 调用示例
setDefaultModel(scale)
- 将玩家模型设置为默认玩家模型(
__default_player__),并将变体切换为DEFAULT_BBMODEL - 会触发
PlayerVariantChangeEvent事件(若被取消则不生效),并广播变体变更 DEFAULT_BBMODEL变体会叠加原版附属物(盔甲/披风/鞘翅/时装)
- 参数:
scale: double — 模型缩放比例(默认 1.0) - 返回值:无
- 调用示例
setCustomModel(modelID, scale)
- 将玩家模型设置为自定义模型,并将变体切换为
CUSTOM_BBMODEL - 会触发
PlayerVariantChangeEvent事件(若被取消则不生效),并广播变体变更
- 参数:
modelID: String — 模型IDscale: double — 模型缩放比例(默认 1.0)
- 返回值:无
- 调用示例
tryModel(modelID, scale, time)
- 临时将玩家模型切换为指定模型,持续
time毫秒后自动恢复为原本的playerModel - 不会修改
playerModel记录,也不会触发变体/模型事件(仅底层临时切换)
- 参数:
modelID: String — 临时模型IDscale: double — 模型缩放比例time: long — 临时持续时间(毫秒),到时后恢复原模型
- 返回值:无
- 调用示例
addExtraModel(locator, modelID)
- 为玩家添加额外模型,挂载在指定定位器上
- 参数:
locator: String — 定位器名称modelID: String — 模型ID
- 返回值:无
- 调用示例
removeExtraModel(locator)
- 移除玩家指定定位器上的额外模型
- 参数:
locator: String — 定位器名称 - 返回值:无
- 调用示例
clearExtraModels()
- 清除玩家所有额外模型
- 参数:无
- 返回值:无
- 调用示例
时装管理
时装为运行时内存态(不落库)。CostumeSlot 枚举可选值:HEAD / BODY / LEGS / FEET / DECORATION。装备套装(equipSuit)与装备单件(equipCostume)互斥:装备套装会清空单件槽位,装备单件会清除套装。相关操作会触发 PlayerCostumeChangeEvent 事件,若事件被取消则不生效。
equipSuit(modelID, hide)
- 为玩家装备整套时装,并清空所有单件时装槽位
- 参数:
modelID: String — 时装套装模型IDhide: boolean — 是否隐藏原版对应部位(默认 true)
- 返回值:无
- 调用示例
equipCostume(slot, modelID, hide)
- 为玩家在指定槽位装备单件时装,并清除已装备的套装
- 参数:
slot: CostumeSlot — 时装槽位(HEAD / BODY / LEGS / FEET / DECORATION)modelID: String — 时装模型IDhide: boolean — 是否隐藏原版对应部位(默认 false)
- 返回值:无
- 调用示例
removeCostume(slot)
- 移除玩家指定槽位的单件时装
- 参数:
slot: CostumeSlot — 时装槽位 - 返回值:无
- 调用示例
clearCostume()
- 清除玩家所有时装(套装与单件槽位)
- 参数:无
- 返回值:无
- 调用示例
动画控制
setAnimationPack(packId)
- 为玩家设置动画包,会触发
PlayerAnimationPackChangeEvent事件(若被取消则不生效),并广播给观察者
- 参数:
packId: String — 动画包ID - 返回值:无
- 调用示例
clearAnimationPack()
- 清除玩家的动画包(将
animationPackId置空),会触发PlayerAnimationPackChangeEvent事件(若被取消则不生效)
- 参数:无
- 返回值:无
- 调用示例
playFirstPersonAnimationByTime(animation, speed, keepTime)
- 为玩家播放第一人称动画,按持续时间控制
- 参数:
animation: String — 动画名称speed: double — 播放速度keepTime: int — 持续时间(毫秒)
- 返回值:无
- 调用示例
playFirstPersonAnimationByCountOf(animation, speed, count)
- 为玩家播放第一人称动画,按播放次数控制
- 参数:
animation: String — 动画名称speed: double — 播放速度count: int — 播放次数
- 返回值:无
- 调用示例
setState(controller, state)
- 设置玩家动作控制器的状态
- 参数:
controller: String — 控制器名称state: String — 状态名称
- 返回值:无
- 调用示例
setState(controller, state, speed)
- 设置玩家动作控制器的状态,指定播放速度
- 参数:
controller: String — 控制器名称state: String — 状态名称speed: double — 播放速度
- 返回值:无
- 调用示例
setState(controller, state, speed, moveBreak)
- 设置玩家动作控制器的状态,指定播放速度和移动打断时间
- 参数:
controller: String — 控制器名称state: String — 状态名称speed: double — 播放速度moveBreak: long — 移动打断时间(毫秒),-1为不打断
- 返回值:无
- 调用示例
setController(controller)
- 为玩家设置动作控制器
- 参数:
controller: String — 控制器配置ID - 返回值:无
- 调用示例
飞行状态
updateFlyingState()
- 轮询检测玩家飞行态,若相比上次发生变化则按 seenBy 广播给观察者
- 用于同步飞行态(原版不会向其他玩家同步 abilities.flying),一般由内部每 tick 调用
- 参数:无
- 返回值:无
- 调用示例
相机控制
setThirdPerson(enable)
- 将玩家设置为第三人称视角
- 参数:
enable: boolean — true 设置为第三人称,false 设置为第一人称 - 返回值:无
- 调用示例
setViewLock(enable)
- 设置视角锁定开关(开启时锁定为第三人称,关闭时解除锁定)
- 等价于
setViewLockMode,enable 为 true 时使用模式 2,false 时使用模式 0
- 参数:
enable: boolean — true 锁定视角,false 解除锁定 - 返回值:无
- 调用示例
setViewLockMode(mode)
- 设置视角锁定模式
- 参数:
mode: int — 锁定模式(0-关闭,1-强制锁定第一人称,2-强制锁定第三人称) - 返回值:无
- 调用示例
setCameraFromPreset(id)
- 从预设配置设置玩家相机
- 参数:
id: String — 相机预设配置ID - 返回值:无
- 调用示例
setCameraLocation(offsetX, offsetY, offsetZ, freeView)
- 设置玩家相机的偏移位置
- 参数:
offsetX: double — X轴偏移offsetY: double — Y轴偏移offsetZ: double — Z轴偏移freeView: boolean — 是否允许自由视角
- 返回值:无
- 调用示例
startSceneCamera(sceneId)
- 开始播放场景相机
- 参数:
sceneId: String — 场景相机配置ID - 返回值:无
- 调用示例
stopSceneCamera()
- 停止场景相机播放
- 参数:无
- 返回值:无
- 调用示例
着色器与天空盒
enableShader(shader)
- 为玩家启用后处理着色器
- 参数:
shader: String — 着色器名称 - 返回值:无
- 调用示例
disableShader()
- 关闭玩家的着色器效果
- 参数:无
- 返回值:无
- 调用示例
setSkyTexture(texturePath, forceNoCloud)
- 为玩家设置自定义天空盒贴图
- 参数:
texturePath: String — 天空盒贴图资源路径forceNoCloud: boolean — 是否强制隐藏云层
- 返回值:无
- 调用示例
clearSkyTexture()
- 清除玩家的自定义天空盒,恢复默认天空
- 参数:无
- 返回值:无
- 调用示例
setClientTitle(text)
- 设置玩家客户端的标题文本
- 参数:
text: String — 标题文本 - 返回值:无
- 调用示例
特效
以下特效方法均为点对点发送,仅发送给该玩家自身的客户端。如果你需要让周围所有玩家都看到特效,请使用 ArcartXEffectManager 的范围广播方法。
spawnBedrockParticle(identifier, particleID, effectPosition)
- 在玩家客户端生成基岩粒子效果
- 参数:
identifier: String — 粒子标识符particleID: String — 粒子IDeffectPosition: EffectPosition — 特效位置
- 返回值:无
- 调用示例
存在一个已弃用的旧重载 spawnBedrockParticle(id, x, y, z, yaw, pitch)(@Deprecated),请改用上面的 spawnBedrockParticle(identifier, particleID, effectPosition)。
与 ArcartXEffectManager.spawnBedrockParticle 的区别:
ArcartXPlayer.spawnBedrockParticle— 点对点,仅该玩家自身可见ArcartXEffectManager.Entity.spawnBedrockParticle— 范围广播,所有能看到该实体的玩家可见ArcartXEffectManager.World.spawnBedrockParticle— 范围广播,指定位置128格内所有玩家可见
选择哪个取决于你的需求:如果粒子只需要一个玩家看到,用Player版本;如果需要所有人看到(如技能特效),用EffectManager版本。
addWorldTexture(id, builder, effectPosition)
- 在玩家客户端添加世界贴图
- 参数:
id: String — 贴图唯一标识builder: WorldTextureBuilder — 贴图构建器effectPosition: EffectPosition — 特效位置
- 返回值:无
- 调用示例
与 ArcartXEffectManager.spawnWorldTextureEffect 的区别:
ArcartXPlayer.addWorldTexture— 点对点,仅该玩家自身可见ArcartXEffectManager.spawnWorldTextureEffect— 范围广播,周围所有玩家可见
removeWorldTexture(id)
- 移除玩家客户端的世界贴图
- 参数:
id: String — 贴图唯一标识 - 返回值:无
- 调用示例
playBlockAnimation(x, y, z, animation, speed, transitionTime, keepTime)
- 在玩家客户端播放方块动画
- 参数:
xyz: int — 方块坐标animation: String — 动画名称speed: double — 播放速度transitionTime: int — 过渡时间(毫秒)keepTime: long — 持续时间(毫秒)
- 返回值:无
- 调用示例
spawnHammerCrackEffect(x, y, z, radius, depth, in, keep, out, mode)
- 在玩家客户端生成锤击裂纹特效
- 参数:
xyz: int — 中心坐标radius: float — 裂纹半径depth: float — 裂纹深度in: int — 淡入时间(毫秒)keep: int — 保持时间(毫秒)out: int — 淡出时间(毫秒)mode: int — 裂纹模式
- 返回值:无
- 调用示例
伤害显示
addDamageDisplay(damageDisplayConfigId, x, y, z, damage)
- 在指定坐标为玩家显示伤害数字
- 参数:
damageDisplayConfigId: String — 伤害显示配置IDxyz: double — 显示坐标damage: double — 伤害数值
- 返回值:无
- 调用示例
addDamageDisplay(damageDisplayConfigId, target, damage)
- 在目标实体位置为玩家显示伤害数字
- 参数:
damageDisplayConfigId: String — 伤害显示配置IDtarget: Entity — 目标实体damage: double — 伤害数值
- 返回值:无
- 调用示例
与 ArcartXEntity.broadcastDamageDisplay 的区别:
ArcartXPlayer.addDamageDisplay— 点对点,仅该玩家自身可见ArcartXEntity.broadcastDamageDisplay— 范围广播,所有能看到该实体的玩家可见ArcartXEntity.sendDamageDisplayToPlayers— 指定列表,仅列表中的玩家可见
路标管理
addWayPoint(id, title, waypointConfigId, x, y, z)
- 为玩家添加一个路标
- 参数:
id: String — 路标唯一标识title: String — 路标显示标题waypointConfigId: String — 路标配置IDxyz: double — 路标坐标
- 返回值:无
- 调用示例
deleteWayPoint(id, regex)
- 删除玩家的路标
- 参数:
id: String — 路标标识regex: boolean — 是否使用正则匹配(默认false)
- 返回值:无
- 调用示例
clearWayPoint()
- 清除玩家的所有路标
- 参数:无
- 返回值:无
- 调用示例
额外槽位管理
setSlotItemStack(slotID, itemStack)
- 设置额外槽位的物品,同时更新数据库、客户端显示,并触发
PlayerExtraSlotUpdateEvent事件和更新脚本
- 参数:
slotID: String — 槽位IDitemStack: ItemStack — 物品
- 返回值:无
- 调用示例
setSlotItemStackOnlyClient(slotID, itemStack)
- 仅更新客户端显示的槽位物品,不写入数据库
- 参数:
slotID: String — 槽位IDitemStack: ItemStack — 物品
- 返回值:无
- 调用示例
removeSlotItemStackOnlyClient(slotID, startWith)
- 仅从客户端移除槽位物品显示
- 参数:
slotID: String — 槽位IDstartWith: boolean — 是否匹配以该ID开头的所有槽位
- 返回值:无
- 调用示例
getSlotItemStack(slotID)
- 获取额外槽位中的物品
- 参数:
slotID: String — 槽位ID - 返回值:
ItemStack?— 物品对象,可能为null - 调用示例
syncSlotCacheToClient()
- 将所有槽位缓存同步到客户端,通常在玩家重新连接时使用
- 参数:无
- 返回值:无
- 调用示例
物品冷却
setTagCooldown(tag, time)
- 设置物品冷却标签的冷却时间
- 参数:
tag: String — 冷却标签time: long — 冷却时间(毫秒)
- 返回值:无
- 调用示例
getTagCooldown(tag)
- 获取物品冷却标签的剩余冷却时间
- 参数:
tag: String — 冷却标签 - 返回值:
long— 剩余冷却时间(毫秒),0表示已冷却完毕 - 调用示例
音效
playSoundForSelf(resourcePath, soundCategory, pitch, keepTime)
- 为玩家自身播放音效
- 参数:
resourcePath: String — 音效资源路径soundCategory: String — 音效类别pitch: float — 音调keepTime: int — 持续时间(毫秒)
- 返回值:无
- 调用示例
其他功能
sendCustomPacket(id, data...)
- 向玩家客户端发送自定义数据包
- 参数:
id: String — 数据包IDdata: String... — 数据内容(可变参数)
- 返回值:无
- 调用示例
parseAria(code)
- 在玩家客户端执行Aria脚本代码
- 参数:
code: String — Aria脚本代码 - 返回值:无
- 调用示例
sendChatCard(cardID, cardData)
- 向玩家发送聊天卡片消息
- 参数:
cardID: String — 卡片配置IDcardData: Map<String, String> — 卡片数据
- 返回值:无
- 调用示例
