You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Fabric 1.20.6模组开发遇迭代错误:仅可遍历数组或Iterable实例

问题分析与解决

你遇到的运行时错误核心原因是:当前使用的Minecraft/Fabric版本中,ResourceManager.findResources()方法的返回值并非Iterable类型(比如部分新版本中该方法返回Stream<Identifier>而非旧版的Collection<Identifier>),导致增强for循环无法直接遍历。

解决方案

根据返回类型的不同,提供两种直接可用的修复方式:

方式1:改用Stream的forEach遍历

如果findResources()返回的是Stream<Identifier>,直接通过forEach处理每个资源ID:

@Override
public void reload(ResourceManager manager) {
    manager.findResources("my_resource_folder", path -> path.endsWith(".json"))
           .forEach(id -> {
               try(InputStream stream = manager.getResource(id).getInputStream()) {
                   // 在这里添加你的资源处理逻辑,比如读取解析JSON内容
               } catch(Exception e) {
                   LOGGER.error("Error occurred while loading resource json " + id.toString(), e);
               }
           });
}

方式2:转换为Iterable或List后使用增强for循环

如果习惯用增强for循环,可以将返回值转换为Iterable接口实例,或者收集到List中:

// 转换为Iterable的写法
@Override
public void reload(ResourceManager manager) {
    Iterable<Identifier> resourceIds = () -> manager.findResources("my_resource_folder", path -> path.endsWith(".json")).iterator();
    for(Identifier id : resourceIds) {
        try(InputStream stream = manager.getResource(id).getInputStream()) {
            // 资源处理逻辑
        } catch(Exception e) {
            LOGGER.error("Error occurred while loading resource json " + id.toString(), e);
        }
    }
}

或者收集到List(需导入java.util.stream.Collectors和java.util.List):

import java.util.stream.Collectors;
import java.util.List;

@Override
public void reload(ResourceManager manager) {
    List<Identifier> resourceIds = manager.findResources("my_resource_folder", path -> path.endsWith(".json"))
                                          .collect(Collectors.toList());
    for(Identifier id : resourceIds) {
        try(InputStream stream = manager.getResource(id).getInputStream()) {
            // 资源处理逻辑
        } catch(Exception e) {
            LOGGER.error("Error occurred while loading resource json " + id.toString(), e);
        }
    }
}

额外提示

  • 确保你的Minecraft与Fabric API版本和参考文档匹配,不同版本的ResourceManager方法签名可能存在差异;
  • 如果加载的是客户端资源(如模型、纹理),需将ResourceType.SERVER_DATA替换为ResourceType.CLIENT_RESOURCES;
  • 资源监听器的ID(getFabricId()返回的Identifier)建议使用自己模组的命名空间,比如new Identifier(MOD_ID, "my_resources"),避免与其他模组冲突。

内容的提问来源于stack exchange,提问作者Mr. Potatoes

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 06:36:09