2023-11-23 05:56:28 +01:00
|
|
|
package io.papermc.generator;
|
|
|
|
|
|
|
|
import com.mojang.logging.LogUtils;
|
|
|
|
import io.papermc.generator.types.GeneratedKeyType;
|
|
|
|
import io.papermc.generator.types.SourceGenerator;
|
|
|
|
import io.papermc.paper.registry.RegistryKey;
|
|
|
|
import java.nio.file.Files;
|
|
|
|
import java.nio.file.Path;
|
|
|
|
import java.nio.file.Paths;
|
|
|
|
import java.util.List;
|
|
|
|
import net.minecraft.SharedConstants;
|
|
|
|
import net.minecraft.core.LayeredRegistryAccess;
|
|
|
|
import net.minecraft.core.Registry;
|
|
|
|
import net.minecraft.core.RegistryAccess;
|
|
|
|
import net.minecraft.core.registries.Registries;
|
|
|
|
import net.minecraft.resources.RegistryDataLoader;
|
|
|
|
import net.minecraft.resources.ResourceKey;
|
|
|
|
import net.minecraft.server.Bootstrap;
|
|
|
|
import net.minecraft.server.RegistryLayer;
|
|
|
|
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;
|
|
|
|
import org.apache.commons.io.file.PathUtils;
|
|
|
|
import org.bukkit.GameEvent;
|
|
|
|
import org.bukkit.block.Biome;
|
2023-12-10 19:25:01 +01:00
|
|
|
import org.bukkit.generator.structure.Structure;
|
2023-11-23 05:56:28 +01:00
|
|
|
import org.bukkit.generator.structure.StructureType;
|
|
|
|
import org.bukkit.inventory.meta.trim.TrimMaterial;
|
|
|
|
import org.bukkit.inventory.meta.trim.TrimPattern;
|
|
|
|
import org.slf4j.Logger;
|
|
|
|
|
|
|
|
public final class Main {
|
|
|
|
|
|
|
|
private static final Logger LOGGER = LogUtils.getLogger();
|
|
|
|
public static final RegistryAccess.Frozen REGISTRY_ACCESS;
|
|
|
|
|
|
|
|
static {
|
|
|
|
SharedConstants.tryDetectVersion();
|
|
|
|
Bootstrap.bootStrap();
|
|
|
|
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();
|
|
|
|
}
|
|
|
|
|
|
|
|
private static final List<SourceGenerator> GENERATORS = List.of(
|
|
|
|
simpleKey("GameEventKeys", GameEvent.class, Registries.GAME_EVENT, RegistryKey.GAME_EVENT, true),
|
|
|
|
simpleKey("BiomeKeys", Biome.class, Registries.BIOME, RegistryKey.BIOME, true),
|
|
|
|
simpleKey("TrimMaterialKeys", TrimMaterial.class, Registries.TRIM_MATERIAL, RegistryKey.TRIM_MATERIAL, true),
|
|
|
|
simpleKey("TrimPatternKeys", TrimPattern.class, Registries.TRIM_PATTERN, RegistryKey.TRIM_PATTERN, true),
|
2023-12-10 19:25:01 +01:00
|
|
|
simpleKey("StructureKeys", Structure.class, Registries.STRUCTURE, RegistryKey.STRUCTURE, true),
|
2023-11-23 05:56:28 +01:00
|
|
|
simpleKey("StructureTypeKeys", StructureType.class, Registries.STRUCTURE_TYPE, RegistryKey.STRUCTURE_TYPE, false)
|
|
|
|
);
|
|
|
|
|
|
|
|
private static <T, A> SourceGenerator simpleKey(final String className, final Class<A> apiType, final ResourceKey<? extends Registry<T>> registryKey, final RegistryKey<A> apiRegistryKey, final boolean publicCreateKeyMethod) {
|
|
|
|
return new GeneratedKeyType<>(className, apiType, "io.papermc.paper.registry.keys", registryKey, apiRegistryKey, publicCreateKeyMethod);
|
|
|
|
}
|
|
|
|
|
|
|
|
private Main() {
|
|
|
|
}
|
|
|
|
|
|
|
|
public static void main(final String[] args) {
|
|
|
|
final Path output = Paths.get(args[0]);
|
|
|
|
try {
|
|
|
|
if (Files.exists(output)) {
|
|
|
|
PathUtils.deleteDirectory(output);
|
|
|
|
}
|
|
|
|
Files.createDirectories(output);
|
|
|
|
|
|
|
|
for (final SourceGenerator generator : GENERATORS) {
|
|
|
|
generator.writeToFile(output);
|
|
|
|
}
|
|
|
|
|
|
|
|
LOGGER.info("Files written to {}", output.toAbsolutePath());
|
|
|
|
} catch (final Exception ex) {
|
|
|
|
throw new RuntimeException(ex);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|