165 lines
9.9 KiB
Java
165 lines
9.9 KiB
Java
package net.minecraft.data;
|
|
|
|
import java.io.IOException;
|
|
import java.nio.file.Path;
|
|
import java.nio.file.Paths;
|
|
import java.util.Collection;
|
|
import java.util.concurrent.CompletableFuture;
|
|
import java.util.function.BiFunction;
|
|
import joptsimple.OptionParser;
|
|
import joptsimple.OptionSet;
|
|
import joptsimple.OptionSpec;
|
|
import net.minecraft.SharedConstants;
|
|
import net.minecraft.SuppressForbidden;
|
|
import net.minecraft.Util;
|
|
import net.minecraft.core.RegistrySetBuilder;
|
|
import net.minecraft.core.HolderLookup.Provider;
|
|
import net.minecraft.data.DataGenerator.PackGenerator;
|
|
import net.minecraft.data.advancements.packs.VanillaAdvancementProvider;
|
|
import net.minecraft.data.info.BiomeParametersDumpReport;
|
|
import net.minecraft.data.info.BlockListReport;
|
|
import net.minecraft.data.info.CommandsReport;
|
|
import net.minecraft.data.info.DatapackStructureReport;
|
|
import net.minecraft.data.info.ItemListReport;
|
|
import net.minecraft.data.info.PacketReport;
|
|
import net.minecraft.data.info.RegistryDumpReport;
|
|
import net.minecraft.data.loot.packs.TradeRebalanceLootTableProvider;
|
|
import net.minecraft.data.loot.packs.VanillaLootTableProvider;
|
|
import net.minecraft.data.metadata.PackMetadataGenerator;
|
|
import net.minecraft.data.recipes.packs.VanillaRecipeProvider;
|
|
import net.minecraft.data.registries.RegistriesDatapackGenerator;
|
|
import net.minecraft.data.registries.TradeRebalanceRegistries;
|
|
import net.minecraft.data.registries.VanillaRegistries;
|
|
import net.minecraft.data.structures.NbtToSnbt;
|
|
import net.minecraft.data.structures.SnbtToNbt;
|
|
import net.minecraft.data.structures.StructureUpdater;
|
|
import net.minecraft.data.tags.BannerPatternTagsProvider;
|
|
import net.minecraft.data.tags.BiomeTagsProvider;
|
|
import net.minecraft.data.tags.CatVariantTagsProvider;
|
|
import net.minecraft.data.tags.DamageTypeTagsProvider;
|
|
import net.minecraft.data.tags.EntityTypeTagsProvider;
|
|
import net.minecraft.data.tags.FlatLevelGeneratorPresetTagsProvider;
|
|
import net.minecraft.data.tags.FluidTagsProvider;
|
|
import net.minecraft.data.tags.GameEventTagsProvider;
|
|
import net.minecraft.data.tags.InstrumentTagsProvider;
|
|
import net.minecraft.data.tags.PaintingVariantTagsProvider;
|
|
import net.minecraft.data.tags.PoiTypeTagsProvider;
|
|
import net.minecraft.data.tags.StructureTagsProvider;
|
|
import net.minecraft.data.tags.TagsProvider;
|
|
import net.minecraft.data.tags.TradeRebalanceEnchantmentTagsProvider;
|
|
import net.minecraft.data.tags.TradeRebalanceStructureTagsProvider;
|
|
import net.minecraft.data.tags.VanillaBlockTagsProvider;
|
|
import net.minecraft.data.tags.VanillaEnchantmentTagsProvider;
|
|
import net.minecraft.data.tags.VanillaItemTagsProvider;
|
|
import net.minecraft.data.tags.WorldPresetTagsProvider;
|
|
import net.minecraft.network.chat.Component;
|
|
import net.minecraft.obfuscate.DontObfuscate;
|
|
import net.minecraft.world.flag.FeatureFlagSet;
|
|
import net.minecraft.world.flag.FeatureFlags;
|
|
import net.minecraft.world.item.Item;
|
|
import net.minecraft.world.level.biome.Biome;
|
|
import net.minecraft.world.level.block.Block;
|
|
import net.minecraft.world.level.block.entity.BannerPattern;
|
|
import net.minecraft.world.level.levelgen.structure.Structure;
|
|
|
|
public class Main {
|
|
@SuppressForbidden(
|
|
reason = "System.out needed before bootstrap"
|
|
)
|
|
@DontObfuscate
|
|
public static void main(String[] strings) throws IOException {
|
|
SharedConstants.tryDetectVersion();
|
|
OptionParser optionParser = new OptionParser();
|
|
OptionSpec<Void> optionSpec = optionParser.accepts("help", "Show the help menu").forHelp();
|
|
OptionSpec<Void> optionSpec2 = optionParser.accepts("server", "Include server generators");
|
|
OptionSpec<Void> optionSpec3 = optionParser.accepts("dev", "Include development tools");
|
|
OptionSpec<Void> optionSpec4 = optionParser.accepts("reports", "Include data reports");
|
|
optionParser.accepts("validate", "Validate inputs");
|
|
OptionSpec<Void> optionSpec5 = optionParser.accepts("all", "Include all generators");
|
|
OptionSpec<String> optionSpec6 = optionParser.accepts("output", "Output folder").withRequiredArg().defaultsTo("generated");
|
|
OptionSpec<String> optionSpec7 = optionParser.accepts("input", "Input folder").withRequiredArg();
|
|
OptionSet optionSet = optionParser.parse(strings);
|
|
if (!optionSet.has(optionSpec) && optionSet.hasOptions()) {
|
|
Path path = Paths.get(optionSpec6.value(optionSet));
|
|
boolean bl = optionSet.has(optionSpec5);
|
|
boolean bl2 = bl || optionSet.has(optionSpec2);
|
|
boolean bl3 = bl || optionSet.has(optionSpec3);
|
|
boolean bl4 = bl || optionSet.has(optionSpec4);
|
|
Collection<Path> collection = optionSet.valuesOf(optionSpec7).stream().map(string -> Paths.get(string)).toList();
|
|
DataGenerator dataGenerator = new DataGenerator(path, SharedConstants.getCurrentVersion(), true);
|
|
addServerProviders(dataGenerator, collection, bl2, bl3, bl4);
|
|
dataGenerator.run();
|
|
} else {
|
|
optionParser.printHelpOn(System.out);
|
|
}
|
|
}
|
|
|
|
private static <T extends DataProvider> DataProvider.Factory<T> bindRegistries(
|
|
BiFunction<PackOutput, CompletableFuture<Provider>, T> tagProviderFactory, CompletableFuture<Provider> lookupProvider
|
|
) {
|
|
return packOutput -> (T)tagProviderFactory.apply(packOutput, lookupProvider);
|
|
}
|
|
|
|
public static void addServerProviders(DataGenerator dataGenerator, Collection<Path> paths, boolean server, boolean dev, boolean reports) {
|
|
PackGenerator packGenerator = dataGenerator.getVanillaPack(server);
|
|
packGenerator.addProvider(packOutput -> new SnbtToNbt(packOutput, paths).addFilter(new StructureUpdater()));
|
|
CompletableFuture<Provider> completableFuture = CompletableFuture.supplyAsync(VanillaRegistries::createLookup, Util.backgroundExecutor());
|
|
PackGenerator packGenerator2 = dataGenerator.getVanillaPack(server);
|
|
packGenerator2.addProvider(bindRegistries(RegistriesDatapackGenerator::new, completableFuture));
|
|
packGenerator2.addProvider(bindRegistries(VanillaAdvancementProvider::create, completableFuture));
|
|
packGenerator2.addProvider(bindRegistries(VanillaLootTableProvider::create, completableFuture));
|
|
packGenerator2.addProvider(bindRegistries(VanillaRecipeProvider.Runner::new, completableFuture));
|
|
TagsProvider<Block> tagsProvider = packGenerator2.addProvider(bindRegistries(VanillaBlockTagsProvider::new, completableFuture));
|
|
TagsProvider<Item> tagsProvider2 = packGenerator2.addProvider(
|
|
packOutput -> new VanillaItemTagsProvider(packOutput, completableFuture, tagsProvider.contentsGetter())
|
|
);
|
|
TagsProvider<Biome> tagsProvider3 = packGenerator2.addProvider(bindRegistries(BiomeTagsProvider::new, completableFuture));
|
|
TagsProvider<BannerPattern> tagsProvider4 = packGenerator2.addProvider(bindRegistries(BannerPatternTagsProvider::new, completableFuture));
|
|
TagsProvider<Structure> tagsProvider5 = packGenerator2.addProvider(bindRegistries(StructureTagsProvider::new, completableFuture));
|
|
packGenerator2.addProvider(bindRegistries(CatVariantTagsProvider::new, completableFuture));
|
|
packGenerator2.addProvider(bindRegistries(DamageTypeTagsProvider::new, completableFuture));
|
|
packGenerator2.addProvider(bindRegistries(EntityTypeTagsProvider::new, completableFuture));
|
|
packGenerator2.addProvider(bindRegistries(FlatLevelGeneratorPresetTagsProvider::new, completableFuture));
|
|
packGenerator2.addProvider(bindRegistries(FluidTagsProvider::new, completableFuture));
|
|
packGenerator2.addProvider(bindRegistries(GameEventTagsProvider::new, completableFuture));
|
|
packGenerator2.addProvider(bindRegistries(InstrumentTagsProvider::new, completableFuture));
|
|
packGenerator2.addProvider(bindRegistries(PaintingVariantTagsProvider::new, completableFuture));
|
|
packGenerator2.addProvider(bindRegistries(PoiTypeTagsProvider::new, completableFuture));
|
|
packGenerator2.addProvider(bindRegistries(WorldPresetTagsProvider::new, completableFuture));
|
|
packGenerator2.addProvider(bindRegistries(VanillaEnchantmentTagsProvider::new, completableFuture));
|
|
packGenerator2 = dataGenerator.getVanillaPack(dev);
|
|
packGenerator2.addProvider(packOutput -> new NbtToSnbt(packOutput, paths));
|
|
packGenerator2 = dataGenerator.getVanillaPack(reports);
|
|
packGenerator2.addProvider(bindRegistries(BiomeParametersDumpReport::new, completableFuture));
|
|
packGenerator2.addProvider(bindRegistries(ItemListReport::new, completableFuture));
|
|
packGenerator2.addProvider(bindRegistries(BlockListReport::new, completableFuture));
|
|
packGenerator2.addProvider(bindRegistries(CommandsReport::new, completableFuture));
|
|
packGenerator2.addProvider(RegistryDumpReport::new);
|
|
packGenerator2.addProvider(PacketReport::new);
|
|
packGenerator2.addProvider(DatapackStructureReport::new);
|
|
CompletableFuture<RegistrySetBuilder.PatchedRegistries> completableFuture2 = TradeRebalanceRegistries.createLookup(completableFuture);
|
|
CompletableFuture<Provider> completableFuture3 = completableFuture2.thenApply(RegistrySetBuilder.PatchedRegistries::patches);
|
|
PackGenerator packGenerator3 = dataGenerator.getBuiltinDatapack(server, "trade_rebalance");
|
|
packGenerator3.addProvider(bindRegistries(RegistriesDatapackGenerator::new, completableFuture3));
|
|
packGenerator3.addProvider(
|
|
packOutput -> PackMetadataGenerator.forFeaturePack(
|
|
packOutput, Component.translatable("dataPack.trade_rebalance.description"), FeatureFlagSet.of(FeatureFlags.TRADE_REBALANCE)
|
|
)
|
|
);
|
|
packGenerator3.addProvider(bindRegistries(TradeRebalanceLootTableProvider::create, completableFuture));
|
|
packGenerator3.addProvider(bindRegistries(TradeRebalanceStructureTagsProvider::new, completableFuture));
|
|
packGenerator3.addProvider(bindRegistries(TradeRebalanceEnchantmentTagsProvider::new, completableFuture));
|
|
packGenerator2 = dataGenerator.getBuiltinDatapack(server, "redstone_experiments");
|
|
packGenerator2.addProvider(
|
|
packOutput -> PackMetadataGenerator.forFeaturePack(
|
|
packOutput, Component.translatable("dataPack.redstone_experiments.description"), FeatureFlagSet.of(FeatureFlags.REDSTONE_EXPERIMENTS)
|
|
)
|
|
);
|
|
packGenerator2 = dataGenerator.getBuiltinDatapack(server, "minecart_improvements");
|
|
packGenerator2.addProvider(
|
|
packOutput -> PackMetadataGenerator.forFeaturePack(
|
|
packOutput, Component.translatable("dataPack.minecart_improvements.description"), FeatureFlagSet.of(FeatureFlags.MINECART_IMPROVEMENTS)
|
|
)
|
|
);
|
|
}
|
|
}
|