
GeckoLib 玩家兼容
让玩家可以应用geckolib动画
GeckoLib Player Compat
GeckoLib Player Compat 是一个用于将 GeckoLib 动画应用于原版玩家模型的库。它会为每位玩家维护动画状态,并将其从服务器同步到追踪的客户端,同时允许每个模组提供并使用自己的动画资源。
功能特性
- 将 GeckoLib 骨骼变换应用于原版玩家模型,同时保留皮肤覆盖层。
- 为每位玩家提供独立的姿态(pose)和动作(action)通道。激活的动作优先于姿态。
- 将权威状态存储在玩家附件(attachment)中,并同步至玩家本人及所有追踪客户端。
- 默认使用共享的
geckolib_player:player模型,支持为单个动作提供可选的模型覆盖。 - 允许动画通过数据驱动的锁定文件,抑制所选基础身体部位的默认原版变换。
动画资源
所有常规玩家动画均使用随附的玩家几何模型:
assets/geckolib_player/geckolib/models/player.geo.json
将每个模组的动画文件放置在其自身的命名空间中:
assets/examplemod/geckolib/animations/player_combat.animation.json
该文件被引用为 examplemod:player_combat。
您可以使用 BlockBench 与 GeckoLib Models & Animations 插件来创建和导出动画。
Java API
将 GeckoLib Player Compat 声明为必需依赖,并在调用前注册每个姿态和动作。注册可使动画在 GeckoLib 中可用,并允许服务器验证调用。
import com.iafenvoy.geckolib_player.api.PlayerAnimations;
import net.minecraft.resources.Identifier;public final class CombatPlayerAnimations {
public static final Identifier RESOURCE = Identifier.fromNamespaceAndPath("examplemod", "player_combat");
public static void register() {
PlayerAnimations.registerPose(RESOURCE, "guard");
PlayerAnimations.registerAction(RESOURCE, "slash", 12);
}
}
在逻辑服务器上使用 ServerPlayer 调用 API:
PlayerAnimations.setPose(player, CombatPlayerAnimations.RESOURCE, "guard");
PlayerAnimations.playAction(player, CombatPlayerAnimations.RESOURCE, "slash");
setPose 会替换玩家当前的姿态。playAction 会替换当前动作,并按注册的时长(以 tick 为单位)播放。当请求的动画未在相应通道中注册时,两者均返回 false。
动作可以临时使用不同的 GeckoLib 模型。姿态始终使用共享的玩家模型。
Identifier model = Identifier.fromNamespaceAndPath("examplemod", "armored_player");
PlayerAnimations.playAction(player, CombatPlayerAnimations.RESOURCE, "slash", model);
上述模型标识符解析为 assets/examplemod/geckolib/models/armored_player.geo.json。
动画锁定
锁定文件是可选的。它会在评估匹配的动画时,阻止原版 setupAnim 变换应用于指定的基础身体部位。当 GeckoLib 动画完全控制手臂、腿、身体或头部时,此功能非常有用。
对于 examplemod:player_combat,请将文件放置在此处:
assets/examplemod/geckolib_player/locks/player_combat.lock.json
锁定文件的命名空间和路径直接映射到动画资源标识符。使用与动画文件相同的 animations 对象布局:
{
"format_version": "1.8.0",
"animations": {
"guard": {
"locks": [
"right_arm",
"left_arm"
]
},
"slash": {
"locks": [
"body",
"right_arm",
"left_arm"
]
}
}
}
支持的锁定名称为 head、body、right_arm、left_arm、right_leg 和 left_leg。皮肤覆盖部分未列出,因为它们继承匹配的基础部位变换,这能使两个皮肤层保持对齐。当原版变换应保持生效时,请省略锁定文件、动画条目或 locks 字段。
运行时行为
每位玩家拥有一个姿态通道和一个动作通道。新请求会替换同一通道中的先前动画。当动作激活时,其评估优先级高于姿态;动作结束后,姿态恢复。状态会自动发送给本地玩家及所有追踪该玩家的客户端,因此集成方无需进行特定于渲染器的网络处理。
正在加载版本记录…
正在加载评论…
评论在新手盒子客户端中发表,这里同步展示。