终极技能

终极技能

一个围绕节点树构建的技能模组。每个节点、连接、加成和效果都在JSON或KubeJS中定义,因此数据包可以从零开始构建自己的技能,无需改动代码。

魔法

描述

终极技能

这是一个围绕节点树构建的技能模组,专为制作整合包的玩家设计。模组没有硬编码的技能列表:树中的每个节点都是一个 JSON 文件,因此模组自带的技能树只是一个起点,你可以完全替换它。


技能树

按 K 键打开。这是一个可平移和缩放的画布:拖拽移动,滚动缩放,左键点击节点即可学习。当你学习节点时,连接线会亮起金色,因此你所走过的路径一目了然。

模组自带 421 个节点,以十二个放射状分支围绕一个起始节点排列。每个分支基于一种属性构建,深入十层,每第三个节点分出四个节点的侧枝,每个主枝和侧枝的末端都有一个精通节点,更远处还有一个基石节点。

十二个分支:利刃(近战伤害)、狂怒(攻击速度)、装甲(护甲值)、淬火(护甲韧性)、活力(最大生命值)、迅捷(移动速度)、深掘(挖掘速度)、幸运(幸运值)、锚定(击退抗性)、巧匠(方块放置距离)、猎人(对生物的攻击距离)和飘落(安全摔落距离)。

每个节点都明确说明其提供的效果。精通和基石节点还会授予永久药水效果——力量、急迫、抗性提升、抗火、生命恢复、速度、幸运、夜视或缓降,具体取决于分支。这些效果会自动刷新,因此它们能穿过死亡、跨维度传送和 /effect clear 而持续存在。

点数来自原版经验等级,节点一旦学习即为永久。/uskills reset 可以在你想重新开始时归还所有点数。


每个节点都是一个文件

节点位于 data/<你的命名空间>/skilltree/nodes/<id>.json:

{
  "title": "Executioner",
  "description": ["+3 melee damage and permanent Strength."],
  "icon": "minecraft:netherite_sword",
  "type": "notable",
  "x": 420, "y": 0,
  "cost": 2,
  "player_level": 15,
  "connections": ["ultimateskills:blade_9"],
  "bonuses": [
    { "attribute": "minecraft:generic.attack_damage", "amount": 3.0 },
    { "attribute": "minecraft:generic.attack_speed", "amount": 0.15, "operation": "add_multiplied_base" }
  ],
  "effects": [
    { "effect": "minecraft:strength" }
  ]
}
字段 默认值 作用
title — 工具提示中显示的名称
lang — 共享翻译键,使多个节点可以复用一组文本
description 空 工具提示内容行
icon minecraft:book 绘制在节点内部的物品
type minor start、minor、notable、keystone 或 gateway —— 决定大小和颜色
x、y 必填 在画布上的位置
cost 1 学习所需点数
player_level 0 要求的原版经验等级
connections 空 所连接的节点;连接会自动双向建立
requires 空 必须先学习的节点
bonuses 空 属性修饰符,支持任何属性,包括模组添加的属性
effects 空 永久药水效果

当一个节点是 start 节点,或者与它相连的某个节点已被学习、满足其 requires 条件、拥有足够的点数,并且达到所要求的经验等级时,就可以学习该节点。

连接只需声明一次:例如 A 连接到 B,模组在加载时会自动添加 B 到 A 的连接。每次重新加载时,模组还会在日志中报告技能树的形状——节点数量、根节点、可到达的节点数、单向连接、断裂的连接——并警告任何玩家永远无法到达的节点。

推荐搭配:OpenLoader —— 普通数据包只存在于一个世界内,因此你必须将其复制到每个新世界中。使用 OpenLoader,同一份文件可以放在 config/openloader/data/ 中,并在所有世界中加载。


或者用 KubeJS 编写

如果安装了 KubeJS,模组会添加一个全局的 Skills 绑定。它位于 kubejs/server_scripts/ 中——技能树随数据包加载,因此启动脚本和客户端脚本会在世界加载时被丢弃,模组会在日志中警告你。

Skills.node('mypack:brutal_strike')
  .title('Brutal Strike')
  .description('+4 melee damage and permanent Strength.')
  .icon('minecraft:netherite_axe')
  .type('notable')
  .at(490, -70)
  .cost(2)
  .playerLevel(15)
  .connect('ultimateskills:blade_10')
  .bonus('minecraft:generic.attack_damage', 4)
  .bonus('minecraft:generic.attack_speed', 0.2, 'add_multiplied_base')
  .effect('minecraft:strength')
  .register()

没有 .register() 就不会生效 —— 这是人们最常忘记的一点。当构建器方法无法满足你的需求时,raw({...}) 可以接收一个完整的对象。


命令

/uskills(或更短的 /ust):

  • /uskills info —— 查看你的点数、已消耗点数和所有已学习的节点。
  • /uskills points <玩家> <数量> —— 给予或收回点数。
  • /uskills learn <玩家> <节点> —— 强制学习某个节点,忽略点数和连接要求。
  • /uskills reset <玩家> —— 清除已学习的节点并归还所有点数。
  • /uskills nodes —— 查看技能树当前拥有的节点数量。

配置

config/ultimateskills-common.toml

选项 默认值 作用
enabled true 界面和所有加成效果的总开关
starting_points 1 首次加入时给予的点数
points_per_player_level 1 每提升一级原版经验等级获得的点数
reset_on_death false 死亡时清除已学习的节点并归还点数
max_points 0 可持有的最大点数上限;0 表示无上限

语言

支持英语和西班牙语,并附带了 es_es、es_mx 和 es_ar,因为 Minecraft 不会在西班牙语变体之间自动回退。节点文本通过翻译键处理,并以 JSON 字符串作为回退,因此未翻译节点文本的整合包依然可以正常显示。

要求:

· Minecraft 1.21.1

· NeoForge 21.1.240