1、自定义职业


第一步 职业的初始属性

数据包格式为:data/lhmiracleroad/lh_miracle_road_occupation/player/occupation/occupation.json  先将该模组的职业复制出来在添加自己的职业

json示例讲解:

{
  "id": "mage", //职业id这个非常重要记得别跟其他id重复
  "init_difficulty_level": 10, //初始难度等级,联动我的难度增强模组(目前没什么用)
  "conditions": [ //条件(意思为必须存在以下mod其中之一就会显示出来)
    "irons_spellbooks",
    "ars_nouveau"
  ],
  "init_attribute": [ //初始的能力等级
    {
      "id": "hp", //能力为 “hp” 的初始等级设置为8 (请看 lhmiracleroad/lh_miracle_road_occupation/player/attribute/attribute_types 里设置的id)
      "level": 8
    }
  ]
}

初始等级为什么为8之类的?因为10代表0级,8为-2级。可在config文件中设置  level_base (详情 config的中文翻译)


如果你完成了以上操作你进入游戏会发现你的职业没有图片以及文本也是错误的。

接下就该添加图片以及文本了:

  1. 图片需要放在 assets/lhmiracleroad/textures/occupation/*.png 下只支持png格式。命名必须要跟你设置的职业id一样比如你创建的是clergy。那图片得命名 clergy.png

  2. 文本有俩条 职业的名称,和描述,需放在 assets/lhmiracleroad/lang/zh_cn.json 下:

    职业名称:"lhmiracleroad.gui.occupation.name.职业id": "职业名称"

    职业描述:"lhmiracleroad.gui.occupation.describe.职业id": "..."


第二步 职业的初始装备

数据包格式为:data/lhmiracleroad/lh_miracle_road_occupation/player/init_item/init_item.json  先将我jar包里的先复制出来再做添加和修改

{
  "id": "clergy", //职业id
  "items": [
    {
      "item": "minecraft:bread", //物品的id
      "quantity": "6",//数量
      "is_split":false/true, //就算不写默认为false不拆分,为true将会把这个物品拆分的发给玩家,比如设置同个武器多把时候建议使用true其他时候不需要写
     "tag": "{ISB_spellbook:{activeSpellIndex:0,spellSlots:4,spells:[{level:1,sid:\"irons_spellbooks:firebolt\",slot:0}]}}" //物品的tag标签 (不懂的可以使用指令生成,然后复制进去就完成了)
    }
  ]
}

可直接使用指令:/lh_miracle_road equipment set 职业id 会将玩家物品栏里的所有物品复制成json数据。

会在 根目录生成一个 lhInitItem/职业id.json 的文件,直接将职业id.json里面的数据复制进数据包中。


我相信你能够完成职业的自定义了。接下来该实现自定义属性了 ╮( ̄▽ ̄")╭


2、自定义属性(接下请可能较为繁琐请详细阅读,我会分为几步慢慢来)


第一步 注册能力

数据包格式为:data/lhmiracleroad/lh_miracle_road_occupation/player/attribute/attribute_types/attribute.json  老样子先将我的复制出来再做添加和修改

json示例:

{
  "id": "brain", //你设置的能力id,比如这个就是智力。注:需要在 “zh_cn.json”写上“lhmiracleroad.gui.attribute.name.能力id”不然能力的名称你会看不懂。
  "conditions": [ //该能力是否被加载的条件,意思为必须存在以下mod其中之一就会显示出来
    "irons_spellbooks",
    "ars_nouveau"
  ],
  "describes": [ //设置顺便移动到详情或者名称上时显示出来的描述
    {
      "attribute": "irons_spellbooks:spell_power", //属性的id 在下方会有详细解读
      "condition": "irons_spellbooks", //单独的条件设置存在铁咒书时会显示该文本
      "describe": "brain_iron"//文本描述,在语言文本 zh_cn.json 下的名为 "lhmiracleroad.gui.attribute.text.details.描述名称": "铁咒书法术强度 %s"。%s 是我用来替换为数值的必须存在
    },
    {
      "attribute": "ars_nouveau:ars_nouveau.perk.spell_damage", //跟上方差不多
      "condition": "ars_nouveau",
      "describe": "brain_ars_nouveau"
    }
  ]
}

像属性id我默认提供了以下属性:

  1. max_health 最大生命值

  2. healing 生命恢复速度

  3. attack_damage 攻击伤害

  4. ranged_damage 远程武器攻击伤害(弓/三叉戟之类的)

  5. burden 增加你能够承受的重量

  6. hunger 减少饥饿值衰退的速度

  7. armor 护甲值

  8. armor_toughness 护甲韧性

  9. attack_speed 攻击速度

  10. movement_speed 移动速度

  11. jump 跳跃高度/减少高度对玩家造成伤害的判定

  12. luck 幸运值

像其他的 irons_spellbooks:spell_power 或是 ars_nouveau:ars_nouveau.perk.spell_damage 是通过在游戏中输入 /attribute 玩家名称 查看的属性。只要是通过该指令所查看到的属性就可以设置为属性id 

注:如有 暴击伤害、暴击率概率 的需求,目前不打算做但是提的人多了可能会做


第二步 升级的属性奖励

数据包格式为:data/lhmiracleroad/lh_miracle_road_occupation/player/attribute/attribute_points_rewards/attribute_points_rewards.json  老样子先将我的复制出来再做添加和修改

json示例:

{
  "id": "brain", //id必须跟 第一步设置的 attribute.json 里的id相同
  "conditions": [ //条件可以不写,我只是为了方便在数据包读取阶段剔除掉做的优化。
    "irons_spellbooks",
    "ars_nouveau"
  ],
  "data": {
    "max_level": 99, //该能力属性的最大等级
    "points_rewards": [
      {
        "attribute": "irons_spellbooks:spell_power", //属性id 保持第一步设置的 attribute.json里的属性id“attribute”相同
        "value": 0.03, //每级提升的值。
        "level_promote": 30, //每多少级触发,以"value"为基础按"level_promote_value"的值进行增加和减少
        "level_promote_value": -0.0075, //负数代表减少反之增加
        "operation": "multiply_base", //按百分比提升值
        "min": 0.01 //给设置属性值等级越高加成越少时使用的最小值,因为可能存在递减变成负数的情况
      },
      {
        "attribute": "ars_nouveau:ars_nouveau.perk.spell_damage", //跟上方差不多
        "value": 0.5, //每级提升的值。
        "level_promote": 30, //每多少级触发,以"value"为基础进行 按"level_promote_value"的值进行增加和减少
        "level_promote_value": -0.125, //负数代表减少反之增加
        "operation": "addition", //直接提升指定数值
        "min": 0.1
      }
    ]
  }
}

operation 一共提供了3个:

  1. addition 直接提升指定数值。示例:假如我个生命属性设置 "value" 为 1时,每级会提升1点生命

  2. multiply_base 按百分比提升值。示例:假如我个生命属性设置 "value" 为 0.01时,每级会提升1%点生命

  3. multiply_total 进行总数值百分比的提升。示例:假如我个生命属性设置 "value" 为 0.01时,每级会提升1%点生命。但那会在 addition 以及 multiply_base 的基础上进行总提升,


第三步 面板上的属性显示

数据包格式为:data/lhmiracleroad/lh_miracle_road_occupation/player/attribute/show_gui_attribute/show_gui_attribute.json  老样子先将我的复制出来再做添加和修改

json示例:

{
  "condition": "irons_spellbooks",   //条件设置。意思为必须存在该mod就会显示出来
  "attribute": "irons_spellbooks:spell_power", //属性id。注:该值必须是 “data/lhmiracleroad/lh_miracle_road_occupation/player/attribute/attribute_points_rewards/attribute_points_rewards.json” 文件下的"attribute"。
  "attribute_text": "brain_iron", //属性描述文本 。注:该值必须是 “data/lhmiracleroad/lh_miracle_road_occupation/player/attribute/attribute_types/attribute.json” 文件下的"describe"。也可自定义格式在“zh_cn.json”里写上“lhmiracleroad.gui.attribute.text.details."attribute_text"所设置的名称” 就可以了
  "show_value_type": "base_percentage" //展示的方式,在下方会个详细描述
}

show_value_type 一共提供了4个:

  1. base 直接显示出具体数值,如生命为 60点就显示出60点

  2. extra_base 显示出除基础数值外的格外数值,如生命为 60点就减去基础生命20点显示出 + 40点

  3. base_percentage 将具体数值以百分比的形式显示出来,比如具体数值为1 显示出100%

  4. extra_percentage 将除基础数值外的格外数值以百分比的形式显示出来,基础数值为1,格外提升了0.5就显示出 +50%

这是为了应对某些数值怕玩家看不懂才设计的。


我相信你能够完成属性的自定义了。接下来该实现装备的惩罚和重量了 ╮( ̄▽ ̄")╭


3、装备惩罚和重量(这个应该是最简单的)


第一步 惩罚设置

数据包格式为:data/lhmiracleroad/lh_miracle_road_occupation/player/punishment/punishment.json  老样子先将我的复制出来再做添加和修改

{
  "id": "default", //惩罚的id,没什么要求就是别重复就行,随意设置,但是千万要保留 “id” 为  "default" (默认惩罚)
  "punishments": [
    {
      "attribute": "attack_damage", //这是攻击伤害。注:该值必须是 “data/lhmiracleroad/lh_miracle_road_occupation/player/attribute/attribute_points_rewards/attribute_points_rewards.json” 文件下的"attribute"。
      "value": -0.9, // -0.9 如果是百分比的话就是 -90%了
      "operation": "multiply_total" //注: 这里的值请看 “2、自定义属性”->“第二步 升级的属性奖励”下的operation
    },
    {
      "attribute": "attack_speed", //这是攻击速度。注:该值必须是 “data/lhmiracleroad/lh_miracle_road_occupation/player/attribute/attribute_points_rewards/attribute_points_rewards.json” 文件下的"attribute"。
      "value": -0.9,
      "operation": "multiply_total"
    }
  ]
}


第二步 武器/装备的重量以及点数限制

数据包格式为:modid/lh_miracle_road_equipment/物品id.json (可以看看我数据包里的格式一看就懂,这个就不需要复制了自己写就好了)。注:如果不知道怎么找物品id,按F3+H键显示出来。

{
  "heavy": 17, //重量
  "attribute_need": [ //这个是设置使用的属性能力点要求的地方,可以写多个。盔甲之类一般是不需要能力点数进行限制的,直接写个重量就行了(虽然也可以但是一般不会有人这样搞吧)
    {
      "attribute_id": "power", //能力的id。注:该值必须是 “data/lhmiracleroad/lh_miracle_road_occupation/player/attribute/attribute_points_rewards/attribute_points_rewards.json” 文件下的"id"。
      "need_points": 33, //等级点数需求,这个意思是需要 力量到达33级
      "punishment_id": "..." //  punishment_id 可以不用写直接删掉就行了(默认会使用“id”为 “default”,加上这个是为了满足更多的需求。比如我手上拿着魔法书不满足需求总不能减少攻击力吧,至少我是这样认为的。)
    },
    {
      "attribute_id": "agile",//跟上方一样
      "need_points": 33,  //等级点数需求,这个意思是需要 敏捷到达33级
      "punishment_id": "..."
    }
  ],
  
}

好的目前所有的数据包自定义都讲解完毕了。 ╮( ̄▽ ̄")╭


4、config的中文翻译


init_burden = 60 //初始的承重值

level_base = 10 //级别基础值。设置多少就代表多少为0级

is_offhand_calculate_heavy = true //副手物品是否计算重量

punishment_light = 0.1 //重量为轻时的奖惩 0.1为提升百分之10的移动速度

punishment_normal = 0.0 //重量为正常时的奖惩

punishment_biased_weight = -0.3 //重量为偏重时的奖惩 -0.3为减少百分之30的移动速度

punishment_overweight = -0.6 //重量为超重时的奖惩 -0.6为减少百分之60的移动速度

empirical_calculation_formula = "min(pow(lv,2.2) + 180 + 18 * (lv + 1), 9999999)" //计算公式。min(,)就是哪个值小用哪个所以最大所需的灵魂量为9999999。pow(lv,2.2)等同于 lv ^ 2.2 也就是 当前等级的2.2次方。lv为当前等级

empirical_base_multiplier = 10.0 //灵魂获取的倍率,也就是怪物掉落经验 * 10为获取的灵魂量

ignore_death_penalty_probability = 30 //玩家死亡时有百分之30的概率不触发清空灵魂

forget_water_probability = 0.01 //道具遗忘之水在古城和末地城的开启概率,默认百分之1

is_skill_points_restrict = true //是否启用 武器/装备设置的点数限制