Main.java

net.minecraft.data.Main

信息

  • 全限定名:net.minecraft.data.Main
  • 类型:public class
  • 包:net.minecraft.data
  • 源码路径:src/main/java/net/minecraft/data/Main.java
  • 起始行号:L68
  • 职责:

    TODO

字段/常量

内部类/嵌套类型

构造器

方法

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

public static void main(String[] args) @ L69

  • 方法名:main
  • 源码定位:L69
  • 返回类型:void
  • 修饰符:public static

参数:

  • args: String[]

说明:

TODO

private static <T extends DataProvider> DataProvider.Factory<T> bindRegistries(BiFunction<PackOutput,CompletableFuture<HolderLookup.Provider>,T> target, CompletableFuture<HolderLookup.Provider> registries) @ L99

  • 方法名:bindRegistries
  • 源码定位:L99
  • 返回类型: DataProvider.Factory
  • 修饰符:private static

参数:

  • target: BiFunction<PackOutput,CompletableFuture<HolderLookup.Provider>,T>
  • registries: CompletableFuture<HolderLookup.Provider>

说明:

TODO

public static void addServerConverters(DataGenerator generator, Collection<Path> input, boolean server, boolean dev) @ L105

  • 方法名:addServerConverters
  • 源码定位:L105
  • 返回类型:void
  • 修饰符:public static

参数:

  • generator: DataGenerator
  • input: Collection
  • server: boolean
  • dev: boolean

说明:

TODO

public static void addServerDefinitionProviders(DataGenerator generator, boolean server, boolean reports) @ L112

  • 方法名:addServerDefinitionProviders
  • 源码定位:L112
  • 返回类型:void
  • 修饰符:public static

参数:

  • generator: DataGenerator
  • server: boolean
  • reports: boolean

说明:

TODO

代码

public class Main {
    @SuppressForbidden(reason = "System.out needed before bootstrap")
    public static void main(String[] args) throws IOException {
        SharedConstants.tryDetectVersion();
        OptionParser parser = new OptionParser();
        OptionSpec<Void> helpOption = parser.accepts("help", "Show the help menu").forHelp();
        OptionSpec<Void> serverOption = parser.accepts("server", "Include server generators");
        OptionSpec<Void> devOption = parser.accepts("dev", "Include development tools");
        OptionSpec<Void> reportsOption = parser.accepts("reports", "Include data reports");
        parser.accepts("validate", "Validate inputs");
        OptionSpec<Void> allOption = parser.accepts("all", "Include all generators");
        OptionSpec<String> outputOption = parser.accepts("output", "Output folder").withRequiredArg().defaultsTo("generated");
        OptionSpec<String> inputOption = parser.accepts("input", "Input folder").withRequiredArg();
        OptionSet optionSet = parser.parse(args);
        if (!optionSet.has(helpOption) && optionSet.hasOptions()) {
            Path output = Paths.get(outputOption.value(optionSet));
            boolean allOptions = optionSet.has(allOption);
            boolean server = allOptions || optionSet.has(serverOption);
            boolean dev = allOptions || optionSet.has(devOption);
            boolean reports = allOptions || optionSet.has(reportsOption);
            Collection<Path> input = optionSet.valuesOf(inputOption).stream().map(x$0 -> Paths.get(x$0)).toList();
            DataGenerator generator = new DataGenerator.Cached(output, SharedConstants.getCurrentVersion(), true);
            addServerDefinitionProviders(generator, server, reports);
            addServerConverters(generator, input, server, dev);
            generator.run();
            Util.shutdownExecutors();
        } else {
            parser.printHelpOn(System.out);
        }
    }
 
    private static <T extends DataProvider> DataProvider.Factory<T> bindRegistries(
        BiFunction<PackOutput, CompletableFuture<HolderLookup.Provider>, T> target, CompletableFuture<HolderLookup.Provider> registries
    ) {
        return output -> target.apply(output, registries);
    }
 
