44 lines
2.3 KiB
Diff
44 lines
2.3 KiB
Diff
|
From e867d5f0aab8446ba423b22e71aa6b35f0aaa328 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.
|
||
|
|
||
|
diff --git a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
||
|
index cc1914d8c..606c0bed8 100644
|
||
|
--- a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
||
|
+++ b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
||
|
@@ -508,4 +508,10 @@ public class PaperWorldConfig {
|
||
|
allowPermaChunkLoaders = getBoolean("game-mechanics.allow-permanent-chunk-loaders", allowPermaChunkLoaders);
|
||
|
log("Allow Perma Chunk Loaders: " + (allowPermaChunkLoaders ? "enabled" : "disabled"));
|
||
|
}
|
||
|
+
|
||
|
+ public boolean disableEnderpearlExploit = true;
|
||
|
+ private void disableEnderpearlExploit() {
|
||
|
+ disableEnderpearlExploit = getBoolean("game-mechanics.disable-unloaded-chunk-enderpearl-exploit", disableEnderpearlExploit);
|
||
|
+ log("Disable Unloaded Chunk Enderpearl Exploit: " + (disableEnderpearlExploit ? "enabled" : "disabled"));
|
||
|
+ }
|
||
|
}
|
||
|
diff --git a/src/main/java/net/minecraft/server/EntityProjectile.java b/src/main/java/net/minecraft/server/EntityProjectile.java
|
||
|
index 01c7fcc8b..f7f9d4897 100644
|
||
|
--- a/src/main/java/net/minecraft/server/EntityProjectile.java
|
||
|
+++ b/src/main/java/net/minecraft/server/EntityProjectile.java
|
||
|
@@ -250,6 +250,7 @@ public abstract class EntityProjectile extends Entity implements IProjectile {
|
||
|
if ((this.shooterName == null || this.shooterName.isEmpty()) && this.shooter instanceof EntityHuman) {
|
||
|
this.shooterName = this.shooter.getName();
|
||
|
}
|
||
|
+ if (this instanceof EntityEnderPearl && this.world != null && this.world.paperConfig.disableEnderpearlExploit) { this.shooterName = null; } // Paper - Don't store shooter name for pearls to block enderpearl travel exploit
|
||
|
|
||
|
nbttagcompound.setString("ownerName", this.shooterName == null ? "" : this.shooterName);
|
||
|
}
|
||
|
--
|
||
|
2.17.0
|
||
|
|