/* * Decompiled with CFR 0.152. * * Could not load the following classes: * org.jspecify.annotations.Nullable */ package net.minecraft.world.entity.animal; import net.minecraft.core.Holder; import net.minecraft.core.component.DataComponentGetter; import net.minecraft.core.component.DataComponentType; import net.minecraft.core.component.DataComponents; import net.minecraft.core.registries.Registries; import net.minecraft.network.syncher.EntityDataAccessor; import net.minecraft.network.syncher.EntityDataSerializers; import net.minecraft.network.syncher.SynchedEntityData; import net.minecraft.server.level.ServerLevel; import net.minecraft.world.DifficultyInstance; import net.minecraft.world.entity.AgeableMob; import net.minecraft.world.entity.EntitySpawnReason; import net.minecraft.world.entity.EntityType; import net.minecraft.world.entity.SpawnGroupData; import net.minecraft.world.entity.animal.AbstractCow; import net.minecraft.world.entity.animal.CowVariant; import net.minecraft.world.entity.animal.CowVariants; import net.minecraft.world.entity.variant.SpawnContext; import net.minecraft.world.entity.variant.VariantUtils; import net.minecraft.world.level.Level; import net.minecraft.world.level.ServerLevelAccessor; import net.minecraft.world.level.storage.ValueInput; import net.minecraft.world.level.storage.ValueOutput; import org.jspecify.annotations.Nullable; public class Cow extends AbstractCow { private static final EntityDataAccessor> DATA_VARIANT_ID = SynchedEntityData.defineId(Cow.class, EntityDataSerializers.COW_VARIANT); public Cow(EntityType type, Level level) { super((EntityType)type, level); } @Override protected void defineSynchedData(SynchedEntityData.Builder entityData) { super.defineSynchedData(entityData); entityData.define(DATA_VARIANT_ID, VariantUtils.getDefaultOrAny(this.registryAccess(), CowVariants.TEMPERATE)); } @Override protected void addAdditionalSaveData(ValueOutput output) { super.addAdditionalSaveData(output); VariantUtils.writeVariant(output, this.getVariant()); } @Override protected void readAdditionalSaveData(ValueInput input) { super.readAdditionalSaveData(input); VariantUtils.readVariant(input, Registries.COW_VARIANT).ifPresent(this::setVariant); } @Override public @Nullable Cow getBreedOffspring(ServerLevel level, AgeableMob partner) { Cow baby = EntityType.COW.create(level, EntitySpawnReason.BREEDING); if (baby != null && partner instanceof Cow) { Cow partnerCow = (Cow)partner; baby.setVariant(this.random.nextBoolean() ? this.getVariant() : partnerCow.getVariant()); } return baby; } @Override public SpawnGroupData finalizeSpawn(ServerLevelAccessor level, DifficultyInstance difficulty, EntitySpawnReason spawnReason, @Nullable SpawnGroupData groupData) { VariantUtils.selectVariantToSpawn(SpawnContext.create(level, this.blockPosition()), Registries.COW_VARIANT).ifPresent(this::setVariant); return super.finalizeSpawn(level, difficulty, spawnReason, groupData); } public void setVariant(Holder variant) { this.entityData.set(DATA_VARIANT_ID, variant); } public Holder getVariant() { return this.entityData.get(DATA_VARIANT_ID); } @Override public @Nullable T get(DataComponentType type) { if (type == DataComponents.COW_VARIANT) { return Cow.castComponentValue(type, this.getVariant()); } return super.get(type); } @Override protected void applyImplicitComponents(DataComponentGetter components) { this.applyImplicitComponentIfPresent(components, DataComponents.COW_VARIANT); super.applyImplicitComponents(components); } @Override protected boolean applyImplicitComponent(DataComponentType type, T value) { if (type == DataComponents.COW_VARIANT) { this.setVariant(Cow.castComponentValue(DataComponents.COW_VARIANT, value)); return true; } return super.applyImplicitComponent(type, value); } }