AtlasProvider.java

net.minecraft.client.data.AtlasProvider

信息

  • 全限定名:net.minecraft.client.data.AtlasProvider
  • 类型:public class
  • 包:net.minecraft.client.data
  • 源码路径:src/main/java/net/minecraft/client/data/AtlasProvider.java
  • 起始行号:L36
  • 实现:DataProvider
  • 职责:

    TODO

字段/常量

  • TRIM_PALETTE_KEY

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

      TODO

  • TRIM_PALETTE_VALUES

    • 类型: Map<String,Identifier>
    • 修饰符: private static final
    • 源码定位: L38
    • 说明:

      TODO

  • VANILLA_PATTERNS

    • 类型: List<ResourceKey<TrimPattern>>
    • 修饰符: private static final
    • 源码定位: L40
    • 说明:

      TODO

  • HUMANOID_LAYERS

    • 类型: List<EquipmentClientInfo.LayerType>
    • 修饰符: private static final
    • 源码定位: L60
    • 说明:

      TODO

  • pathProvider

    • 类型: PackOutput.PathProvider
    • 修饰符: private final
    • 源码定位: L63
    • 说明:

      TODO

内部类/嵌套类型

构造器

public AtlasProvider(PackOutput output) @ L65

  • 构造器名:AtlasProvider
  • 源码定位:L65
  • 修饰符:public

参数:

  • output: PackOutput

说明:

TODO

方法

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

private static List<Identifier> patternTextures() @ L69

  • 方法名:patternTextures
  • 源码定位:L69
  • 返回类型:List
  • 修饰符:private static

参数:

说明:

TODO

private static SpriteSource forMaterial(SpriteId sprite) @ L83

  • 方法名:forMaterial
  • 源码定位:L83
  • 返回类型:SpriteSource
  • 修饰符:private static

参数:

  • sprite: SpriteId

说明:

TODO

private static SpriteSource forMapper(SpriteMapper mapper) @ L87

  • 方法名:forMapper
  • 源码定位:L87
  • 返回类型:SpriteSource
  • 修饰符:private static

参数:

  • mapper: SpriteMapper

说明:

TODO

private static List<SpriteSource> simpleMapper(SpriteMapper mapper) @ L91

  • 方法名:simpleMapper
  • 源码定位:L91
  • 返回类型:List
  • 修饰符:private static

参数:

  • mapper: SpriteMapper

说明:

TODO

private static List<SpriteSource> noPrefixMapper(String directory) @ L95

  • 方法名:noPrefixMapper
  • 源码定位:L95
  • 返回类型:List
  • 修饰符:private static

参数:

  • directory: String

说明:

TODO

private static Stream<MaterialAssetGroup.AssetInfo> extractAllMaterialAssets() @ L99

  • 方法名:extractAllMaterialAssets
  • 源码定位:L99
  • 返回类型:Stream<MaterialAssetGroup.AssetInfo>
  • 修饰符:private static

参数:

说明:

TODO

private static List<SpriteSource> armorTrims() @ L107

  • 方法名:armorTrims
  • 源码定位:L107
  • 返回类型:List
  • 修饰符:private static

参数:

说明:

TODO

private static List<SpriteSource> blocksList() @ L111

  • 方法名:blocksList
  • 源码定位:L111
  • 返回类型:List
  • 修饰符:private static

参数:

说明:

TODO

private static List<SpriteSource> itemsList() @ L120

  • 方法名:itemsList
  • 源码定位:L120
  • 返回类型:List
  • 修饰符:private static

参数:

说明:

TODO

private static List<SpriteSource> bannerPatterns() @ L136

  • 方法名:bannerPatterns
  • 源码定位:L136
  • 返回类型:List
  • 修饰符:private static

参数:

说明:

TODO

private static List<SpriteSource> shieldPatterns() @ L140

  • 方法名:shieldPatterns
  • 源码定位:L140
  • 返回类型:List
  • 修饰符:private static

参数:

说明:

TODO

private static List<SpriteSource> guiSprites() @ L144

  • 方法名:guiSprites
  • 源码定位:L144
  • 返回类型:List
  • 修饰符:private static

