BuiltInPackSource.java

net.minecraft.server.packs.repository.BuiltInPackSource

信息

  • 全限定名:net.minecraft.server.packs.repository.BuiltInPackSource
  • 类型:public abstract class
  • 包:net.minecraft.server.packs.repository
  • 源码路径:src/main/java/net/minecraft/server/packs/repository/BuiltInPackSource.java
  • 起始行号:L23
  • 实现:RepositorySource
  • 职责:

    TODO

字段/常量

  • LOGGER

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

      TODO

  • VANILLA_ID

    • 类型: String
    • 修饰符: public static final
    • 源码定位: L25
    • 说明:

      TODO

  • TESTS_ID

    • 类型: String
    • 修饰符: public static final
    • 源码定位: L26
    • 说明:

      TODO

  • CORE_PACK_INFO

    • 类型: KnownPack
    • 修饰符: public static final
    • 源码定位: L27
    • 说明:

      TODO

  • packType

    • 类型: PackType
    • 修饰符: private final
    • 源码定位: L28
    • 说明:

      TODO

  • vanillaPack

    • 类型: VanillaPackResources
    • 修饰符: private final
    • 源码定位: L29
    • 说明:

      TODO

  • packDir

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

      TODO

  • validator

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

      TODO

内部类/嵌套类型

构造器

public BuiltInPackSource(PackType packType, VanillaPackResources vanillaPack, Identifier packDir, DirectoryValidator validator) @ L33

  • 构造器名:BuiltInPackSource
  • 源码定位:L33
  • 修饰符:public

参数:

  • packType: PackType
  • vanillaPack: VanillaPackResources
  • packDir: Identifier
  • validator: DirectoryValidator

说明:

TODO

方法

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

public void loadPacks(Consumer<Pack> result) @ L40

  • 方法名:loadPacks
  • 源码定位:L40
  • 返回类型:void
  • 修饰符:public

参数:

  • result: Consumer

说明:

TODO

protected abstract Pack createVanillaPack(PackResources resources) @ L50

  • 方法名:createVanillaPack
  • 源码定位:L50
  • 返回类型:Pack
  • 修饰符:protected abstract

参数:

  • resources: PackResources

说明:

TODO

protected abstract Component getPackTitle(String id) @ L52

  • 方法名:getPackTitle
  • 源码定位:L52
  • 返回类型:Component
  • 修饰符:protected abstract

参数:

  • id: String

说明:

TODO

public VanillaPackResources getVanillaPack() @ L54

  • 方法名:getVanillaPack
  • 源码定位:L54
  • 返回类型:VanillaPackResources
  • 修饰符:public

参数:

说明:

TODO

private void listBundledPacks(Consumer<Pack> packConsumer) @ L58

  • 方法名:listBundledPacks
  • 源码定位:L58
  • 返回类型:void
  • 修饰符:private

参数:

  • packConsumer: Consumer

说明:

TODO

protected void populatePackList(BiConsumer<String,Function<String,Pack>> discoveredPacks) @ L69

  • 方法名:populatePackList
  • 源码定位:L69
  • 返回类型:void
  • 修饰符:protected

参数:

  • discoveredPacks: BiConsumer<String,Function<String,Pack>>

说明:

TODO

protected void discoverPacksInPath(Path targetDir, BiConsumer<String,Function<String,Pack>> discoveredPacks) @ L73

  • 方法名:discoverPacksInPath
  • 源码定位:L73
  • 返回类型:void
  • 修饰符:protected

参数:

  • targetDir: Path
  • discoveredPacks: BiConsumer<String,Function<String,Pack>>

说明:

TODO

private static String pathToId(Path path) @ L87

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

参数:

  • path: Path

说明:

TODO

protected abstract Pack createBuiltinPack(String id, Pack.ResourcesSupplier resources, Component name) @ L91

  • 方法名:createBuiltinPack
  • 源码定位:L91
  • 返回类型:Pack
  • 修饰符:protected abstract

参数:

  • id: String
  • resources: Pack.ResourcesSupplier
  • name: Component

说明:

TODO

protected static Pack.ResourcesSupplier fixedResources(PackResources instance) @ L93

  • 方法名:fixedResources
  • 源码定位:L93
  • 返回类型:Pack.ResourcesSupplier
  • 修饰符:protected static

参数:

  • instance: PackResources

说明:

TODO

代码

public abstract class BuiltInPackSource implements RepositorySource {
    private static final Logger LOGGER = LogUtils.getLogger();
    public static final String VANILLA_ID = "vanilla";
    public static final String TESTS_ID = "tests";
    public static final KnownPack CORE_PACK_INFO = KnownPack.vanilla("core");
    private final PackType packType;
    private final VanillaPackResources vanillaPack;
    private final Identifier packDir;
    private final DirectoryValidator validator;
 
    public BuiltInPackSource(PackType packType, VanillaPackResources vanillaPack, Identifier packDir, DirectoryValidator validator) {
        this.packType = packType;
        this.vanillaPack = vanillaPack;
        this.packDir = packDir;
        this.validator = validator;
    }
 
    @Override
    public void loadPacks(Consumer<Pack> result) {
        Pack vanilla = this.createVanillaPack(this.vanillaPack);
        if (vanilla != null) {
            result.accept(vanilla);
        }
 
        this.listBundledPacks(result);
    }
 
    protected abstract @Nullable Pack createVanillaPack(final PackResources resources);
 
    protected abstract Component getPackTitle(final String id);
 
    public VanillaPackResources getVanillaPack() {
        return this.vanillaPack;
    }
 
    private void listBundledPacks(Consumer<Pack> packConsumer) {
        Map<String, Function<String, Pack>> discoveredPacks = new HashMap<>();
        this.populatePackList(discoveredPacks::put);
        discoveredPacks.forEach((id, packSupplier) -> {
            Pack pack = packSupplier.apply(id);
            if (pack != null) {
                packConsumer.accept(pack);
            }
        });
    }
 
    protected void populatePackList(BiConsumer<String, Function<String, Pack>> discoveredPacks) {
        this.vanillaPack.listRawPaths(this.packType, this.packDir, path -> this.discoverPacksInPath(path, discoveredPacks));
    }
 
    protected void discoverPacksInPath(@Nullable Path targetDir, BiConsumer<String, Function<String, @Nullable Pack>> discoveredPacks) {
        if (targetDir != null && Files.isDirectory(targetDir)) {
            try {
                FolderRepositorySource.discoverPacks(
                    targetDir,
                    this.validator,
                    (path, resources) -> discoveredPacks.accept(pathToId(path), id -> this.createBuiltinPack(id, resources, this.getPackTitle(id)))
                );
            } catch (IOException var4) {
                LOGGER.warn("Failed to discover packs in {}", targetDir, var4);
            }
        }
    }
 
    private static String pathToId(Path path) {
        return StringUtils.removeEnd(path.getFileName().toString(), ".zip");
    }
 
    protected abstract @Nullable Pack createBuiltinPack(final String id, final Pack.ResourcesSupplier resources, final Component name);
 
    protected static Pack.ResourcesSupplier fixedResources(PackResources instance) {
        return new Pack.ResourcesSupplier() {
            @Override
            public PackResources openPrimary(PackLocationInfo location) {
                return instance;
            }
 
            @Override
            public PackResources openFull(PackLocationInfo location, Pack.Metadata metadata) {
                return instance;
            }
        };
    }
}

引用的其他类