SortedRegistry 排序注册表
基本信息
| 属性 | 值 |
|---|---|
| 类 | com.gtnewhorizon.structurelib.SortedRegistry |
| 泛型 | SortedRegistry<V> |
| 调试指令 | /sl_registry_debug |
SortedRegistry 是一个按玩家独立排序的注册表。StructureLib 用它登记"某类功能由哪些条目提供",让玩家可以自行调整条目的优先顺序,或禁用某些条目——不同玩家的偏好互不干扰。
它与普通 Map 的区别在于:条目的枚举顺序取决于当前玩家的个性化设置,因此遍历结果因人而异。
构造与注册
| 构造方式 | 说明 |
|---|---|
SortedRegistry() |
匿名注册表,不进入 ALL_REGISTRIES,不可通过指令查询 |
SortedRegistry(String name) |
具名注册表,名字唯一 |
注册条目用 register(String key, V val),key 建议采用数字前缀 + 短横线 + 描述的格式以固定默认顺序,例如 5000-main-inventory、7000-ender-inventory。数字前缀是显式的默认权重。
每玩家排序
排序数据以玩家 UUID 为键存储:
| 方法 | 作用 |
|---|---|
getPlayerOrdering(player) |
按当前玩家的顺序迭代条目值 |
getPlayerOrderingKeys(player) |
返回排序键的 Stream,供调试指令输出 |
registerOrdering(player, ordering, disabled) |
用玩家对象设置排序与禁用列表 |
registerOrdering(UUID, ordering, disabled) |
用 UUID 设置,用于处理玩家离线时的同步 |
registerOrdering 也可由 RegistryOrderSyncMessage 从服务端调用,客户端配置 GUI 的改动即通过该消息同步到服务端。玩家登出时 onPlayerLogOut 清理其数据。
配置读写见 配置 的 registries.<name> 分类。
本 mod 的注册表
StructureLib 自身在 InventoryUtility 中注册了两个:
| 注册表名 | 泛型 | 作用 |
|---|---|---|
stackExtractors |
ItemStackExtractor |
生存自动放置时,按物品栈从某处取物的来源 |
inventoryProviders |
InventoryProvider<?> |
生存自动放置时,从某个容器取物的来源 |
inventoryProviders 预置两个条目:
| 键 | 行为 |
|---|---|
5000-main-inventory |
玩家主背包 36 格,不含护甲栏 |
7000-ender-inventory |
末影箱;需要主背包中至少有一个"末影背包类"物品(由其他 mod 通过 enableEnder 列表注册)才生效 |
注意 stackExtractors 与 inventoryProviders 都以 private static final 声明,不提供公开的注册入口 API,因此其他 mod 无法向这两个注册表添加条目;enableEnder 列表才是可由外部扩展的部分。
相关条目:/sl_registry_debug、配置、多方块构造机制。