    public static void addServerConverters(DataGenerator generator, Collection<Path> input, boolean server, boolean dev) {
        DataGenerator.PackGenerator commonVanillaPack = generator.getVanillaPack(server);
        commonVanillaPack.addProvider(o -> new SnbtToNbt(o, input).addFilter(new StructureUpdater()));
        DataGenerator.PackGenerator devVanillaPack = generator.getVanillaPack(dev);
        devVanillaPack.addProvider(o -> new NbtToSnbt(o, input));
    }
 
    public static void addServerDefinitionProviders(DataGenerator generator, boolean server, boolean reports) {
        CompletableFuture<HolderLookup.Provider> vanillaRegistries = CompletableFuture.supplyAsync(VanillaRegistries::createLookup, Util.backgroundExecutor());
        DataGenerator.PackGenerator serverVanillaPack = generator.getVanillaPack(server);
        serverVanillaPack.addProvider(bindRegistries(RegistriesDatapackGenerator::new, vanillaRegistries));
        serverVanillaPack.addProvider(bindRegistries(VanillaAdvancementProvider::create, vanillaRegistries));
        serverVanillaPack.addProvider(bindRegistries(VanillaLootTableProvider::create, vanillaRegistries));
        serverVanillaPack.addProvider(bindRegistries(VanillaRecipeProvider.Runner::new, vanillaRegistries));
        TagsProvider<Block> vanillaBlockTagsProvider = serverVanillaPack.addProvider(bindRegistries(VanillaBlockTagsProvider::new, vanillaRegistries));
        TagsProvider<Item> vanillaItemTagsProvider = serverVanillaPack.addProvider(bindRegistries(VanillaItemTagsProvider::new, vanillaRegistries));
        TagsProvider<Biome> vanillaBiomeTagsProvider = serverVanillaPack.addProvider(bindRegistries(BiomeTagsProvider::new, vanillaRegistries));
        TagsProvider<BannerPattern> vanillaBannerPatternTagsProvider = serverVanillaPack.addProvider(
            bindRegistries(BannerPatternTagsProvider::new, vanillaRegistries)
        );
        TagsProvider<Structure> vanillaStructureTagsProvider = serverVanillaPack.addProvider(bindRegistries(StructureTagsProvider::new, vanillaRegistries));
        serverVanillaPack.addProvider(bindRegistries(DamageTypeTagsProvider::new, vanillaRegistries));
        serverVanillaPack.addProvider(bindRegistries(DialogTagsProvider::new, vanillaRegistries));
        serverVanillaPack.addProvider(bindRegistries(EntityTypeTagsProvider::new, vanillaRegistries));
        serverVanillaPack.addProvider(bindRegistries(FlatLevelGeneratorPresetTagsProvider::new, vanillaRegistries));
        serverVanillaPack.addProvider(bindRegistries(FluidTagsProvider::new, vanillaRegistries));
        serverVanillaPack.addProvider(bindRegistries(GameEventTagsProvider::new, vanillaRegistries));
        serverVanillaPack.addProvider(bindRegistries(InstrumentTagsProvider::new, vanillaRegistries));
        serverVanillaPack.addProvider(bindRegistries(PaintingVariantTagsProvider::new, vanillaRegistries));
        serverVanillaPack.addProvider(bindRegistries(PoiTypeTagsProvider::new, vanillaRegistries));
        serverVanillaPack.addProvider(bindRegistries(WorldPresetTagsProvider::new, vanillaRegistries));
        serverVanillaPack.addProvider(bindRegistries(VanillaEnchantmentTagsProvider::new, vanillaRegistries));
        serverVanillaPack.addProvider(bindRegistries(TimelineTagsProvider::new, vanillaRegistries));
        serverVanillaPack.addProvider(bindRegistries(PotionTagsProvider::new, vanillaRegistries));
        serverVanillaPack.addProvider(bindRegistries(VillagerTradesTagsProvider::new, vanillaRegistries));
        serverVanillaPack.addProvider(bindRegistries(FeatureTagsProvider::new, vanillaRegistries));
        serverVanillaPack = generator.getVanillaPack(reports);
        serverVanillaPack.addProvider(bindRegistries(BiomeParametersDumpReport::new, vanillaRegistries));
        serverVanillaPack.addProvider(bindRegistries(RegistryComponentsReport::new, vanillaRegistries));
        serverVanillaPack.addProvider(bindRegistries(BlockListReport::new, vanillaRegistries));
        serverVanillaPack.addProvider(bindRegistries(CommandsReport::new, vanillaRegistries));
        serverVanillaPack.addProvider(RegistryDumpReport::new);
        serverVanillaPack.addProvider(PacketReport::new);
        serverVanillaPack.addProvider(DatapackStructureReport::new);
        serverVanillaPack.addProvider(JsonRpcApiSchema::new);
        CompletableFuture<RegistrySetBuilder.PatchedRegistries> tradeRebalanceRegistries = TradeRebalanceRegistries.createLookup(vanillaRegistries);
        CompletableFuture<HolderLookup.Provider> patchedRegistrySet = tradeRebalanceRegistries.thenApply(RegistrySetBuilder.PatchedRegistries::patches);
        DataGenerator.PackGenerator tradeRebalancePack = generator.getBuiltinDatapack(server, "trade_rebalance");
        tradeRebalancePack.addProvider(bindRegistries(RegistriesDatapackGenerator::new, patchedRegistrySet));
        tradeRebalancePack.addProvider(
            o -> PackMetadataGenerator.forFeaturePack(
                o, Component.translatable("dataPack.trade_rebalance.description"), FeatureFlagSet.of(FeatureFlags.TRADE_REBALANCE)
            )
        );
        CompletableFuture<HolderLookup.Provider> patchedRegistries = tradeRebalanceRegistries.thenApply(RegistrySetBuilder.PatchedRegistries::full);
        tradeRebalancePack.addProvider(bindRegistries(TradeRebalanceLootTableProvider::create, patchedRegistries));
        tradeRebalancePack.addProvider(bindRegistries(TradeRebalanceEnchantmentTagsProvider::new, patchedRegistries));
        tradeRebalancePack.addProvider(bindRegistries(TradeRebalanceTradeTagsProvider::new, patchedRegistries));
        serverVanillaPack = generator.getBuiltinDatapack(server, "redstone_experiments");
        serverVanillaPack.addProvider(
            o -> PackMetadataGenerator.forFeaturePack(
                o, Component.translatable("dataPack.redstone_experiments.description"), FeatureFlagSet.of(FeatureFlags.REDSTONE_EXPERIMENTS)
            )
        );
        serverVanillaPack = generator.getBuiltinDatapack(server, "minecart_improvements");
        serverVanillaPack.addProvider(
            o -> PackMetadataGenerator.forFeaturePack(
                o, Component.translatable("dataPack.minecart_improvements.description"), FeatureFlagSet.of(FeatureFlags.MINECART_IMPROVEMENTS)
            )
        );
    }
}

