跳到正文
烈焰甘蔗Wiki

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、配置、多方块构造机制。

浏览全部模组