2021-06-11 14:02:28 +02:00
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Aikar <aikar@aikar.co>
Date: Mon, 30 Apr 2018 17:15:26 -0400
Subject: [PATCH] Block Enderpearl Travel Exploit
Players are able to use alt accounts and enderpearls to travel
long distances utilizing the pearls in unloaded chunks and loading
the chunk later when convenient.
This disables that by not saving the thrower when the chunk is unloaded.
This is mainly useful for survival servers that do not allow freeform teleporting.
2022-11-20 00:53:20 +01:00
== AT ==
public net.minecraft.world.entity.projectile.Projectile cachedOwner
public net.minecraft.world.entity.projectile.Projectile ownerUUID
2022-04-08 02:52:25 +02:00
diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java
2023-09-22 14:22:24 +02:00
index 3dc29f63893fa1635e3ebdfedb1b49859c228918..dc6ebe41d3ebceb8c6fa706847b347d8b5842c6f 100644
2022-04-08 02:52:25 +02:00
--- a/src/main/java/net/minecraft/server/level/ServerLevel.java
+++ b/src/main/java/net/minecraft/server/level/ServerLevel.java
2023-09-22 00:01:00 +02:00
@@ -2071,6 +2071,12 @@ public class ServerLevel extends Level implements WorldGenLevel {
2022-04-08 02:52:25 +02:00
public void onTickingEnd(Entity entity) {
ServerLevel.this.entityTickList.remove(entity);
+ // Paper start - Reset pearls when they stop being ticked
2022-06-09 10:51:45 +02:00
+ if (paperConfig().fixes.disableUnloadedChunkEnderpearlExploit && entity instanceof net.minecraft.world.entity.projectile.ThrownEnderpearl pearl) {
2022-04-08 02:52:25 +02:00
+ pearl.cachedOwner = null;
+ pearl.ownerUUID = null;
+ }
+ // Paper end
}
2023-09-22 00:01:00 +02:00
2022-04-08 02:52:25 +02:00
public void onTrackingStart(Entity entity) {
2021-06-11 14:02:28 +02:00
diff --git a/src/main/java/net/minecraft/world/entity/projectile/Projectile.java b/src/main/java/net/minecraft/world/entity/projectile/Projectile.java
2023-06-07 21:54:11 +02:00
index b4a37d11e381d08c82945966ee5f969364f6e3ee..e9ae25a70c747c173ebd2e393818d205527d5314 100644
2021-06-11 14:02:28 +02:00
--- a/src/main/java/net/minecraft/world/entity/projectile/Projectile.java
+++ b/src/main/java/net/minecraft/world/entity/projectile/Projectile.java
2023-06-07 21:54:11 +02:00
@@ -92,6 +92,7 @@ public abstract class Projectile extends Entity implements TraceableEntity {
2021-06-12 21:30:37 +02:00
if (nbt.hasUUID("Owner")) {
this.ownerUUID = nbt.getUUID("Owner");
2023-06-07 21:54:11 +02:00
this.cachedOwner = null;
+ if (this instanceof ThrownEnderpearl && this.level() != null && this.level().paperConfig().fixes.disableUnloadedChunkEnderpearlExploit) { this.ownerUUID = null; } // Paper - Don't store shooter name for pearls to block enderpearl travel exploit
2021-06-11 14:02:28 +02:00
}
2023-09-22 00:01:00 +02:00
2021-06-12 21:30:37 +02:00
this.leftOwner = nbt.getBoolean("LeftOwner");