SpriteSourceList.java

net.minecraft.client.renderer.texture.atlas.SpriteSourceList

信息

  • 全限定名:net.minecraft.client.renderer.texture.atlas.SpriteSourceList
  • 类型:public class
  • 包:net.minecraft.client.renderer.texture.atlas
  • 源码路径:src/main/java/net/minecraft/client/renderer/texture/atlas/SpriteSourceList.java
  • 起始行号:L29
  • 职责:

    TODO

字段/常量

  • LOGGER

    • 类型: Logger
    • 修饰符: private static final
    • 源码定位: L30
    • 说明:

      TODO

  • ATLAS_INFO_CONVERTER

    • 类型: FileToIdConverter
    • 修饰符: private static final
    • 源码定位: L31
    • 说明:

      TODO

  • sources

    • 类型: List<SpriteSource>
    • 修饰符: private final
    • 源码定位: L32
    • 说明:

      TODO

内部类/嵌套类型

构造器

private SpriteSourceList(List<SpriteSource> sources) @ L34

  • 构造器名:SpriteSourceList
  • 源码定位:L34
  • 修饰符:private

参数:

  • sources: List

说明:

TODO

方法

下面的方法块按源码顺序生成。

public List<SpriteSource.Loader> list(ResourceManager resourceManager) @ L38

  • 方法名:list
  • 源码定位:L38
  • 返回类型:List<SpriteSource.Loader>
  • 修饰符:public

参数:

  • resourceManager: ResourceManager

说明:

TODO

public static SpriteSourceList load(ResourceManager resourceManager, Identifier atlasId) @ L73

  • 方法名:load
  • 源码定位:L73
  • 返回类型:SpriteSourceList
  • 修饰符:public static

参数:

  • resourceManager: ResourceManager
  • atlasId: Identifier

说明:

TODO

代码

@OnlyIn(Dist.CLIENT)
public class SpriteSourceList {
    private static final Logger LOGGER = LogUtils.getLogger();
    private static final FileToIdConverter ATLAS_INFO_CONVERTER = new FileToIdConverter("atlases", ".json");
    private final List<SpriteSource> sources;
 
    private SpriteSourceList(List<SpriteSource> sources) {
        this.sources = sources;
    }
 
    public List<SpriteSource.Loader> list(ResourceManager resourceManager) {
        final Map<Identifier, SpriteSource.DiscardableLoader> sprites = new HashMap<>();
        SpriteSource.Output output = new SpriteSource.Output() {
            {
                Objects.requireNonNull(SpriteSourceList.this);
            }
 
            @Override
            public void add(Identifier id, SpriteSource.DiscardableLoader sprite) {
                SpriteSource.DiscardableLoader previous = sprites.put(id, sprite);
                if (previous != null) {
                    previous.discard();
                }
            }
 
            @Override
            public void removeAll(Predicate<Identifier> predicate) {
                Iterator<Entry<Identifier, SpriteSource.DiscardableLoader>> it = sprites.entrySet().iterator();
 
                while (it.hasNext()) {
                    Entry<Identifier, SpriteSource.DiscardableLoader> entry = it.next();
                    if (predicate.test(entry.getKey())) {
                        entry.getValue().discard();
                        it.remove();
                    }
                }
            }
        };
        this.sources.forEach(s -> s.run(resourceManager, output));
        Builder<SpriteSource.Loader> result = ImmutableList.builder();
        result.add(loader -> MissingTextureAtlasSprite.create());
        result.addAll(sprites.values());
        return result.build();
    }
 
    public static SpriteSourceList load(ResourceManager resourceManager, Identifier atlasId) {
        Identifier resourceId = ATLAS_INFO_CONVERTER.idToFile(atlasId);
        List<SpriteSource> loaders = new ArrayList<>();
 
        for (Resource entry : resourceManager.getResourceStack(resourceId)) {
            try (BufferedReader reader = entry.openAsReader()) {
                Dynamic<JsonElement> contents = new Dynamic<>(JsonOps.INSTANCE, StrictJsonParser.parse(reader));
                loaders.addAll(SpriteSources.FILE_CODEC.parse(contents).getOrThrow());
            } catch (Exception var11) {
                LOGGER.error("Failed to parse atlas definition {} in pack {}", resourceId, entry.sourcePackId(), var11);
            }
        }
 
        return new SpriteSourceList(loaders);
    }
}

引用的其他类