package net.minecraft.world.level.levelgen.structure.pools.alias; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableMap.Builder; import java.util.List; import java.util.Map; import java.util.Objects; import net.minecraft.core.BlockPos; import net.minecraft.resources.ResourceKey; import net.minecraft.util.RandomSource; import net.minecraft.world.level.levelgen.structure.pools.StructureTemplatePool; @FunctionalInterface public interface PoolAliasLookup { PoolAliasLookup EMPTY = key -> key; ResourceKey lookup(final ResourceKey alias); static PoolAliasLookup create(final List poolAliasBindings, final BlockPos pos, final long seed) { if (poolAliasBindings.isEmpty()) { return EMPTY; } else { RandomSource random = RandomSource.create(seed).forkPositional().at(pos); Builder, ResourceKey> builder = ImmutableMap.builder(); poolAliasBindings.forEach(binding -> binding.forEachResolved(random, builder::put)); Map, ResourceKey> aliasMappings = builder.build(); return resourceKey -> (ResourceKey)Objects.requireNonNull( (ResourceKey)aliasMappings.getOrDefault(resourceKey, resourceKey), () -> "alias " + resourceKey.identifier() + " was mapped to null value" ); } } }