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:"

匹配算法

  1. 先 ensureNamespaced;
  2. 构造正则:把字符串里的 . 转义为 \.,把 * 替换为 .*,其余字符原样(只做这两种转义,没有做完整的 Pattern.quote);
  3. 遍历 Item.itemRegistry.getKeys(),用 pattern.matcher(name).matches() 全串匹配;
  4. 命中的用 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)。

相关条目