minecraft-src/net/minecraft/world/entity/animal/ChickenVariants.java
2025-07-04 03:45:38 +03:00

59 lines
2.9 KiB
Java

package net.minecraft.world.entity.animal;
import java.util.Optional;
import net.minecraft.core.Holder;
import net.minecraft.core.HolderSet;
import net.minecraft.core.RegistryAccess;
import net.minecraft.core.Holder.Reference;
import net.minecraft.core.registries.Registries;
import net.minecraft.data.worldgen.BootstrapContext;
import net.minecraft.resources.ResourceKey;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.tags.BiomeTags;
import net.minecraft.tags.TagKey;
import net.minecraft.util.RandomSource;
import net.minecraft.world.entity.variant.BiomeCheck;
import net.minecraft.world.entity.variant.ModelAndTexture;
import net.minecraft.world.entity.variant.PriorityProvider;
import net.minecraft.world.entity.variant.SpawnContext;
import net.minecraft.world.entity.variant.SpawnPrioritySelectors;
import net.minecraft.world.level.biome.Biome;
public class ChickenVariants {
public static final ResourceKey<ChickenVariant> TEMPERATE = createKey(TemperatureVariants.TEMPERATE);
public static final ResourceKey<ChickenVariant> WARM = createKey(TemperatureVariants.WARM);
public static final ResourceKey<ChickenVariant> COLD = createKey(TemperatureVariants.COLD);
public static final ResourceKey<ChickenVariant> DEFAULT = TEMPERATE;
private static ResourceKey<ChickenVariant> createKey(ResourceLocation name) {
return ResourceKey.create(Registries.CHICKEN_VARIANT, name);
}
public static void bootstrap(BootstrapContext<ChickenVariant> context) {
register(context, TEMPERATE, ChickenVariant.ModelType.NORMAL, "temperate_chicken", SpawnPrioritySelectors.fallback(0));
register(context, WARM, ChickenVariant.ModelType.NORMAL, "warm_chicken", BiomeTags.SPAWNS_WARM_VARIANT_FARM_ANIMALS);
register(context, COLD, ChickenVariant.ModelType.COLD, "cold_chicken", BiomeTags.SPAWNS_COLD_VARIANT_FARM_ANIMALS);
}
private static void register(
BootstrapContext<ChickenVariant> context, ResourceKey<ChickenVariant> key, ChickenVariant.ModelType modelType, String name, TagKey<Biome> biomes
) {
HolderSet<Biome> holderSet = context.lookup(Registries.BIOME).getOrThrow(biomes);
register(context, key, modelType, name, SpawnPrioritySelectors.single(new BiomeCheck(holderSet), 1));
}
private static void register(
BootstrapContext<ChickenVariant> context,
ResourceKey<ChickenVariant> key,
ChickenVariant.ModelType modelType,
String name,
SpawnPrioritySelectors spawnConditions
) {
ResourceLocation resourceLocation = ResourceLocation.withDefaultNamespace("entity/chicken/" + name);
context.register(key, new ChickenVariant(new ModelAndTexture<>(modelType, resourceLocation), spawnConditions));
}
public static Optional<Reference<ChickenVariant>> selectVariantToSpawn(RandomSource random, RegistryAccess registryAccess, SpawnContext spawnContext) {
return PriorityProvider.pick(registryAccess.lookupOrThrow(Registries.CHICKEN_VARIANT).listElements(), Holder::value, random, spawnContext);
}
}