参数:

说明:

TODO

public CompletableFuture<?> run(CachedOutput cache) @ L148

  • 方法名:run
  • 源码定位:L148
  • 返回类型:CompletableFuture<?>
  • 修饰符:public

参数:

  • cache: CachedOutput

说明:

TODO

private CompletableFuture<?> storeAtlas(CachedOutput cache, Identifier atlasId, List<SpriteSource> contents) @ L169

  • 方法名:storeAtlas
  • 源码定位:L169
  • 返回类型:CompletableFuture<?>
  • 修饰符:private

参数:

  • cache: CachedOutput
  • atlasId: Identifier
  • contents: List

说明:

TODO

public String getName() @ L173

  • 方法名:getName
  • 源码定位:L173
  • 返回类型:String
  • 修饰符:public

参数:

说明:

TODO

代码

@OnlyIn(Dist.CLIENT)
public class AtlasProvider implements DataProvider {
    private static final Identifier TRIM_PALETTE_KEY = Identifier.withDefaultNamespace("trims/color_palettes/trim_palette");
    private static final Map<String, Identifier> TRIM_PALETTE_VALUES = extractAllMaterialAssets()
        .collect(Collectors.toMap(MaterialAssetGroup.AssetInfo::suffix, asset -> Identifier.withDefaultNamespace("trims/color_palettes/" + asset.suffix())));
    private static final List<ResourceKey<TrimPattern>> VANILLA_PATTERNS = List.of(
        TrimPatterns.SENTRY,
        TrimPatterns.DUNE,
        TrimPatterns.COAST,
        TrimPatterns.WILD,
        TrimPatterns.WARD,
        TrimPatterns.EYE,
        TrimPatterns.VEX,
        TrimPatterns.TIDE,
        TrimPatterns.SNOUT,
        TrimPatterns.RIB,
        TrimPatterns.SPIRE,
        TrimPatterns.WAYFINDER,
        TrimPatterns.SHAPER,
        TrimPatterns.SILENCE,
        TrimPatterns.RAISER,
        TrimPatterns.HOST,
        TrimPatterns.FLOW,
        TrimPatterns.BOLT
    );
    private static final List<EquipmentClientInfo.LayerType> HUMANOID_LAYERS = List.of(
        EquipmentClientInfo.LayerType.HUMANOID, EquipmentClientInfo.LayerType.HUMANOID_LEGGINGS
    );
    private final PackOutput.PathProvider pathProvider;
 
    public AtlasProvider(PackOutput output) {
        this.pathProvider = output.createPathProvider(PackOutput.Target.RESOURCE_PACK, "atlases");
    }
 
    private static List<Identifier> patternTextures() {
        List<Identifier> result = new ArrayList<>(VANILLA_PATTERNS.size() * HUMANOID_LAYERS.size());
 
        for (ResourceKey<TrimPattern> vanillaPattern : VANILLA_PATTERNS) {
            Identifier assetId = TrimPatterns.defaultAssetId(vanillaPattern);
 
            for (EquipmentClientInfo.LayerType humanoidLayer : HUMANOID_LAYERS) {
                result.add(assetId.withPath(patternPath -> humanoidLayer.trimAssetPrefix() + "/" + patternPath));
            }
        }
 
        return result;
    }
 
    private static SpriteSource forMaterial(SpriteId sprite) {
        return new SingleFile(sprite.texture());
    }
 
    private static SpriteSource forMapper(SpriteMapper mapper) {
        return new DirectoryLister(mapper.prefix(), mapper.prefix() + "/");
    }
 
    private static List<SpriteSource> simpleMapper(SpriteMapper mapper) {
        return List.of(forMapper(mapper));
    }
 
    private static List<SpriteSource> noPrefixMapper(String directory) {
        return List.of(new DirectoryLister(directory, ""));
    }
 
