2025-11-24 22:52:51 +03:00

108 lines
4.2 KiB
Java

/*
* 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<Holder<CowVariant>> DATA_VARIANT_ID = SynchedEntityData.defineId(Cow.class, EntityDataSerializers.COW_VARIANT);
public Cow(EntityType<? extends Cow> type, Level level) {
super((EntityType<? extends AbstractCow>)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<CowVariant> variant) {
this.entityData.set(DATA_VARIANT_ID, variant);
}
public Holder<CowVariant> getVariant() {
return this.entityData.get(DATA_VARIANT_ID);
}
@Override
public <T> @Nullable T get(DataComponentType<? extends T> 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 <T> boolean applyImplicitComponent(DataComponentType<T> type, T value) {
if (type == DataComponents.COW_VARIANT) {
this.setVariant(Cow.castComponentValue(DataComponents.COW_VARIANT, value));
return true;
}
return super.applyImplicitComponent(type, value);
}
}