唱片元数据 API
基本信息
| 属性 | 值 |
|---|---|
| 接口 | com.gtnewhorizon.gtnhlib.api.MusicRecordMetadataProvider |
| 源码 | src/main/java/com/gtnewhorizon/gtnhlib/api/MusicRecordMetadataProvider.java |
| 实现前提 | 继承 net.minecraft.item.ItemRecord |
| 注册方 | 无注册表,由 mod 自行在 ItemRecord 子类上实现 |
功能
为自定义唱片物品提供 NBT 感知的音乐元数据查询,供实现自定义唱片机的 mod 使用。原版 ItemRecord 只有一个 recordName 字段,无法表达"同一物品靠 NBT 区分曲目"。
源码注释(MusicRecordMetadataProvider.java:6-9):
Implement on classes extending
ItemRecordto provide metadata and NBT-aware versions of the standard music metadata for use by other mods that implement custom jukeboxes.
两个方法都是 default:
| 方法 | 默认行为 | 说明 |
|---|---|---|
getMusicRecordResource(ItemStack) |
校验 stack.getItem() == this 后返回 self.getRecordResource(self.recordName) |
返回该 ItemStack 播放的音效 ResourceLocation,无则 null |
getMusicRecordVariants() |
Collections.singleton(new ItemStack((ItemRecord) this, 1, 0)) |
该物品所有可播放变体的 ItemStack 列表 |
默认实现下行为与原版一致;只有需要 NBT 区分曲目、或一个物品含多首曲子时才需覆写。
数值
| 数值名 | 值 |
|---|---|
| 接口方法数 | 2 |
| 抽象方法数 | 0(全部有 default 实现) |
| 默认变体数 | 1(meta = 0) |
| GTNHLib 内置实现 | 0(纯供下游 mod 实现的接口) |
getMusicRecordResource 的默认实现有两层短路(MusicRecordMetadataProvider.java:18-25):stack == null 或 stack.getItem() != this 时直接返回 null,因此调用方无需自行判空或比对物品。
交互
自定义唱片机读取物品时:
- 调
getMusicRecordResource(stack)拿到音效资源 - 调
getMusicRecordVariants()枚举该物品的全部可播放变体,用于 GUI 列表
返回 null 表示该 ItemStack 不含可播放音乐,调用方应跳过。
相关条目
- 物品栈与传输 API -
ImmutableItemStack等同包工具类