Player Affixes - API 开发指南 (pa)
Player Affixes - API 开发指南
本文档为希望与 PlayerAffixes 天赋系统交互或通过自定义逻辑扩展系统的开发者提供详细指南。
1. 访问 API
API 的主要入口点是 site.backrer.playeraffixes.api.PlayerAffixesApi。使用它来获取 ITalentApi 实例。
1 | import site.backrer.playeraffixes.api.PlayerAffixesApi; |
2. 核心接口
2.1. ITalentApi
管理天赋和词条的核心接口。
| 方法 | 说明 |
|---|---|
getTalentData(Player player) | 返回指定玩家的 IPlayerTalentData,包含其已解锁的天赋和词条状态。 |
getTalent(String id) | 通过完整 ID 获取 TalentNode 对象(例如:playeraffixes:strength_boost)。 |
getAllTalents() | 返回所有已注册天赋节点的不可变集合。 |
unlockTalent(ServerPlayer player, String talentId) | 强制为玩家解锁天赋。这会跳过消耗(经验 / 物品)和前置条件检查。 |
resetTalents(ServerPlayer player) | 重置玩家的所有天赋,清除数据,并移除所有由天赋授予的活跃药水效果。 |
registerAffixHandler(String affixId, IAffixHandler handler) | 为特定的词条 ID 注册自定义逻辑处理器。这允许你实现超越简单属性修改的复杂行为。 |
2.2. IPlayerTalentData
代表玩家持久化的天赋状态。
| 方法 | 说明 |
|---|---|
isTalentUnlocked(String talentId) | 检查玩家是否已解锁特定天赋。 |
getUnlockedTalents() | 返回所有已解锁天赋 ID 的集合。 |
hasAffix(String affixId) | 检查玩家是否通过其任何已解锁的天赋启用了特定词条。 |
getSelectedStartingTalent() | 返回已选起始天赋(根节点)的 ID。 |
3. 自定义词条 (高级)
自定义词条允许你为拥有特定天赋的玩家挂钩游戏事件(如战斗或 Tick)。
3.1. 实现 IAffixHandler
IAffixHandler 接口提供了多个钩子。所有方法都是可选的(默认不执行任何操作)。
1 | public interface IAffixHandler { |
3.2. 访问参数
在 JSON 中定义的词条可以拥有自定义参数。你可以通过 affixData.getParam(key, defaultValue) 访问它们。
1 |
|
3.3. 注册
在 FMLCommonSetupEvent 期间注册你的处理器。你必须将注册代码包装在 event.enqueueWork 中。
1 |
|
4. 事件 (Events)
API 在 MinecraftForge.EVENT_BUS 上发布 Forge 事件。
4.1. TalentUnlockEvent
Pre: 在解锁前触发。调用event.setCanceled(true)可阻止解锁。Post: 在成功解锁并应用效果后触发。
4.2. TalentResetEvent
Pre: 在重置前触发。可取消。Post: 在数据清除且效果移除后触发。
5. 集成示例:吸血词条 (Lifesteal)
- Java 处理器:
1 | public class LifestealHandler implements IAffixHandler { |
- JSON 天赋:
1 | { |
💗感谢你的喜欢与支持!

