From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: violetc <58360096+s-yh-china@users.noreply.github.com> Date: Thu, 2 Jan 2025 22:01:17 +0800 Subject: [PATCH] Fix EntityPortalExitEvent logic diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java index 8bd5f957d61c429cf75e5a14296f735c33149e39..7376b7f56009865ba2db24b68f008b077bcf34d3 100644 --- a/net/minecraft/world/entity/Entity.java +++ b/net/minecraft/world/entity/Entity.java @@ -4052,19 +4052,21 @@ public abstract class Entity implements SyncedDataHolder, DebugValueSource, Name ); event.callEvent(); + // Leaves start - fix // Only change the target if actually needed, since we reset relative flags - if (event.isCancelled() || !to.equals(event.getTo()) || !after.equals(event.getAfter())) { - if (event.isCancelled() || event.getTo() == null) { - org.bukkit.World toWorld = to.getWorld(); - to = event.getFrom().clone(); - to.setWorld(toWorld); // cancelling doesn't cancel the teleport just the position/velocity (old quirk) - velocity = org.bukkit.craftbukkit.util.CraftVector.toVec3(event.getBefore()); - } else { - to = event.getTo().clone(); + if (event.isCancelled() || (!to.equals(event.getTo()) || !after.equals(event.getAfter()))) { + if (!event.isCancelled()) { + if (event.getTo() != null) { + to = event.getTo().clone(); + } velocity = org.bukkit.craftbukkit.util.CraftVector.toVec3(event.getAfter()); + } else { + to = event.getFrom().clone(); + velocity = Vec3.ZERO; } teleportTransition = new TeleportTransition(((org.bukkit.craftbukkit.CraftWorld) to.getWorld()).getHandle(), org.bukkit.craftbukkit.util.CraftLocation.toVec3(to), velocity, to.getYaw(), to.getPitch(), teleportTransition.missingRespawnBlock(), teleportTransition.asPassenger(), Set.of(), teleportTransition.postTeleportTransition(), teleportTransition.cause()); } + // Leaves end - fix } if (this.isRemoved()) { return null;