2021-06-11 12:02:28 +00: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-04-08 00:52:25 +00:00
diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java
2022-06-09 08:51:45 +00:00
index 535cb7102ad69c34e3035422429c9874ba434e31..9804934384975c38e1c6986c7fa73d510bb1136b 100644
2022-04-08 00:52:25 +00:00
--- a/src/main/java/net/minecraft/server/level/ServerLevel.java
+++ b/src/main/java/net/minecraft/server/level/ServerLevel.java
2022-06-07 20:45:38 +00:00
@@ -2069,6 +2069,12 @@ public class ServerLevel extends Level implements WorldGenLevel {
2022-04-08 00:52:25 +00:00
public void onTickingEnd(Entity entity) {
ServerLevel.this.entityTickList.remove(entity);
+ // Paper start - Reset pearls when they stop being ticked
2022-06-09 08:51:45 +00:00
+ if (paperConfig().fixes.disableUnloadedChunkEnderpearlExploit && entity instanceof net.minecraft.world.entity.projectile.ThrownEnderpearl pearl) {
2022-04-08 00:52:25 +00:00
+ pearl.cachedOwner = null;
+ pearl.ownerUUID = null;
+ }
+ // Paper end
}
public void onTrackingStart(Entity entity) {
2021-06-11 12:02:28 +00: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
2022-06-09 08:51:45 +00:00
index cf8498165065c7db1be9cf7de492c1a41817cbf1..f550686d1ae45a9ecb406e999d02dba0cf022c58 100644
2021-06-11 12:02:28 +00:00
--- a/src/main/java/net/minecraft/world/entity/projectile/Projectile.java
+++ b/src/main/java/net/minecraft/world/entity/projectile/Projectile.java
2021-06-12 19:30:37 +00:00
@@ -88,6 +88,7 @@ public abstract class Projectile extends Entity {
protected void readAdditionalSaveData(CompoundTag nbt) {
if (nbt.hasUUID("Owner")) {
this.ownerUUID = nbt.getUUID("Owner");
2022-06-09 08:51:45 +00:00
+ 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 12:02:28 +00:00
}
2021-06-12 19:30:37 +00:00
this.leftOwner = nbt.getBoolean("LeftOwner");