diff --git a/patches/server/Add-back-EntityPortalExitEvent.patch b/patches/server/Add-back-EntityPortalExitEvent.patch
index 5c4f5564a1..3b81fdb6c4 100644
--- a/patches/server/Add-back-EntityPortalExitEvent.patch
+++ b/patches/server/Add-back-EntityPortalExitEvent.patch
@@ -9,33 +9,39 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
 --- a/src/main/java/net/minecraft/world/entity/Entity.java
 +++ b/src/main/java/net/minecraft/world/entity/Entity.java
 @@ -0,0 +0,0 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, n
-             if (shapedetectorshape == null) {
-                 return null;
              } else {
+                 // CraftBukkit start
+                 worldserver = shapedetectorshape.world;
++
 +                // Paper start - Call EntityPortalExitEvent
++                CraftEntity bukkitEntity = this.getBukkitEntity();
 +                Vec3 position = shapedetectorshape.pos;
 +                float yaw = shapedetectorshape.yRot;
-+                float pitch = shapedetectorshape.xRot;
++                float pitch = bukkitEntity.getLocation().getPitch(); // Keep entity pitch as per moveTo line below
 +                Vec3 velocity = shapedetectorshape.speed;
-+                org.bukkit.event.entity.EntityPortalExitEvent event = new org.bukkit.event.entity.EntityPortalExitEvent(this.getBukkitEntity(), this.getBukkitEntity().getLocation(), shapedetectorshape.portalEventInfo.getTo(), this.getBukkitEntity().getVelocity(), org.bukkit.craftbukkit.util.CraftVector.toBukkit(shapedetectorshape.speed));
++                org.bukkit.event.entity.EntityPortalExitEvent event = new org.bukkit.event.entity.EntityPortalExitEvent(bukkitEntity,
++                    bukkitEntity.getLocation(), new Location(worldserver.getWorld(), position.x, position.y, position.z, yaw, pitch),
++                    bukkitEntity.getVelocity(), org.bukkit.craftbukkit.util.CraftVector.toBukkit(shapedetectorshape.speed));
 +                if (event.callEvent() && event.getTo() != null && this.isAlive()) {
-+                    position = Vec3.atLowerCornerOf(MCUtil.toBlockPosition(event.getTo()));
++                    worldserver = ((CraftWorld) event.getTo().getWorld()).getHandle();
++                    position = new Vec3(event.getTo().getX(), event.getTo().getY(), event.getTo().getZ());
 +                    yaw = event.getTo().getYaw();
 +                    pitch = event.getTo().getPitch();
 +                    velocity = org.bukkit.craftbukkit.util.CraftVector.toNMS(event.getAfter());
 +                }
 +                // Paper end
-                 // CraftBukkit start
-                 worldserver = shapedetectorshape.world;
++
                  this.unRide();
+                 // CraftBukkit end
+ 
 @@ -0,0 +0,0 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, n
  
                  if (entity != null) {
                      entity.restoreFrom(this);
 -                    entity.moveTo(shapedetectorshape.pos.x, shapedetectorshape.pos.y, shapedetectorshape.pos.z, shapedetectorshape.yRot, entity.getXRot());
 -                    entity.setDeltaMovement(shapedetectorshape.speed);
-+                    entity.moveTo(position.x, position.y, position.z, yaw, pitch); // Paper - respect EntityPortalExitEvent values
-+                    entity.setDeltaMovement(velocity); // Paper - respect EntityPortalExitEvent values
++                    entity.moveTo(position.x, position.y, position.z, yaw, pitch); // Paper - use EntityPortalExitEvent values
++                    entity.setDeltaMovement(velocity); // Paper - use EntityPortalExitEvent values
                      worldserver.addDuringTeleport(entity);
                      if (worldserver.getTypeKey() == DimensionType.END_LOCATION) { // CraftBukkit
                          ServerLevel.makeObsidianPlatform(worldserver, this); // CraftBukkit