9
0
mirror of https://github.com/LeavesMC/Leaves.git synced 2025-12-19 14:59:32 +00:00
Files
LeavesMC/leaves-server/minecraft-patches/features/0106-Fix-EntityPortalExitEvent-logic.patch
MC_XiaoHei 90080d238e 1.21.10 (#752)
---------

Co-authored-by: Lumine1909 <133463833+Lumine1909@users.noreply.github.com>
Co-authored-by: violetc <58360096+s-yh-china@users.noreply.github.com>
Co-authored-by: Helvetica Volubi <88063803+Suisuroru@users.noreply.github.com>
2025-11-28 03:15:54 +08:00

41 lines
2.4 KiB
Diff

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;