Update old position/rotation when teleporting entity

This will fix any problems accessing the old position, which
may be outside of the current region.

This might be a fix for https://github.com/PaperMC/Folia/issues/302
This commit is contained in:
Spottedleaf 2024-12-08 15:12:09 -08:00
parent d8bef962a8
commit 94d65c398c
4 changed files with 19 additions and 16 deletions

View File

@ -12412,7 +12412,7 @@ index 1f898500d0e9b18a880645ceb0a8ff0fe75f4e48..e0ad5a7715949c281a94f000e2df5cb2
for (ServerPlayer player : ServerLevel.this.server.getPlayerList().players) { // Paper - call onEntityRemove for all online players for (ServerPlayer player : ServerLevel.this.server.getPlayerList().players) { // Paper - call onEntityRemove for all online players
player.getBukkitEntity().onEntityRemove(entity); player.getBukkitEntity().onEntityRemove(entity);
diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java
index fc7f7a34babd095a51b5321f600aef65a2a9d123..44c8d196b31c84ff6179d345808a10c0604206ad 100644 index fc7f7a34babd095a51b5321f600aef65a2a9d123..130643b97fdab3bf89fc87afd6d4e0b922dac538 100644
--- a/src/main/java/net/minecraft/server/level/ServerPlayer.java --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java
+++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java
@@ -220,7 +220,7 @@ import org.bukkit.inventory.MainHand; @@ -220,7 +220,7 @@ import org.bukkit.inventory.MainHand;
@ -12595,7 +12595,7 @@ index fc7f7a34babd095a51b5321f600aef65a2a9d123..44c8d196b31c84ff6179d345808a10c0
} else { } else {
ServerPlayer.LOGGER.warn("Failed to spawn player ender pearl in level ({}), skipping", optional1.get()); ServerPlayer.LOGGER.warn("Failed to spawn player ender pearl in level ({}), skipping", optional1.get());
} }
@@ -1572,6 +1720,323 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple @@ -1572,6 +1720,324 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple
} }
@ -12767,6 +12767,7 @@ index fc7f7a34babd095a51b5321f600aef65a2a9d123..44c8d196b31c84ff6179d345808a10c0
+ java.util.Collections.emptySet() + java.util.Collections.emptySet()
+ ); + );
+ this.connection.resetPosition(); + this.connection.resetPosition();
+ this.setOldPosAndRot();
+ this.resetStoredPositions(); + this.resetStoredPositions();
+ } + }
+ +
@ -12919,7 +12920,7 @@ index fc7f7a34babd095a51b5321f600aef65a2a9d123..44c8d196b31c84ff6179d345808a10c0
@Nullable @Nullable
@Override @Override
public ServerPlayer teleport(TeleportTransition teleportTarget) { public ServerPlayer teleport(TeleportTransition teleportTarget) {
@@ -2605,6 +3070,12 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple @@ -2605,6 +3071,12 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple
public void setCamera(@Nullable Entity entity) { public void setCamera(@Nullable Entity entity) {
Entity entity1 = this.getCamera(); Entity entity1 = this.getCamera();
@ -12932,7 +12933,7 @@ index fc7f7a34babd095a51b5321f600aef65a2a9d123..44c8d196b31c84ff6179d345808a10c0
this.camera = (Entity) (entity == null ? this : entity); this.camera = (Entity) (entity == null ? this : entity);
if (entity1 != this.camera) { if (entity1 != this.camera) {
// Paper start - Add PlayerStartSpectatingEntityEvent and PlayerStopSpectatingEntity // Paper start - Add PlayerStartSpectatingEntityEvent and PlayerStopSpectatingEntity
@@ -3098,11 +3569,11 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple @@ -3098,11 +3570,11 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple
} }
public void registerEnderPearl(ThrownEnderpearl enderPearl) { public void registerEnderPearl(ThrownEnderpearl enderPearl) {
@ -12946,7 +12947,7 @@ index fc7f7a34babd095a51b5321f600aef65a2a9d123..44c8d196b31c84ff6179d345808a10c0
} }
public Set<ThrownEnderpearl> getEnderPearls() { public Set<ThrownEnderpearl> getEnderPearls() {
@@ -3261,7 +3732,7 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple @@ -3261,7 +3733,7 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple
this.experienceLevel = this.newLevel; this.experienceLevel = this.newLevel;
this.totalExperience = this.newTotalExp; this.totalExperience = this.newTotalExp;
this.experienceProgress = 0; this.experienceProgress = 0;
@ -14340,7 +14341,7 @@ index e9df8f8541b8a1b85c7d2925ff3cba813007a1ef..d3f2775a68121ca80ef55ea4c280a0c9
return blockToFallLocation(blockState); return blockToFallLocation(blockState);
} else { } else {
diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java
index 1b547be0fe97119edf4f29666cfe0037e0c778e0..faa1135996a3afccbf45c84059090248703b98ac 100644 index 1b547be0fe97119edf4f29666cfe0037e0c778e0..b7d9835b68100e11570a8be4e31590dc0b112026 100644
--- a/src/main/java/net/minecraft/world/entity/Entity.java --- a/src/main/java/net/minecraft/world/entity/Entity.java
+++ b/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java
@@ -186,7 +186,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess @@ -186,7 +186,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
@ -14509,7 +14510,7 @@ index 1b547be0fe97119edf4f29666cfe0037e0c778e0..faa1135996a3afccbf45c84059090248
if (!this.level().paperConfig().scoreboards.allowNonPlayerEntitiesOnScoreboards && !(this instanceof Player)) { return null; } // Paper - Perf: Disable Scoreboards for non players by default if (!this.level().paperConfig().scoreboards.allowNonPlayerEntitiesOnScoreboards && !(this instanceof Player)) { return null; } // Paper - Perf: Disable Scoreboards for non players by default
return this.level().getScoreboard().getPlayersTeam(this.getScoreboardName()); return this.level().getScoreboard().getPlayersTeam(this.getScoreboardName());
} }
@@ -3920,8 +3935,780 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess @@ -3920,8 +3935,782 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
this.portalProcess = original.portalProcess; this.portalProcess = original.portalProcess;
} }
@ -14790,6 +14791,7 @@ index 1b547be0fe97119edf4f29666cfe0037e0c778e0..faa1135996a3afccbf45c84059090248
+ this.setDeltaMovement(velocity); + this.setDeltaMovement(velocity);
+ } + }
+ this.moveTo(pos.x, pos.y, pos.z); + this.moveTo(pos.x, pos.y, pos.z);
+ this.setOldPosAndRot();
+ this.resetStoredPositions(); + this.resetStoredPositions();
+ } + }
+ +
@ -14816,6 +14818,7 @@ index 1b547be0fe97119edf4f29666cfe0037e0c778e0..faa1135996a3afccbf45c84059090248
+ if (pos != null) { + if (pos != null) {
+ this.setPosRaw(pos.x, pos.y, pos.z); + this.setPosRaw(pos.x, pos.y, pos.z);
+ } + }
+ this.setOldPosAndRot();
+ } + }
+ +
+ protected final Entity transformForAsyncTeleport(TeleportTransition telpeort) { + protected final Entity transformForAsyncTeleport(TeleportTransition telpeort) {
@ -15290,7 +15293,7 @@ index 1b547be0fe97119edf4f29666cfe0037e0c778e0..faa1135996a3afccbf45c84059090248
Level world = this.level(); Level world = this.level();
// Paper start - Fix item duplication and teleport issues // Paper start - Fix item duplication and teleport issues
@@ -4126,6 +4913,12 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess @@ -4126,6 +4915,12 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
} }
@ -15303,7 +15306,7 @@ index 1b547be0fe97119edf4f29666cfe0037e0c778e0..faa1135996a3afccbf45c84059090248
protected void removeAfterChangingDimensions() { protected void removeAfterChangingDimensions() {
this.setRemoved(Entity.RemovalReason.CHANGED_DIMENSION, null); // CraftBukkit - add Bukkit remove cause this.setRemoved(Entity.RemovalReason.CHANGED_DIMENSION, null); // CraftBukkit - add Bukkit remove cause
if (this instanceof Leashable leashable && leashable.isLeashed()) { // Paper - only call if it is leashed if (this instanceof Leashable leashable && leashable.isLeashed()) { // Paper - only call if it is leashed
@@ -5059,7 +5852,8 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess @@ -5059,7 +5854,8 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
} }
} }
// Paper end - Fix MC-4 // Paper end - Fix MC-4
@ -15313,7 +15316,7 @@ index 1b547be0fe97119edf4f29666cfe0037e0c778e0..faa1135996a3afccbf45c84059090248
synchronized (this.posLock) { // Paper synchronized (this.posLock) { // Paper
this.position = new Vec3(x, y, z); this.position = new Vec3(x, y, z);
} // Paper } // Paper
@@ -5080,7 +5874,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess @@ -5080,7 +5876,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
// Paper start - Block invalid positions and bounding box; don't allow desync of pos and AABB // Paper start - Block invalid positions and bounding box; don't allow desync of pos and AABB
// hanging has its own special logic // hanging has its own special logic
@ -15322,7 +15325,7 @@ index 1b547be0fe97119edf4f29666cfe0037e0c778e0..faa1135996a3afccbf45c84059090248
this.setBoundingBox(this.makeBoundingBox()); this.setBoundingBox(this.makeBoundingBox());
} }
// Paper end - Block invalid positions and bounding box // Paper end - Block invalid positions and bounding box
@@ -5163,6 +5957,12 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess @@ -5163,6 +5959,12 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
return this.removalReason != null; return this.removalReason != null;
} }
@ -15335,7 +15338,7 @@ index 1b547be0fe97119edf4f29666cfe0037e0c778e0..faa1135996a3afccbf45c84059090248
@Nullable @Nullable
public Entity.RemovalReason getRemovalReason() { public Entity.RemovalReason getRemovalReason() {
return this.removalReason; return this.removalReason;
@@ -5185,6 +5985,9 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess @@ -5185,6 +5987,9 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
CraftEventFactory.callEntityRemoveEvent(this, cause); CraftEventFactory.callEntityRemoveEvent(this, cause);
// CraftBukkit end // CraftBukkit end
final boolean alreadyRemoved = this.removalReason != null; // Paper - Folia schedulers final boolean alreadyRemoved = this.removalReason != null; // Paper - Folia schedulers
@ -15345,7 +15348,7 @@ index 1b547be0fe97119edf4f29666cfe0037e0c778e0..faa1135996a3afccbf45c84059090248
if (this.removalReason == null) { if (this.removalReason == null) {
this.removalReason = entity_removalreason; this.removalReason = entity_removalreason;
} }
@@ -5208,6 +6011,10 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess @@ -5208,6 +6013,10 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
this.removalReason = null; this.removalReason = null;
} }

