--- a/net/minecraft/world/entity/projectile/EyeOfEnder.java
+++ b/net/minecraft/world/entity/projectile/EyeOfEnder.java
@@ -21,11 +_,11 @@
 public class EyeOfEnder extends Entity implements ItemSupplier {
     private static final float MIN_CAMERA_DISTANCE_SQUARED = 12.25F;
     private static final EntityDataAccessor<ItemStack> DATA_ITEM_STACK = SynchedEntityData.defineId(EyeOfEnder.class, EntityDataSerializers.ITEM_STACK);
-    private double tx;
-    private double ty;
-    private double tz;
-    private int life;
-    private boolean surviveAfterDeath;
+    public double tx;
+    public double ty;
+    public double tz;
+    public int life;
+    public boolean surviveAfterDeath;
 
     public EyeOfEnder(EntityType<? extends EyeOfEnder> entityType, Level level) {
         super(entityType, level);
@@ -70,6 +_,11 @@
     }
 
     public void signalTo(BlockPos pos) {
+        // Paper start - Change EnderEye target without changing other things
+        this.signalTo(pos, true);
+    }
+    public void signalTo(BlockPos pos, boolean update) {
+        // Paper end - Change EnderEye target without changing other things
         double d = pos.getX();
         int y = pos.getY();
         double d1 = pos.getZ();
@@ -86,8 +_,10 @@
             this.tz = d1;
         }
 
+        if (update) { // Paper - Change EnderEye target without changing other things
         this.life = 0;
         this.surviveAfterDeath = this.random.nextInt(5) > 0;
+        } // Paper - Change EnderEye target without changing other things
     }
 
     @Override
@@ -161,7 +_,7 @@
             this.life++;
             if (this.life > 80 && !this.level().isClientSide) {
                 this.playSound(SoundEvents.ENDER_EYE_DEATH, 1.0F, 1.0F);
-                this.discard();
+                this.discard(this.surviveAfterDeath ? org.bukkit.event.entity.EntityRemoveEvent.Cause.DROP : org.bukkit.event.entity.EntityRemoveEvent.Cause.DESPAWN); // CraftBukkit - add Bukkit remove cause
                 if (this.surviveAfterDeath) {
                     this.level().addFreshEntity(new ItemEntity(this.level(), this.getX(), this.getY(), this.getZ(), this.getItem()));
                 } else {
@@ -181,7 +_,12 @@
     @Override
     public void readAdditionalSaveData(CompoundTag compound) {
         if (compound.contains("Item", 10)) {
-            this.setItem(ItemStack.parse(this.registryAccess(), compound.getCompound("Item")).orElse(this.getDefaultItem()));
+            // CraftBukkit start - SPIGOT-6103 summon, see also SPIGOT-5474
+            ItemStack itemStack = ItemStack.parse(this.registryAccess(), compound.getCompound("Item")).orElse(this.getDefaultItem());
+            if (!itemStack.isEmpty()) {
+                this.setItem(itemStack);
+            }
+            // CraftBukkit end
         } else {
             this.setItem(this.getDefaultItem());
         }
