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.java
  • src/main/java/glowredman/amazingtrophies/api/AchievementProperties.java
  • src/main/java/glowredman/amazingtrophies/api/TrophyProperties.java
  • src/main/java/glowredman/amazingtrophies/api/ItemDefinition.java
  • src/main/java/glowredman/amazingtrophies/api/ConditionHandler.java
  • src/main/java/glowredman/amazingtrophies/api/TrophyModelHandler.java