package net.minecraft.world.entity.animal; import java.util.List; import java.util.Optional; import net.minecraft.advancements.critereon.MinMaxBounds; import net.minecraft.core.ClientAsset; import net.minecraft.core.Holder; import net.minecraft.core.HolderGetter; import net.minecraft.core.RegistryAccess; 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.StructureTags; import net.minecraft.util.RandomSource; import net.minecraft.world.entity.variant.MoonBrightnessCheck; 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.entity.variant.StructureCheck; import net.minecraft.world.level.levelgen.structure.Structure; public interface CatVariants { ResourceKey TABBY = createKey("tabby"); ResourceKey BLACK = createKey("black"); ResourceKey RED = createKey("red"); ResourceKey SIAMESE = createKey("siamese"); ResourceKey BRITISH_SHORTHAIR = createKey("british_shorthair"); ResourceKey CALICO = createKey("calico"); ResourceKey PERSIAN = createKey("persian"); ResourceKey RAGDOLL = createKey("ragdoll"); ResourceKey WHITE = createKey("white"); ResourceKey JELLIE = createKey("jellie"); ResourceKey ALL_BLACK = createKey("all_black"); private static ResourceKey createKey(String p_392922_) { return ResourceKey.create(Registries.CAT_VARIANT, ResourceLocation.withDefaultNamespace(p_392922_)); } static void bootstrap(BootstrapContext p_394778_) { HolderGetter holdergetter = p_394778_.lookup(Registries.STRUCTURE); registerForAnyConditions(p_394778_, TABBY, "entity/cat/tabby"); registerForAnyConditions(p_394778_, BLACK, "entity/cat/black"); registerForAnyConditions(p_394778_, RED, "entity/cat/red"); registerForAnyConditions(p_394778_, SIAMESE, "entity/cat/siamese"); registerForAnyConditions(p_394778_, BRITISH_SHORTHAIR, "entity/cat/british_shorthair"); registerForAnyConditions(p_394778_, CALICO, "entity/cat/calico"); registerForAnyConditions(p_394778_, PERSIAN, "entity/cat/persian"); registerForAnyConditions(p_394778_, RAGDOLL, "entity/cat/ragdoll"); registerForAnyConditions(p_394778_, WHITE, "entity/cat/white"); registerForAnyConditions(p_394778_, JELLIE, "entity/cat/jellie"); register( p_394778_, ALL_BLACK, "entity/cat/all_black", new SpawnPrioritySelectors( List.of( new PriorityProvider.Selector<>(new StructureCheck(holdergetter.getOrThrow(StructureTags.CATS_SPAWN_AS_BLACK)), 1), new PriorityProvider.Selector<>(new MoonBrightnessCheck(MinMaxBounds.Doubles.atLeast(0.9)), 0) ) ) ); } private static void registerForAnyConditions(BootstrapContext p_393449_, ResourceKey p_393102_, String p_395640_) { register(p_393449_, p_393102_, p_395640_, SpawnPrioritySelectors.fallback(0)); } private static void register(BootstrapContext p_394846_, ResourceKey p_394887_, String p_392213_, SpawnPrioritySelectors p_396826_) { p_394846_.register(p_394887_, new CatVariant(new ClientAsset(ResourceLocation.withDefaultNamespace(p_392213_)), p_396826_)); } static Optional> selectVariantToSpawn(RandomSource p_395837_, RegistryAccess p_391839_, SpawnContext p_391344_) { return PriorityProvider.pick(p_391839_.lookupOrThrow(Registries.CAT_VARIANT).listElements(), Holder::value, p_395837_, p_391344_); } }