    private static Stream<MaterialAssetGroup.AssetInfo> extractAllMaterialAssets() {
        return ItemModelGenerators.TRIM_MATERIAL_MODELS
            .stream()
            .map(ItemModelGenerators.TrimMaterialData::assets)
            .flatMap(asset -> Stream.concat(Stream.of(asset.base()), asset.overrides().values().stream()))
            .sorted(Comparator.comparing(MaterialAssetGroup.AssetInfo::suffix));
    }
 
    private static List<SpriteSource> armorTrims() {
        return List.of(new PalettedPermutations(patternTextures(), TRIM_PALETTE_KEY, TRIM_PALETTE_VALUES));
    }
 
    private static List<SpriteSource> blocksList() {
        return List.of(
            forMapper(Sheets.BLOCKS_MAPPER),
            forMapper(ConduitRenderer.MAPPER),
            forMaterial(BellRenderer.BELL_TEXTURE),
            forMaterial(EnchantTableRenderer.BOOK_TEXTURE)
        );
    }
 
    private static List<SpriteSource> itemsList() {
        return List.of(
            forMapper(Sheets.ITEMS_MAPPER),
            new PalettedPermutations(
                List.of(
                    ItemModelGenerators.TRIM_PREFIX_HELMET,
                    ItemModelGenerators.TRIM_PREFIX_CHESTPLATE,
                    ItemModelGenerators.TRIM_PREFIX_LEGGINGS,
                    ItemModelGenerators.TRIM_PREFIX_BOOTS
                ),
                TRIM_PALETTE_KEY,
                TRIM_PALETTE_VALUES
            )
        );
    }
 
    private static List<SpriteSource> bannerPatterns() {
        return List.of(forMapper(Sheets.BANNER_MAPPER));
    }
 
    private static List<SpriteSource> shieldPatterns() {
        return List.of(forMapper(Sheets.SHIELD_MAPPER));
    }
 
    private static List<SpriteSource> guiSprites() {
        return List.of(new DirectoryLister("gui/sprites", ""), new DirectoryLister("mob_effect", "mob_effect/"));
    }
 
    @Override
    public CompletableFuture<?> run(CachedOutput cache) {
        return CompletableFuture.allOf(
            this.storeAtlas(cache, AtlasIds.ARMOR_TRIMS, armorTrims()),
            this.storeAtlas(cache, AtlasIds.BANNER_PATTERNS, bannerPatterns()),
            this.storeAtlas(cache, AtlasIds.BEDS, simpleMapper(Sheets.BED_MAPPER)),
            this.storeAtlas(cache, AtlasIds.BLOCKS, blocksList()),
            this.storeAtlas(cache, AtlasIds.ITEMS, itemsList()),
            this.storeAtlas(cache, AtlasIds.CHESTS, simpleMapper(Sheets.CHEST_MAPPER)),
            this.storeAtlas(cache, AtlasIds.DECORATED_POT, simpleMapper(Sheets.DECORATED_POT_MAPPER)),
            this.storeAtlas(cache, AtlasIds.GUI, guiSprites()),
            this.storeAtlas(cache, AtlasIds.MAP_DECORATIONS, noPrefixMapper("map/decorations")),
            this.storeAtlas(cache, AtlasIds.PAINTINGS, noPrefixMapper("painting")),
            this.storeAtlas(cache, AtlasIds.PARTICLES, noPrefixMapper("particle")),
            this.storeAtlas(cache, AtlasIds.SHIELD_PATTERNS, shieldPatterns()),
            this.storeAtlas(cache, AtlasIds.SHULKER_BOXES, simpleMapper(Sheets.SHULKER_MAPPER)),
            this.storeAtlas(cache, AtlasIds.SIGNS, simpleMapper(Sheets.SIGN_MAPPER)),
            this.storeAtlas(cache, AtlasIds.CELESTIALS, noPrefixMapper("environment/celestial"))
        );
    }
 
    private CompletableFuture<?> storeAtlas(CachedOutput cache, Identifier atlasId, List<SpriteSource> contents) {
        return DataProvider.saveStable(cache, SpriteSources.FILE_CODEC, contents, this.pathProvider.json(atlasId));
    }
 
    @Override
    public String getName() {
        return "Atlas Definitions";
    }
}

引用的其他类