Skip to content

Commit 9694886

Browse files
Lumine1909Suisuroru
authored andcommitted
Fix endermite spawn position
The player teleport has been moved up in ThrownEnderpearl to prevent endermite spawning in case of a cancelled teleport. This however placed the player at the teleport destination prior to the endermite spawn logic, creating the entity at the wrong location. The commit stores the location of the player pre teleportation and uses said location for spawning the endermite instead. Co-authored-by: Helvetica Volubi <suisuroru@blue-millennium.fun> Reviewed-in: #12912
1 parent 6d0833e commit 9694886

File tree

1 file changed

+6
-2
lines changed

1 file changed

+6
-2
lines changed

paper-server/patches/sources/net/minecraft/world/entity/projectile/ThrownEnderpearl.java.patch

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,13 @@
11
--- a/net/minecraft/world/entity/projectile/ThrownEnderpearl.java
22
+++ b/net/minecraft/world/entity/projectile/ThrownEnderpearl.java
3-
@@ -119,11 +_,18 @@
3+
@@ -119,11 +_,21 @@
44
Vec3 vec3 = this.oldPosition();
55
if (owner instanceof ServerPlayer serverPlayer) {
66
if (serverPlayer.connection.isAcceptingMessages()) {
77
+ // CraftBukkit start
8+
+ // Store pre teleportation position as the teleport has been moved up.
9+
+ final double preTeleportX = serverPlayer.getX(), preTeleportY = serverPlayer.getY(), preTeleportZ = serverPlayer.getZ();
10+
+ final float preTeleportYRot = serverPlayer.getYRot(), preTeleportXRot = serverPlayer.getXRot();
811
+ ServerPlayer serverPlayer1 = serverPlayer.teleport(new TeleportTransition(serverLevel, vec3, Vec3.ZERO, 0.0F, 0.0F, Relative.union(Relative.ROTATION, Relative.DELTA), TeleportTransition.DO_NOTHING, org.bukkit.event.player.PlayerTeleportEvent.TeleportCause.ENDER_PEARL));
912
+ if (serverPlayer1 == null) {
1013
+ this.discard(org.bukkit.event.entity.EntityRemoveEvent.Cause.HIT);
@@ -14,8 +17,9 @@
1417
if (this.random.nextFloat() < 0.05F && serverLevel.getGameRules().getBoolean(GameRules.RULE_DOMOBSPAWNING)) {
1518
Endermite endermite = EntityType.ENDERMITE.create(serverLevel, EntitySpawnReason.TRIGGERED);
1619
if (endermite != null) {
17-
endermite.snapTo(owner.getX(), owner.getY(), owner.getZ(), owner.getYRot(), owner.getXRot());
20+
- endermite.snapTo(owner.getX(), owner.getY(), owner.getZ(), owner.getYRot(), owner.getXRot());
1821
- serverLevel.addFreshEntity(endermite);
22+
+ endermite.snapTo(preTeleportX, preTeleportY, preTeleportZ, preTeleportYRot, preTeleportXRot); // Paper - spawn endermite at pre teleport position as teleport has been moved up
1923
+ serverLevel.addFreshEntity(endermite, org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.ENDER_PEARL);
2024
}
2125
}

0 commit comments

Comments
 (0)