ObjectTags 模块

基本信息

net.glease.tc4tweak.modules.objectTag —— 维护「物品 → 要素(Aspect)列表」映射, 是本 mod 最核心的数据结构,被 NEI 集成与多个模块依赖。

3 个类

类 可见性 泛型 / 职责
GetObjectTags public class 对外查询 API
ObjectTagsCache 包私有 class FlushableCache<ConcurrentMap<Item, TIntObjectMap<AspectList>>>
ObjectTagsMutation 包私有 变更记录(供 undo / 重载)

ObjectTagsCache 的三层键

ConcurrentMap<Item, TIntObjectMap<AspectList>>
        ↑物品      ↑meta(整数)  ↑该物品该 meta 的要素集合

两层嵌套:先按 Item,再按 meta(int), 再得 AspectList。只按 Item 缓存会丢失 meta 区分, 这是本 mod 哈希逻辑(见 GenerateItemHash 模块)的前提。

GetObjectTags 的 API

方法 行 返回
newReplacementObjectTagsMap() 37 ConcurrentHashMap<List, AspectList>
stream() 41 Stream<Map.Entry<ItemStack, AspectList>>
getObjectTags(ItemStack) 65 AspectList
静态内部类 InterceptingConcurrentHashMap 250 覆写 put 做写入拦截(即变更追踪)

InterceptingConcurrentHashMap.put 是变更拦截点 —— 每次写都记录到 ObjectTagsMutation。

⚠️ stream() 返回的是自定义迭代器

第 52-63 行手写 hasNext() / next(),因为映射是三层嵌套 (Item → meta → AspectList),需要扁平化成 ItemStack → AspectList 流。 不能直接对 ConcurrentHashMap 取 entrySet().stream()。

相关条目

源码

  • src/main/java/net/glease/tc4tweak/modules/objectTag/GetObjectTags.java
  • src/main/java/net/glease/tc4tweak/modules/objectTag/ObjectTagsCache.java
  • src/main/java/net/glease/tc4tweak/modules/objectTag/ObjectTagsMutation.java