ItemConfigHelper
把配置里写的物品 ID 字符串(支持通配符)解析成 net.minecraft.item.Item 集合。背包类 mod 常用它来实现"不可嵌套物品"黑名单。
基本信息
| 属性 | 值 |
|---|---|
| 类型 | 配置解析工具 |
| 包路径 | makamys.mclib.config.item |
| 配置文件 | 无(只提供工具,黑名单数据由宿主 mod 提供) |
| 依赖 | 直接读 1.7.10 的 Item.itemRegistry |
ItemConfigHelper
| 方法 | 签名 | 说明 |
|---|---|---|
| 解析字符串 | public static List<Item> resolveItem(String itemStr) |
返回所有匹配项,不是单个 |
| 解析列表 | public static List<Item> resolveItemList(List<String> list) |
逐条调用上面的方法并把结果 addAll 合并 |
| 补命名空间 | public static String ensureNamespaced(String name) |
不含 : 时前置 "minecraft:" |
匹配算法
- 先
ensureNamespaced; - 构造正则:把字符串里的
.转义为\.,把*替换为.*,其余字符原样(只做这两种转义,没有做完整的Pattern.quote); - 遍历
Item.itemRegistry.getKeys(),用pattern.matcher(name).matches()全串匹配; - 命中的用
Item.itemRegistry.getObject(name)取出加入结果。
因此 minecraft:diamond* 会匹配 minecraft:diamond、minecraft:diamond_sword 等;modid:ore* 同理。含 : 的完整 ID 也支持。
⚠️ 代价:黑名单里每个字符串都要遍历一遍整个物品注册表,是 O(字符串数 × 物品数)。
BackpackConfigHelper
包路径 makamys.mclib.config.item。类注释:“背包或类似便携存储物品的配置帮助类”。
| 成员 | 值 / 签名 | 说明 |
|---|---|---|
| 说明后缀常量 | public static final String CONFIG_DESCRIPTION_SUFFIX |
值为 "\nThe '*' character can be used as a wildcard to match one or more characters.\n"。宿主 mod 拼配置说明时用得上 |
| 默认黑名单 | public static String[] NON_NESTABLE_BACKPACK_BLACKLIST |
值为 {"JABBA:mover*", "ExtraUtilities:*bedrockium*"} — 两个已知的"容器型物品" |
| 构造 | BackpackConfigHelper(List<String> blacklist) |
用 ItemConfigHelper.resolveItemList 解析并收集成 Set<Item>,然后 MCLib.LOGGER.debug("Resolved backpack blacklist to " + ...) |
| 判定 | public boolean isAllowed(ItemStack is) |
is == null 或物品不在黑名单里就返回 true |
NON_NESTABLE_BACKPACK_BLACKLIST 是库给出的建议默认值,由宿主 mod 读取后交给构造函数;库自己不读它。
isAllowed 接受 ItemStack 而不是 Item,方便调用方直接传玩家手里的东西;is == null 视为允许(不拦空槽)。
使用方式(推测的典型流程)
MCLib 自身没有背包功能(见分类页的"本 mod 没有"章节),所以这两个类是纯工具。宿主 mod 自己的流程大致是:读自己的配置 → 取黑名单字符串列表,无配置时用 NON_NESTABLE_BACKPACK_BLACKLIST → new BackpackConfigHelper(list) → 在放置物品进背包前调 isAllowed(stack)。
相关条目
- MCLib 核心与任务队列 - 构造时用到的
MCLib.LOGGER