--- a/net/minecraft/world/entity/projectile/EntityShulkerBullet.java +++ b/net/minecraft/world/entity/projectile/EntityShulkerBullet.java @@ -60,8 +60,21 @@ this.finalTarget = entity; this.currentMoveDirection = EnumDirection.UP; this.a(enumdirection_enumaxis); + projectileSource = (org.bukkit.entity.LivingEntity) entityliving.getBukkitEntity(); // CraftBukkit } + // CraftBukkit start + public Entity getTarget() { + return this.finalTarget; + } + + public void setTarget(Entity e) { + this.finalTarget = e; + this.currentMoveDirection = EnumDirection.UP; + this.a(EnumDirection.EnumAxis.X); + } + // CraftBukkit end + @Override public SoundCategory getSoundCategory() { return SoundCategory.HOSTILE; @@ -225,7 +238,7 @@ MovingObjectPosition movingobjectposition = ProjectileHelper.a((Entity) this, this::a); if (movingobjectposition.getType() != MovingObjectPosition.EnumMovingObjectType.MISS) { - this.a(movingobjectposition); + this.preOnHit(movingobjectposition); // CraftBukkit - projectile hit event } } @@ -292,7 +305,7 @@ if (flag) { this.a(entityliving, entity); if (entity instanceof EntityLiving) { - ((EntityLiving) entity).addEffect(new MobEffect(MobEffects.LEVITATION, 200), (Entity) MoreObjects.firstNonNull(entity1, this)); + ((EntityLiving) entity).addEffect(new MobEffect(MobEffects.LEVITATION, 200), (Entity) MoreObjects.firstNonNull(entity1, this), org.bukkit.event.entity.EntityPotionEffectEvent.Cause.ATTACK); // CraftBukkit } } @@ -318,6 +331,11 @@ @Override public boolean damageEntity(DamageSource damagesource, float f) { + // CraftBukkit start + if (org.bukkit.craftbukkit.event.CraftEventFactory.handleNonLivingEntityDamageEvent(this, damagesource, f, false)) { + return false; + } + // CraftBukkit end if (!this.level.isClientSide) { this.playSound(SoundEffects.SHULKER_BULLET_HURT, 1.0F, 1.0F); ((WorldServer) this.level).a(Particles.CRIT, this.locX(), this.locY(), this.locZ(), 15, 0.2D, 0.2D, 0.2D, 0.0D);