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

96 lines
2.8 KiB
Java

package net.minecraft.world.entity.projectile;
import java.util.Optional;
import net.minecraft.core.component.DataComponents;
import net.minecraft.core.particles.ItemParticleOption;
import net.minecraft.core.particles.ParticleTypes;
import net.minecraft.world.entity.EntityDimensions;
import net.minecraft.world.entity.EntitySpawnReason;
import net.minecraft.world.entity.EntityType;
import net.minecraft.world.entity.LivingEntity;
import net.minecraft.world.entity.animal.Chicken;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.Items;
import net.minecraft.world.level.Level;
import net.minecraft.world.phys.EntityHitResult;
import net.minecraft.world.phys.HitResult;
public class ThrownEgg extends ThrowableItemProjectile {
private static final EntityDimensions ZERO_SIZED_DIMENSIONS = EntityDimensions.fixed(0.0F, 0.0F);
public ThrownEgg(EntityType<? extends ThrownEgg> entityType, Level level) {
super(entityType, level);
}
public ThrownEgg(Level level, LivingEntity owner, ItemStack item) {
super(EntityType.EGG, owner, level, item);
}
public ThrownEgg(Level level, double x, double y, double z, ItemStack item) {
super(EntityType.EGG, x, y, z, level, item);
}
@Override
public void handleEntityEvent(byte id) {
if (id == 3) {
double d = 0.08;
for (int i = 0; i < 8; i++) {
this.level()
.addParticle(
new ItemParticleOption(ParticleTypes.ITEM, this.getItem()),
this.getX(),
this.getY(),
this.getZ(),
(this.random.nextFloat() - 0.5) * 0.08,
(this.random.nextFloat() - 0.5) * 0.08,
(this.random.nextFloat() - 0.5) * 0.08
);
}
}
}
@Override
protected void onHitEntity(EntityHitResult result) {
super.onHitEntity(result);
result.getEntity().hurt(this.damageSources().thrown(this, this.getOwner()), 0.0F);
}
@Override
protected void onHit(HitResult result) {
super.onHit(result);
if (!this.level().isClientSide) {
if (this.random.nextInt(8) == 0) {
int i = 1;
if (this.random.nextInt(32) == 0) {
i = 4;
}
for (int j = 0; j < i; j++) {
Chicken chicken = EntityType.CHICKEN.create(this.level(), EntitySpawnReason.TRIGGERED);
if (chicken != null) {
chicken.setAge(-24000);
chicken.snapTo(this.getX(), this.getY(), this.getZ(), this.getYRot(), 0.0F);
Optional.ofNullable(this.getItem().get(DataComponents.CHICKEN_VARIANT))
.flatMap(eitherHolder -> eitherHolder.unwrap(this.registryAccess()))
.ifPresent(chicken::setVariant);
if (!chicken.fudgePositionAfterSizeChange(ZERO_SIZED_DIMENSIONS)) {
break;
}
this.level().addFreshEntity(chicken);
}
}
}
this.level().broadcastEntityEvent(this, (byte)3);
this.discard();
}
}
@Override
protected Item getDefaultItem() {
return Items.EGG;
}
}