Amazing Trophies API(公共 API)
基本信息
| 属性 | 值 |
|---|---|
| 包名 | glowredman.amazingtrophies.api |
| Annotation | @API(apiVersion = Reference.VERSION, owner = "amazingtrophies", provides = "Amazing Trophies API") (来自 package-info.java) |
| 主要类 | AmazingTrophiesAPI, AchievementProperties, TrophyProperties, ConditionHandler, TrophyModelHandler, ItemDefinition |
NBT 标签常量(AmazingTrophiesAPI 静态字段)
| 常量 | 值 | 含义 |
|---|---|---|
TAGNAME_ID |
"trophyID" |
奖杯配置 ID |
TAGNAME_TIME |
"time" |
颁发时间戳(毫秒) |
TAGNAME_UUID |
"uuid" |
玩家 UUID 字符串 |
TAGNAME_NAME |
"name" |
玩家显示名(备份) |
核心 API 调用
| 方法 | 说明 |
|---|---|
registerAchievement(String id, AchievementProperties props) |
注册自定义成就——需在 FMLPostInit 阶段前调用,AchievementProperties.register() 才会真正把它装进 StatList/AchievementList |
getAchievementProperties(String id) / getAchievementIDs() / getAchievements() |
查成就属性 |
registerTrophy(String id, TrophyProperties props) |
注册奖杯配置 |
getTrophyProperties(String id) / getTrophyIDs() / getTrophies() |
查奖杯属性 |
registerConditionHandler(Supplier<ConditionHandler>) |
注册 Condition Handler——单次同时为成就与奖杯两侧各实例化一份,分别绑定 player.triggerAchievement 与 awardTrophy 监听器 |
getAchievementConditionHandler(...) / getTrophyConditionHandler(...) |
列表 + 查找 |
registerTrophyModelHandlerProvider(String id, Supplier<TrophyModelHandler>) |
注册自定义 model handler——仅客户端使用 |
getTrophyModelHandlerProvider(...) / getTrophyModelHandlerProviders() |
查 model handler 工厂 |
setTrophyBlock(Block) |
设置全局 trophy block,仅生效一次,重复会日志 error |
getTrophyBlock() |
当前已设置的 trophy block(可能为 null) |
getTrophyWithNBT(String trophyID, EntityPlayer player) |
构造一份带 NBT 的 ItemStack(无 player 时不写 uuid/name) |
awardTrophy(String trophyID, EntityPlayer player) |
把奖杯塞入玩家背包(满则掉落) |
AchievementProperties
- 字段:
page(默认 Minecraft 页面名 or 自定义 AchievementPage 名)/x/y/parent(可选 statId)/isSpecial/icon(ItemDefinition)。 - 构造:
Builder(x, y, icon);链式.setPage(...).setParent(...).setSpecial().setSpecial(boolean)。 .register():构造new Achievement(id, id, x, y, icon.getAsStack(), parent),调initIndependentStat()/setSpecial()/registerStat(),并尝试加入AchievementPage.getAchievementPage(page)。
TrophyProperties
- 字段:
id(API 自动写入)+modelHandler(客户端可为 null 或一个真实 handler;服务端必须为 null)。 - 构造:
new TrophyProperties(modelHandler),getModelHandler()返回该字段。
ItemDefinition
- 字段:
registryName(modid:itemname)/meta(0..32767,支持OreDictionary.WILDCARD_VALUE)/nbt(SNBT)。 - 方法:
getAsStack()/getAsStack(int size)——getAsStack调用GameRegistry.makeItemStack(registryName, meta, 0, nbt)。 equals:meta 任一方为 wildcard 即相等;nbt 只要一方为空即视为相等。
ConditionHandler(抽象)
- 抽象方法:
getID(),parse(String id, JsonObject json)。 - 包内 API:
getListener(),getOwner()("achievements"or"trophies"),isFMLEventHandler(),isForgeEventHandler(),registerAsEventHandler()。 - 公开侧需要继承、自行重写
isXxxEventHandler与带@SubscribeEvent的回调。
TrophyModelHandler(抽象)
- 抽象方法:
render(x, y, z, rotation, name, time, partialTickTime)。 - 默认:
getRenderBoundingBox(x, y, z)=±4.5(9x9x9 立方体)以避免视锥剔除自定义模型。 - 可选覆写:
parse(String id, JsonObject json),子类用来存自定义配置。
相关条目
源码
src/main/java/glowredman/amazingtrophies/api/AmazingTrophiesAPI.javasrc/main/java/glowredman/amazingtrophies/api/AchievementProperties.javasrc/main/java/glowredman/amazingtrophies/api/TrophyProperties.javasrc/main/java/glowredman/amazingtrophies/api/ItemDefinition.javasrc/main/java/glowredman/amazingtrophies/api/ConditionHandler.javasrc/main/java/glowredman/amazingtrophies/api/TrophyModelHandler.java