View File

@ -29,7 +29,7 @@ index 41bf71d116ffc5431586ce54abba7f8def6c1dcf..1cf9a7677449ab8f03fb23d835e3fadc
} }
diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java
index faa1135996a3afccbf45c84059090248703b98ac..f86415bf2721835e6108408ebf05221fa17d854e 100644 index b7d9835b68100e11570a8be4e31590dc0b112026..c450b1115985109b43a0bf5eefae7c47c92f91c0 100644
--- a/src/main/java/net/minecraft/world/entity/Entity.java --- a/src/main/java/net/minecraft/world/entity/Entity.java
+++ b/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java
@@ -3244,6 +3244,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess @@ -3244,6 +3244,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess

View File

@ -9,7 +9,7 @@ data deserialization and is racey even in Vanilla. But in Folia,
some accesses may throw and as such we need to fix this directly. some accesses may throw and as such we need to fix this directly.
diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java
index 44c8d196b31c84ff6179d345808a10c0604206ad..93a341618bf53900d143f429b94ea295dd973f2c 100644 index 130643b97fdab3bf89fc87afd6d4e0b922dac538..54c610bb14f8af6026c91179e402ebc66ffbf49c 100644
--- a/src/main/java/net/minecraft/server/level/ServerPlayer.java --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java
+++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java
@@ -794,7 +794,7 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple @@ -794,7 +794,7 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple

View File

@ -7,7 +7,7 @@ This allows the player to be re-positioned before logging into
the world without causing thread checks to trip on Folia. the world without causing thread checks to trip on Folia.
diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java
index 93a341618bf53900d143f429b94ea295dd973f2c..b7fe3a1119f927bf4fb4d5855f758a16a76ec779 100644 index 54c610bb14f8af6026c91179e402ebc66ffbf49c..23f852ede94bce4d000c8fcaa8fba5d4800b533c 100644
--- a/src/main/java/net/minecraft/server/level/ServerPlayer.java --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java
+++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java
@@ -920,7 +920,13 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple @@ -920,7 +920,13 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple