添加自定义形态能力

mod使用Origins的逻辑来定义不同形态的不同能力。换言之,每个形态都对应着Origins中的一个单独的origin

要为自定义形态定义能力,请参考Origins文档

此外,模组额外添加了一些与特有机制有关的power与action可供使用


挂载在现有形态下的变形触发power

变形power的挂载

要通过游戏内条件触发变形,你需要首先在custom_form_pack_example/example_form_datapack/data/example_namespace/origins_power_extra目录下挂载一个自己的变形power

{
  "TargetOriginsID": "shape-shifter-curse:form_original_shifter",
  "ExtraPowers": [
    "example_namespace:to_example_form"
  ]
}

在上例中,example_namespace:to_example_form这一power会挂载到shape-shifter-curse:form_original_shifter这一形态下

如此一来,你就可以在处于form_original_shifter时,触发to_example_form这一power中实现的变形效果

若你实现了自己的基础形态,而不是复用模组中的基础形态的话,你可以跳过挂载步骤,直接在自己的基础形态中实现变形power

变形power的实现

在JSON中挂载之后,你需要实现自己的变形power

与其他power一致,变形power需要被放置在custom_form_pack_example/example_form_datapack/data/example_namespace/powers目录下

你可以在这里找到当前的所有形态id

使用shape-shifter-curse:transform_to_formaction来触发变形逻辑:

{
  "type": "origins:action_on_item_use",
  "entity_action": {
    "type": "shape-shifter-curse:transform_to_form",
    "form_id": "example_namespace:example",
    "instant": true
  },
  "item_condition": {
    "type": "origins:ingredient",
    "ingredient": {
      "tag": "origins:fish"
    }
  }
}

以上示例中,当玩家食用任何鱼类时,会触发shape-shifter-curse:transform_to_form,将玩家变形为example_namespace:example形态

由于你已经通过注册将power挂载在了form_original_shifter形态下,只有在该形态中,这一power才会生效


模组特有的power与action:

本能系统相关

这些power与action用于与模组的本能系统交互,用于在特定条件下增加或减少本能值

add_sustained_instinct

用于持续增加或减少instinct的power

当power的instinct_effect_id字段与现有power重复时,则后加载的power会覆盖掉已有的power

以下示例用于实现当玩家处于繁茂洞穴群系中时,以0.003每tick的速度持续增加本能值

    {
      "type": "shape-shifter-curse:add_sustained_instinct",
      "instinct_effect_id": "FORM_AXOLOTL_BIOME",
      "value": 0.003,
      "duration": 1,
      "condition": {
        "type": "origins:biome",
        "biome": "minecraft:lush_caves"
      }
    }

add_instinct

一次性增加或减少instinct的action

以下示例用于实现当玩家每次食用生鱼时,在20tick的时间内,每tick增加0.1的本能值。即在1秒内增加2本能值

    {
      "type": "origins:action_on_item_use",
      "entity_action": {
        "type": "shape-shifter-curse:add_instinct",
        "instinct_effect_id": "FORM_AXOLOTL_EAT_FISH",
        "value": 0.1,
        "duration": 20
      },
      "item_condition": {
        "type": "origins:ingredient",
        "ingredient": {
          "tag": "origins:fish"
        }
      }
    }

一般而言,对于“阶段变化形态”的0和1阶段,加入金苹果催化剂的相关power是必要的。当然,你也可以随意定义自己的instinct物品


角色缩放相关:

你可以通过scalepower调整角色的尺寸缩放,这一缩放不会影响到形态的移动速度与跳跃高度等属性

eye_scale字段用于定义视角高度的缩放

每个形态都必须包含一个scalepower,否则可能会在变化形态时出现尺寸错乱的情况

{
  "type": "shape-shifter-curse:scale",
  "scale": 0.5,
  "eye_scale": 0.6
}

其他特有的power与action:

模组中各形态所用到的自定义power、action与condition均在源码的additional_power目录下,此处不再赘述

请随意参考与复用它们