配置形态定义JSON

形态定义JSON文件用于配置自定义形态的动画、形态种类、体型等

其需要被存放在/data/example_namespace/ssc_form目录下,其名称与您的自定义形态ID相同

形态定义JSON格式

{
  "__comment__": "具体看PlayerFormBase | See PlayerFormBase for details",
  "groupID": "example_namespace:example_group",
  "__groupID_comment__": "组ID 用于注册组 与数据包结构相对应 | Group ID used for registering groups, corresponding to the datapack structure",
  "groupIndex": 5,
  "__groupIndex_comment__": "组内索引 用于变形逻辑 | Index within group used for transformation logic",
  "phase": "PHASE_SP",
  "__Phase_comment__": "变形阶段一般和groupIndex一样 Enum:[PHASE_CLEAR, PHASE_0, PHASE_1, PHASE_2, PHASE_3, PHASE_SP] | Transformation phase usually matches groupIndex. Enum:[PHASE_CLEAR, PHASE_0, PHASE_1, PHASE_2, PHASE_3, PHASE_SP]",
  "bodyType": "FERAL",
  "__BodyType_comment__": "身体类型 Enum:[NORMAL, FERAL] | Body type. Enum:[NORMAL, FERAL]",
  "isCustomForm": true,
  "originID": "example_namespace:form_example",
  "__originID_comment__": "OriginID 与内置的Origin mod联动 与origin_layer的名称相对应 **必须在 data/[NameSpace]/origins 里注册** | OriginID works with the built-in Origin mod, corresponding to the origin layer name. **Must be registered in data/[NameSpace]/origins**",
  "originLayerID": "origins:origin",
  "__originLayerID_comment__": "OriginLayerID 与内置的OriginFur mod联动 **极度不推荐修改** | OriginLayerID works with OriginFur **Highly not recommended to modify**",
  "hasSlowFall": false,
  "overrideHandAnim": false,
  "canSneakRush": false,
  "canRushJump": false,
  "anim": [
    {
      "state": "ANIM_IDLE",
      "animID": "example_namespace:form_example_idle"
    },
    {
      "state": "ANIM_SNEAK_IDLE",
      "animID": "shape-shifter-curse:form_feral_common_sneak_idle"
    }
  ],
  "__anim_comment__": "动画列表 State 在 PlayerAnimState 中定义 | Animation list. State is defined in PlayerAnimState",
  "animDefault": {
    "animID": "shape-shifter-curse:form_feral_common_idle",
    "speed": 1.0,
    "fade": 2
  },
  "__animDefault_comment__": "默认动画 如果没有可以不用添加此键 | Default animation. If not present, this key can be omitted"
}

示例中的comment字段应已经解释了对应字段的含义,以下是对于一些字段的补充说明:

groupID

用于标识当前形态处于哪个组内

只有处于同一个groupID下的,并且groupIndexphase注册正确的形态才能够按照阶段变化形态的方式正常触发变形逻辑

例如bat_0,bat_1,bat_2,bat_3都应该处于example_namespace:bat组中

groupIndex 与 phase

分别标识组内索引与变形阶段,用于阶段变化形态的变形逻辑

两者是一一对应的,其含义与对应关系如下,请参考下表来根据您的想要的自定义形态的阶段来注册对应的groupIndex与phase:

groupIndex: -2 -1 0 1 2 3 5
phase: PHASE_CLEAR PHASE_CLEAR PHASE_0 PHASE_1 PHASE_2 PHASE_3 PHASE_SP
形态阶段: 未开启模组内容时的形态,自定义无用 变形前的原始形态占位,自定义无用 阶段变化形态的第一阶段 阶段变化形态的第二阶段 阶段变化形态的第三阶段 阶段变化形态的第四阶段,即永久阶段 可随时恢复的特殊形态

例如:bat_0groupIndex应设置为0phase应设置为PHASE_0

groupIndex 4目前没有被使用,它是留给之后的特殊形态的

bodyType

人形为NORMAL,四足形态为FERAL

这一字段只影响视角高度以及物品的渲染方式。在FERALbodyType下,你需要搭配一套完整的动画才能够实现预期效果。建议复用项目中的已有动画来节省精力

isCustomForm

设置为true。这一字段影响修改形态的命令,为true时,其会出现在set_custom_form中,而不是set_form

originID

这一字段需要与origin_layer中的名称相匹配

一个形态需要对应一个origin,用于实现形态能力以及与形态模型相链接

anim

用于注册不同状态下的动画,其中的state字段对应PlayerAnimState中的状态,animID字段对应你的命名空间名与导出的动画JSON文件的名称

当前实现的state枚举可在PlayerAnimState中找到。其值与含义列举如下:

state 含义
ANIM_IDLE 站立静止
ANIM_SNEAK_IDLE 潜行静止
ANIM_WALK 移动
ANIM_RUN 疾跑
ANIM_JUMP 跳跃
ANIM_FALL 坠落
ANIM_CLIMB_IDLE 攀爬静止
ANIM_CLIMB 攀爬移动
ANIM_SWIM 游泳状态
ANIM_SWIM_IDLE 水中静止
ANIM_BOAT_IDLE 乘船静止
ANIM_RIDE_IDLE 骑乘静止
ANIM_ELYTRA_FLY 鞘翅飞行
ANIM_CREATIVE_FLY 创造模式飞行
ANIM_CRAWL 爬行移动
ANIM_CRAWL_IDLE 爬行静止
ANIM_SLOW_FALL 缓降
ANIM_ATTACK_ONCE 攻击一次(点击左键一下)
ANIM_TOOL_SWING 挥动工具(长按左键挖掘等)
ANIM_SNEAK_RUSH 潜行冲刺(原版用于豹猫形态)
ANIM_RUSH_JUMP 冲刺跳跃(原版用于豹猫与美西螈形态)
ANIM_SLEEP 睡眠
ANIM_SNEAK_JUMP 按住潜行时跳跃
ANIM_SNEAK_FALL 按住潜行时坠落
ANIM_SNEAK_ATTACK_ONCE 按住潜行时攻击一次(点击左键一下)
ANIM_SNEAK_TOOL_SWING 按住潜行时挥动工具(长按左键挖掘等)

animDefault

默认动画。当没有其他动画时,会播放此动画。通常注册为ANIM_IDLE状态的动画

对于FERALbodyType而言,如果没有注册此字段,则会在静止时出现直立姿态