96 lines
		
	
	
	
		
			2.8 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
			
		
		
	
	
			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;
 | |
| 	}
 | |
| }
 |