mirror of
https://github.com/LeavesMC/Leaves.git
synced 2025-12-19 14:59:32 +00:00
45 lines
2.8 KiB
Diff
45 lines
2.8 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 a85e8e4df0247ff6b3d4048c9c7a0f1134970c93..91038b21164d3e1bf6406117478454d38b24bb81 100644
|
|
--- a/net/minecraft/world/entity/Entity.java
|
|
+++ b/net/minecraft/world/entity/Entity.java
|
|
@@ -3774,19 +3774,29 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
|
|
}
|
|
if (this.portalProcess != null) { // if in a portal
|
|
org.bukkit.craftbukkit.entity.CraftEntity bukkitEntity = this.getBukkitEntity();
|
|
+ org.bukkit.util.Vector after = org.bukkit.craftbukkit.util.CraftVector.toBukkit(velocity); // Leaves - fix
|
|
org.bukkit.event.entity.EntityPortalExitEvent event = new org.bukkit.event.entity.EntityPortalExitEvent(
|
|
bukkitEntity,
|
|
bukkitEntity.getLocation(), to.clone(),
|
|
- bukkitEntity.getVelocity(), org.bukkit.craftbukkit.util.CraftVector.toBukkit(velocity)
|
|
+ bukkitEntity.getVelocity(), after // Leaves - fix
|
|
);
|
|
event.callEvent();
|
|
|
|
+ // Leaves start - fix
|
|
// Only change the target if actually needed, since we reset relative flags
|
|
- if (!event.isCancelled() && event.getTo() != null && (!event.getTo().equals(event.getFrom()) || !event.getAfter().equals(event.getBefore()))) { // todo this looks broken
|
|
- to = event.getTo().clone();
|
|
- velocity = org.bukkit.craftbukkit.util.CraftVector.toVec3(event.getAfter());
|
|
+ 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;
|