BogoSort API
[!INFO] 注册真源:
BogoSortAPI.java(@Instance单例),接口定义api/IBogoSortAPI.java
本模组向其他 mod 暴露整理能力的 API。获取方式为 BogoSortAPI.INSTANCE(实现 IBogoSortAPI)。
规则注册
| 方法 | 说明 |
|---|---|
registerItemSortingRule(String key, Comparator<ItemStack>) |
注册一条物品排序规则 |
registerClientItemSortingRule(...) |
注册仅客户端可用的规则(带服务端回退比较器) |
registerNbtSortingRule(String key, String tagPath, Comparator<NBTBase>) |
按 NBT 标签内容排序 |
registerNbtSortingRule(String key, String tagPath, int expectedType) |
按 NBT 标签类型排序(无自定义比较器) |
registerNbtSortingRule(String key, String tagPath, int expectedType, Comparator<T>, Function<NBTBase, T>) |
完整重载:类型检查 + 自定义比较器 + 取值函数 |
remapSortRule(String oldKey, String newKey) |
旧键迁移;模组自身在 BogoSorter.java:70 用它把 is_block 迁到 block_type |
[!NOTE] 末行重载正是
gt_circ_config/gt_item_damage所用的两参形态:只传key、tagPath、expectedType,比较器与取值函数留空 —— 属有意的重载选择。
容器兼容
| 方法 | 说明 |
|---|---|
addCompat(Class<T>, BiConsumer<T, ISortingContextBuilder>) |
为某 Container 子类注册兼容(构建槽位分组) |
addGenericCompat(Class<T>) |
默认实现:按容器顺序整体分组 |
addCompatSimple(Class<T>, BiConsumer<T, ISortingContextBuilder>) |
简化签名版本 |
removeCompat(Class<T>) |
移除已注册兼容 |
addCustomInsertable(Class<? extends Container>, ICustomInsertable) |
自定义物品插入逻辑 |
addSlotGetter(Class<T>, Function<T, SlotAccessor>) |
为自定义 Slot 子类提供取值器 |
addPlayerSortButtonPosition(Class<?>, IPosSetter) |
自定义玩家背包整理按钮位置 |
[!TIP] 容器也可直接实现
ISortableContainer(buildSortingContext(ISortingContextBuilder))。源码注释明确:实现该接口的优先级高于addCompat。
槽位分组
ISortingContextBuilder 提供三种建组方式:addSlotGroupOf(List<Slot>, int rowSize)、addSlotGroup(List<SlotAccessor>, int rowSize)、addSlotGroup(int startIndex, int endIndex, int rowSize)。产出的 ISlotGroup 可链式调用 priority(int) 设定整理优先级,并有 canBeSorted() 默认实现。
事件
api/BeforeSortEvent.java(继承 Event)在整理发生前触发,携带 getPlayer()、getContainer()、isInGui()、getSortKeyCode()、isFromKeybind();常量 NO_KEY = 0 表示排序并非由按键触发。