Paper/paper-api-generator/src/main/java/io/papermc/generator/Main.java

103 lines
4.2 KiB
Java
Raw Normal View History

package io.papermc.generator;
2024-01-20 22:54:31 +01:00
import com.google.common.util.concurrent.MoreExecutors;
import com.mojang.logging.LogUtils;
2024-02-14 18:56:50 +01:00
import io.papermc.generator.rewriter.SourceRewriter;
import io.papermc.generator.types.SourceGenerator;
2024-03-04 18:20:24 +01:00
import io.papermc.generator.types.craftblockdata.CraftBlockDataGenerators;
import io.papermc.generator.utils.experimental.TagCollector;
import io.papermc.generator.utils.experimental.TagResult;
2024-03-04 18:20:24 +01:00
import java.io.IOException;
2024-02-22 19:09:35 +01:00
import java.nio.file.Files;
import java.nio.file.Path;
import net.minecraft.SharedConstants;
2024-01-20 22:54:31 +01:00
import net.minecraft.commands.Commands;
import net.minecraft.core.LayeredRegistryAccess;
import net.minecraft.core.RegistryAccess;
import net.minecraft.resources.RegistryDataLoader;
import net.minecraft.server.Bootstrap;
import net.minecraft.server.RegistryLayer;
2024-01-20 22:54:31 +01:00
import net.minecraft.server.ReloadableServerResources;
import net.minecraft.server.WorldLoader;
import net.minecraft.server.packs.PackType;
import net.minecraft.server.packs.repository.Pack;
import net.minecraft.server.packs.repository.PackRepository;
import net.minecraft.server.packs.repository.ServerPacksSource;
import net.minecraft.server.packs.resources.MultiPackResourceManager;
2024-01-20 22:54:31 +01:00
import net.minecraft.world.flag.FeatureFlags;
import org.apache.commons.io.file.PathUtils;
import org.slf4j.Logger;
public final class Main {
private static final Logger LOGGER = LogUtils.getLogger();
public static final RegistryAccess.Frozen REGISTRY_ACCESS;
2024-01-26 22:01:44 +01:00
public static final TagResult EXPERIMENTAL_TAGS;
2024-02-14 18:56:50 +01:00
public static Path generatedPath;
2024-03-16 19:37:55 +01:00
public static Path generatedServerPath;
static {
SharedConstants.tryDetectVersion();
Bootstrap.bootStrap();
2024-03-04 18:20:24 +01:00
Bootstrap.validate();
final PackRepository resourceRepository = ServerPacksSource.createVanillaTrustedRepository();
resourceRepository.reload();
final MultiPackResourceManager resourceManager = new MultiPackResourceManager(PackType.SERVER_DATA, resourceRepository.getAvailablePacks().stream().map(Pack::open).toList());
LayeredRegistryAccess<RegistryLayer> layers = RegistryLayer.createRegistryAccess();
layers = WorldLoader.loadAndReplaceLayer(resourceManager, layers, RegistryLayer.WORLDGEN, RegistryDataLoader.WORLDGEN_REGISTRIES);
REGISTRY_ACCESS = layers.compositeAccess().freeze();
2024-01-20 22:54:31 +01:00
final ReloadableServerResources datapack = ReloadableServerResources.loadResources(resourceManager, REGISTRY_ACCESS, FeatureFlags.REGISTRY.allFlags(), Commands.CommandSelection.DEDICATED, 0, MoreExecutors.directExecutor(), MoreExecutors.directExecutor()).join();
datapack.updateRegistryTags(REGISTRY_ACCESS);
2024-01-26 22:01:44 +01:00
EXPERIMENTAL_TAGS = TagCollector.grabExperimental(resourceManager);
}
private Main() {
}
public static void main(final String[] args) {
2024-01-15 20:36:10 +01:00
LOGGER.info("Running API generators...");
2024-03-04 18:20:24 +01:00
Main.generatedPath = Path.of(args[0]); // todo remove
2024-03-16 19:37:55 +01:00
Main.generatedServerPath = Path.of(args[2]); // todo remove
try {
2024-03-04 18:20:24 +01:00
generate(Main.generatedPath, Generators.API);
apply(Path.of(args[1]), Generators.API_REWRITE);
2024-03-16 19:37:55 +01:00
generateCraftBlockData(Main.generatedServerPath);
apply(Path.of(args[3]), Generators.SERVER_REWRITE);
2024-03-04 18:20:24 +01:00
} catch (final RuntimeException ex) {
throw ex;
} catch (IOException e) {
throw new RuntimeException(e);
}
}
2024-03-04 18:20:24 +01:00
private static void generate(Path output, SourceGenerator[] generators) throws IOException {
if (Files.exists(output)) {
PathUtils.deleteDirectory(output);
2024-03-04 18:20:24 +01:00
}
2024-03-04 18:20:24 +01:00
for (final SourceGenerator generator : generators) {
generator.writeToFile(output);
}
2024-03-04 18:20:24 +01:00
LOGGER.info("Files written to {}", output.toAbsolutePath());
}
2024-02-14 18:56:50 +01:00
2024-03-04 18:20:24 +01:00
private static void apply(Path output, SourceRewriter[] rewriters) throws IOException {
for (final SourceRewriter rewriter : rewriters) {
rewriter.writeToFile(output);
}
}
private static void generateCraftBlockData(Path output) throws IOException {
if (Files.exists(output)) {
PathUtils.deleteDirectory(output);
2024-02-14 18:56:50 +01:00
}
CraftBlockDataGenerators.generate(output);
LOGGER.info("Files written to {}", output.toAbsolutePath());
2024-02-14 18:56:50 +01:00
}
}