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 表示排序并非由按键触发。

关联:物品排序规则 · 兼容适配