稀有度核心 API 文档
适用于 1.21.1 版本 (Ver.13)
Maven 依赖
推荐:Modrinth Maven(无需身份验证)
gradlerepositories { mavenCentral() maven { name = "Modrinth" url = "https://api.modrinth.com/maven" content { includeGroup "maven.modrinth" } } } dependencies { implementation "maven.modrinth:raritycore:<version>" }备选:GitHub Packages(需要 Token)
gradlerepositories { mavenCentral() maven { url = "https://maven.pkg.github.com/Yanbwe/RarityCore" credentials { username = "你的GitHub用户名" password = "你的GitHub Personal Access Token" } } } dependencies { implementation "org.yanbwe:raritycore:1211.<version>" }Token 需要
read:packages权限,可在~/.gradle/gradle.properties中配置:propertiesgpr.user=你的GitHub用户名 gpr.key=你的Personal Access Token
自 Ver.13 起,RarityCore 提供统一的正式 API 入口 RarityCoreAPI,供其他模组直接调用。旧的分散式 API 类仍可使用,但推荐迁移到新 API。
正式 API: RarityCoreAPI
包路径: org.yanbwe.raritycore.api.RarityCoreAPI
稀有度注册与查询
java
// 注册物品稀有度 (1+,同步到客户端)
RarityCoreAPI.registerRarity(item, 5);
// 注册物品稀有度 (可选是否同步)
RarityCoreAPI.registerRarity(item, 5, true);
// 删除物品稀有度
RarityCoreAPI.unregisterRarity(item);
// 获取 ItemStack 的稀有度 (按完整优先级链解析)
int rarity = RarityCoreAPI.getRarity(itemStack);
// 获取 Item 的稀有度
int rarity = RarityCoreAPI.getRarity(item);
// 获取标准化稀有度 (<1→1,>7→7,推荐使用)
int r = RarityCoreAPI.getNormalizedRarity(itemStack);
int r2 = RarityCoreAPI.getNormalizedRarity(item); // 也可用 Item
// 获取本地化工具提示
String tip = RarityCoreAPI.getLocalizedTooltip(itemStack);
// 获取所有已注册的稀有度映射 (只读)
Map<ResourceLocation, Integer> map = RarityCoreAPI.getRegistryMap();
// 检查物品是否有已配置的稀有度
boolean has1 = RarityCoreAPI.hasConfiguredRarity(item);
boolean has2 = RarityCoreAPI.hasConfiguredRarity(item, itemStack); // 含组件检查
// 清理无效条目
int removed = RarityCoreAPI.pruneInvalidEntries();颜色
java
// 获取 RarityClientConfig 中定义的逐级 RGB 颜色
int rgb = RarityCoreAPI.getColor(5);
// 获取逐级纹理路径
String tex = RarityCoreAPI.getTexture(5);
// 解析 "#RRGGBB" 字符串为 RGB int
int rgb = RarityCoreAPI.parseColor("#FFAA00");
// RGB int 格式化为 "#RRGGBB"
String hex = RarityCoreAPI.formatColor(0xFFAA00);验证
java
RarityCoreAPI.isValidRarity(5); // true
RarityCoreAPI.normalizeRarity(10); // 7
RarityCoreAPI.normalizeRarity(0); // 1Tag 稀有度
java
// 获取物品匹配的 Tag 规则最高稀有度 (0=无匹配)
int r = RarityCoreAPI.getTagRarity(item);
// 已加载的 Tag 规则数量
int count = RarityCoreAPI.getTagRuleCount();逐级开关 (RarityClientConfig)
java
RarityCoreAPI.isLevelRendererEnabled(5);
RarityCoreAPI.isLevelTooltipEnabled(5);
RarityCoreAPI.isLevelNameColorEnabled(5);组件稀有度控制
java
// 检查是否开启了 DataComponent 稀有度控制
RarityCoreAPI.isComponentRarityControlEnabled();
// 从物品的 CUSTOM_DATA 中读取 raritycore 稀有度 (Level=0 时返回0)
int level = RarityCoreAPI.getComponentRarity(itemStack);网络同步
java
// 全量同步
RarityCoreAPI.syncToClients();
// 带重试的全量同步
RarityCoreAPI.syncToClientsWithRetry();
// 增量同步
RarityCoreAPI.syncIncrementalChangesToClients();
// 待同步变更数
int pending = RarityCoreAPI.getPendingChangeCount();常量
java
RarityCoreAPI.MIN_RARITY // 1(最低档位)
RarityCoreAPI.MAX_RARITY // 7(内置预置档位数,非稀有度上限)
RarityCoreAPI.DEFAULT_RGB_COLOR // 0xCCCCCC稀有度解析优先级
组件控制 (CUSTOM_DATA.raritycore.Level>0) ← 最高
↓
Item Data 匹配规则
↓
Apotheosis 神化适配器
↓
Iron's Spells 法术适配器
↓
ITEM_RARITY_MAP (FinalRarity.json + 数据包)
↓
TagRarity (TagRarity.json)
↓
AUTO_RARITY_MAP (自动计算)
↓
原版 getRarity()旧版 API 类 (仍可用)
以下类在 Ver.13 中仍可用,但推荐迁移到 RarityCoreAPI:
| 旧类 | 新替代 |
|---|---|
RarityRegistry.register() | RarityCoreAPI.registerRarity() |
RarityRegistry.getRarity() | RarityCoreAPI.getRarity() |
RarityColorUtil.getRarityChatColor() | RarityCoreAPI.getColor() |
RarityValidator.normalizeRarity() | RarityCoreAPI.normalizeRarity() |
ClientConfigManager.isEnable*() | RarityCoreAPI.is*() |
RarityClientConfig.getInstance().getColor() | RarityCoreAPI.getColor() |
事件
RarityCore 提供以下 NeoForge 事件,其他模组可通过 NeoForge.EVENT_BUS 监听:
RarityChangeEvent
物品稀有度被注册/更新/删除时触发。
java
@SubscribeEvent
public void onRarityChange(RarityChangeEvent event) {
Item item = event.getItem();
Integer oldRarity = event.getOldRarity();
Integer newRarity = event.getNewRarity();
RarityChangeEvent.ChangeType type = event.getChangeType(); // REGISTER / UPDATE / REMOVE
}RarityQueryEvent
查询物品稀有度时触发,可修改返回值。实现 ICancellableEvent。
java
@SubscribeEvent
public void onRarityQuery(RarityQueryEvent event) {
ItemStack stack = event.getItemStack();
int rarity = event.getOriginalRarity(); // 当前结果
event.setOverriddenRarity(5); // 覆盖为 5
event.setCanceled(true); // 必须取消事件才生效
String source = event.getSource(); // component/itemdata/apotheosis/ironspells/itemmap/tag/autorarity/vanilla/default
}RarityTooltipEvent
工具提示构建时触发,可追加自定义文本。
java
@SubscribeEvent
public void onRarityTooltip(RarityTooltipEvent event) {
event.getTooltipComponents().add(Component.literal("自定义信息"));
int rarity = event.getRarity();
}使用示例
java
import org.yanbwe.raritycore.api.RarityCoreAPI;
import net.minecraft.world.item.Items;
import net.minecraft.world.item.ItemStack;
// 注册
RarityCoreAPI.registerRarity(Items.DIAMOND_SWORD, 5);
// 查询
int r = RarityCoreAPI.getNormalizedRarity(new ItemStack(Items.DIAMOND_SWORD));
// r = 5
// 颜色
int rgb = RarityCoreAPI.getColor(5); // 0xFFCC00 (亮金色)
// 导出命令
// /raritycore export rarity 5 → 导出所有传说级物品到 JSON
// 编辑模式
// /raritycore edit toggle true → 开启编辑模式
// /raritycore edit mode fullmatch → 切换到完全匹配模式
// 然后 shift+右键 任意物品即可编辑