引用的其他类

  • SharedConstants

    • 引用位置: 方法调用
    • 关联成员: SharedConstants.getCurrentVersion(), SharedConstants.tryDetectVersion()
  • HolderLookup

    • 引用位置: 参数
  • DataGenerator

    • 引用位置: 参数/方法调用/构造调用
    • 关联成员: Cached(), DataGenerator.Cached()
  • DataProvider

    • 引用位置: 返回值
  • PackOutput

    • 引用位置: 参数
  • PackMetadataGenerator

    • 引用位置: 方法调用
    • 关联成员: PackMetadataGenerator.forFeaturePack()
  • TradeRebalanceRegistries

    • 引用位置: 方法调用
    • 关联成员: TradeRebalanceRegistries.createLookup()
  • NbtToSnbt

    • 引用位置: 构造调用
    • 关联成员: NbtToSnbt()
  • SnbtToNbt

    • 引用位置: 构造调用
    • 关联成员: SnbtToNbt()
  • StructureUpdater

    • 引用位置: 构造调用
    • 关联成员: StructureUpdater()
  • Component

    • 引用位置: 方法调用
    • 关联成员: Component.translatable()
  • Util

    • 引用位置: 方法调用
    • 关联成员: Util.backgroundExecutor(), Util.shutdownExecutors()
  • FeatureFlagSet

    • 引用位置: 方法调用
    • 关联成员: FeatureFlagSet.of()