diff --git a/gradle.properties b/gradle.properties
index abd3e57e9..591050a79 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -1,7 +1,7 @@
group = org.purpurmc.purpur
version = 1.19.2-R0.1-SNAPSHOT
-paperCommit = aabf67672174c4b3bf5a7de65fdeb5315ade37dc
+paperCommit = eff22eb0541559f05cf9a8c370d70c3b346f80f6
org.gradle.caching = true
org.gradle.parallel = true
diff --git a/patches/api/0001-Pufferfish-API-Changes.patch b/patches/api/0001-Pufferfish-API-Changes.patch
index ad3571b06..1469763ad 100644
--- a/patches/api/0001-Pufferfish-API-Changes.patch
+++ b/patches/api/0001-Pufferfish-API-Changes.patch
@@ -476,7 +476,7 @@ index 8ff78fad47f6086aa289e32590f4fbec24b3d500..a16c841751bc44e46d27fc4efbfc2ab2
if (cloader instanceof PluginClassLoader) {
diff --git a/src/main/java/org/bukkit/plugin/java/PluginClassLoader.java b/src/main/java/org/bukkit/plugin/java/PluginClassLoader.java
-index 345394132df70593800127d34a38f8f8a4dafe00..4f736a267eb4c8a3bedb2d02fb30468484b991d5 100644
+index 345394132df70593800127d34a38f8f8a4dafe00..8f778e7d1b8508414ed47c6c6071cae9ebf2d986 100644
--- a/src/main/java/org/bukkit/plugin/java/PluginClassLoader.java
+++ b/src/main/java/org/bukkit/plugin/java/PluginClassLoader.java
@@ -46,6 +46,8 @@ public final class PluginClassLoader extends URLClassLoader { // Spigot
@@ -505,7 +505,15 @@ index 345394132df70593800127d34a38f8f8a4dafe00..4f736a267eb4c8a3bedb2d02fb304684
String path = name.replace('.', '/').concat(".class");
JarEntry entry = jar.getJarEntry(path);
-@@ -213,6 +216,7 @@ public final class PluginClassLoader extends URLClassLoader { // Spigot
+@@ -205,6 +208,7 @@ public final class PluginClassLoader extends URLClassLoader { // Spigot
+ classes.put(name, result);
+ }
+
++ if (result == null) throw new ClassNotFoundException(name); // Pufferfish
+ return result;
+ }
+
+@@ -213,6 +217,7 @@ public final class PluginClassLoader extends URLClassLoader { // Spigot
try {
super.close();
} finally {
diff --git a/patches/api/0002-Fix-pufferfish-issues.patch b/patches/api/0002-Fix-pufferfish-issues.patch
index ff14e5f6f..b2f08398c 100644
--- a/patches/api/0002-Fix-pufferfish-issues.patch
+++ b/patches/api/0002-Fix-pufferfish-issues.patch
@@ -4,19 +4,6 @@ Date: Tue, 4 Jan 2022 23:05:41 -0600
Subject: [PATCH] Fix pufferfish issues
-diff --git a/src/main/java/org/bukkit/plugin/java/PluginClassLoader.java b/src/main/java/org/bukkit/plugin/java/PluginClassLoader.java
-index 4f736a267eb4c8a3bedb2d02fb30468484b991d5..8bddfbdcc947ffd4ff9a923fb8edf367c9a6b498 100644
---- a/src/main/java/org/bukkit/plugin/java/PluginClassLoader.java
-+++ b/src/main/java/org/bukkit/plugin/java/PluginClassLoader.java
-@@ -161,7 +161,7 @@ public final class PluginClassLoader extends URLClassLoader { // Spigot
- }
- Class> result = classes.get(name);
-
-- if (result == null && !this.closed) { // Pufferfish
-+ if (result == null /*&& !this.closed*/) { // Pufferfish // Purpur - don't modify the classloader b.s.
- String path = name.replace('.', '/').concat(".class");
- JarEntry entry = jar.getJarEntry(path);
-
diff --git a/src/test/java/org/bukkit/AnnotationTest.java b/src/test/java/org/bukkit/AnnotationTest.java
index bbe81f7a420f913ffdcad913a3c43ff41ead41f5..49de298146814fdf238929e10270ac6717dd73bd 100644
--- a/src/test/java/org/bukkit/AnnotationTest.java
diff --git a/patches/server/0001-Pufferfish-Server-Changes.patch b/patches/server/0001-Pufferfish-Server-Changes.patch
index 9f79f81b1..c6675a5ba 100644
--- a/patches/server/0001-Pufferfish-Server-Changes.patch
+++ b/patches/server/0001-Pufferfish-Server-Changes.patch
@@ -20,7 +20,7 @@ You should have received a copy of the GNU General Public License
along with this program. If not, see .
diff --git a/build.gradle.kts b/build.gradle.kts
-index 2374cc9bab5039d0a0dc11d4b2ec573ab75778a7..27d1663fea7cbddfa4e2000cf73d215886c70aa5 100644
+index 2374cc9bab5039d0a0dc11d4b2ec573ab75778a7..7074295d7399d03e259598bb4bfa0f21434d74be 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -9,8 +9,12 @@ plugins {
@@ -31,7 +31,7 @@ index 2374cc9bab5039d0a0dc11d4b2ec573ab75778a7..27d1663fea7cbddfa4e2000cf73d2158
- implementation(project(":paper-mojangapi"))
+ implementation(project(":pufferfish-api")) // Pufferfish // Paper
+ // Pufferfish start
-+ implementation("io.papermc.paper:paper-mojangapi:1.19.2-R0.1-SNAPSHOT") { // Purpur
++ implementation("io.papermc.paper:paper-mojangapi:1.19.2-R0.1-SNAPSHOT") {
+ exclude("io.papermc.paper", "paper-api")
+ }
+ // Pufferfish end
@@ -3202,10 +3202,10 @@ index 3d986805c89d22330d6ad1e09760940b2f399214..0c71d72fb04eb00e159ddd456df82376
this.getRandomBlockPosition(j, 0, k, 15, blockposition);
int normalY = chunk.getHeight(Heightmap.Types.MOTION_BLOCKING, blockposition.getX() & 15, blockposition.getZ() & 15) + 1;
diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
-index c3a5aa2cbfeef1d2841ef85d135a2f6e0a7a2f61..9aab29dd7a09c306d6c0e1e8143daf005d611d65 100644
+index 325def3149693f64b2b21e0e655b5b3e888fd9a0..3d4e0be647f48a33d1afcdbec62c6624f2086294 100644
--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
-@@ -1222,6 +1222,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
+@@ -1216,6 +1216,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
@Override
public void handleEditBook(ServerboundEditBookPacket packet) {
@@ -3213,7 +3213,7 @@ index c3a5aa2cbfeef1d2841ef85d135a2f6e0a7a2f61..9aab29dd7a09c306d6c0e1e8143daf00
// Paper start
if (!this.cserver.isPrimaryThread()) {
List pageList = packet.getPages();
-@@ -2368,6 +2369,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
+@@ -2362,6 +2363,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
}
private boolean updateChatOrder(Instant timestamp) {
@@ -4351,6 +4351,22 @@ index a9cdf9034ad269f7a71358443acc053288cfbe6d..dbeb70913d3933164e997ce5d662b489
}
}
}
+diff --git a/src/main/java/net/minecraft/world/entity/animal/allay/Allay.java b/src/main/java/net/minecraft/world/entity/animal/allay/Allay.java
+index 2d87b740e84435ef9bd3eee3d3e2af9f707a0826..d38d1e3692e093d6707b6bd80cd56ec4afcf093b 100644
+--- a/src/main/java/net/minecraft/world/entity/animal/allay/Allay.java
++++ b/src/main/java/net/minecraft/world/entity/animal/allay/Allay.java
+@@ -228,9 +228,11 @@ public class Allay extends PathfinderMob implements InventoryCarrier {
+ return 0.4F;
+ }
+
++ private int behaviorTick = 0; // Pufferfish
+ @Override
+ protected void customServerAiStep() {
+ this.level.getProfiler().push("allayBrain");
++ if (this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish
+ this.getBrain().tick((ServerLevel) this.level, this);
+ this.level.getProfiler().pop();
+ this.level.getProfiler().push("allayActivityUpdate");
diff --git a/src/main/java/net/minecraft/world/entity/animal/axolotl/Axolotl.java b/src/main/java/net/minecraft/world/entity/animal/axolotl/Axolotl.java
index da5e6141f548539cac720aba558e1b6f3a87e474..fdd2c63ff0017bafa544a3cff2ee6d2d62c92cb3 100644
--- a/src/main/java/net/minecraft/world/entity/animal/axolotl/Axolotl.java
@@ -4368,10 +4384,22 @@ index da5e6141f548539cac720aba558e1b6f3a87e474..fdd2c63ff0017bafa544a3cff2ee6d2d
this.level.getProfiler().pop();
this.level.getProfiler().push("axolotlActivityUpdate");
diff --git a/src/main/java/net/minecraft/world/entity/animal/frog/Frog.java b/src/main/java/net/minecraft/world/entity/animal/frog/Frog.java
-index bb6063ae7f4438916306ce876057f7488537b444..9a2d1285c207290946ae664915a77b8f9dc00ad7 100644
+index bb6063ae7f4438916306ce876057f7488537b444..4c3fd27bff777139e29905e8684f6e92a44decfe 100644
--- a/src/main/java/net/minecraft/world/entity/animal/frog/Frog.java
+++ b/src/main/java/net/minecraft/world/entity/animal/frog/Frog.java
-@@ -411,6 +411,14 @@ public class Frog extends Animal {
+@@ -174,9 +174,11 @@ public class Frog extends Animal {
+ return this.getDeltaMovement().horizontalDistanceSqr() > 1.0E-6D && this.isInWaterOrBubble();
+ }
+
++ private int behaviorTick = 0; // Pufferfish
+ @Override
+ protected void customServerAiStep() {
+ this.level.getProfiler().push("frogBrain");
++ if (this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish
+ this.getBrain().tick((ServerLevel)this.level, this);
+ this.level.getProfiler().pop();
+ this.level.getProfiler().push("frogActivityUpdate");
+@@ -411,6 +413,14 @@ public class Frog extends Animal {
}
static class FrogPathNavigation extends AmphibiousPathNavigation {
@@ -4386,7 +4414,7 @@ index bb6063ae7f4438916306ce876057f7488537b444..9a2d1285c207290946ae664915a77b8f
FrogPathNavigation(Frog frog, Level world) {
super(frog, world);
}
-@@ -419,7 +427,13 @@ public class Frog extends Animal {
+@@ -419,7 +429,13 @@ public class Frog extends Animal {
protected PathFinder createPathFinder(int range) {
this.nodeEvaluator = new Frog.FrogNodeEvaluator(true);
this.nodeEvaluator.setCanPassDoors(true);
@@ -4401,6 +4429,22 @@ index bb6063ae7f4438916306ce876057f7488537b444..9a2d1285c207290946ae664915a77b8f
}
}
}
+diff --git a/src/main/java/net/minecraft/world/entity/animal/frog/Tadpole.java b/src/main/java/net/minecraft/world/entity/animal/frog/Tadpole.java
+index 3dd4e6d622a6daafa00ae971edd88a147e34beef..32cca29fd622d18030931e1f330791491e7f9fa0 100644
+--- a/src/main/java/net/minecraft/world/entity/animal/frog/Tadpole.java
++++ b/src/main/java/net/minecraft/world/entity/animal/frog/Tadpole.java
+@@ -76,9 +76,11 @@ public class Tadpole extends AbstractFish {
+ return SoundEvents.TADPOLE_FLOP;
+ }
+
++ private int behaviorTick = 0; // Pufferfish
+ @Override
+ protected void customServerAiStep() {
+ this.level.getProfiler().push("tadpoleBrain");
++ if (this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish
+ this.getBrain().tick((ServerLevel) this.level, this);
+ this.level.getProfiler().pop();
+ this.level.getProfiler().push("tadpoleActivityUpdate");
diff --git a/src/main/java/net/minecraft/world/entity/animal/goat/Goat.java b/src/main/java/net/minecraft/world/entity/animal/goat/Goat.java
index 31be36e6b7b6bd0c0d7fda4e1b03ecd38947f3a5..362f952888f63a453a4352a9f1dc7df799244a3c 100644
--- a/src/main/java/net/minecraft/world/entity/animal/goat/Goat.java
@@ -4507,6 +4551,24 @@ index 793576928dad6752dddd86e62d4c0800d8515fc4..9bde52b723237b1f0f945bc564009e35
this.getBrain().tick((ServerLevel) this.level, this);
this.level.getProfiler().pop();
PiglinAi.updateActivity(this);
+diff --git a/src/main/java/net/minecraft/world/entity/monster/warden/Warden.java b/src/main/java/net/minecraft/world/entity/monster/warden/Warden.java
+index 27bd70dc30c8472e5a80f3273f9233a0392f831d..b3158b1a7772f1254dd081ff6d3278a92192e896 100644
+--- a/src/main/java/net/minecraft/world/entity/monster/warden/Warden.java
++++ b/src/main/java/net/minecraft/world/entity/monster/warden/Warden.java
+@@ -270,11 +270,13 @@ public class Warden extends Monster implements VibrationListener.VibrationListen
+
+ }
+
++ private int behaviorTick = 0; // Pufferfish
+ @Override
+ protected void customServerAiStep() {
+ ServerLevel worldserver = (ServerLevel) this.level;
+
+ worldserver.getProfiler().push("wardenBrain");
++ if (this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish
+ this.getBrain().tick(worldserver, this);
+ this.level.getProfiler().pop();
+ super.customServerAiStep();
diff --git a/src/main/java/net/minecraft/world/entity/npc/Villager.java b/src/main/java/net/minecraft/world/entity/npc/Villager.java
index 10b45ec24a5a0867106d1694312385ad1e267f43..93077e8c6b5a35adc6febb749d1d08be172402f1 100644
--- a/src/main/java/net/minecraft/world/entity/npc/Villager.java
diff --git a/patches/server/0002-Fix-pufferfish-issues.patch b/patches/server/0002-Fix-pufferfish-issues.patch
index 207967dc9..5451f412e 100644
--- a/patches/server/0002-Fix-pufferfish-issues.patch
+++ b/patches/server/0002-Fix-pufferfish-issues.patch
@@ -4,39 +4,6 @@ Date: Sun, 12 Jun 2022 09:18:57 -0500
Subject: [PATCH] Fix pufferfish issues
-diff --git a/src/main/java/gg/pufferfish/pufferfish/PufferfishConfig.java b/src/main/java/gg/pufferfish/pufferfish/PufferfishConfig.java
-index 38cb29c646ff496ffaa6553f98a565b71155c464..76bbaa30dd5ec60024129542f3bd5c2cac8ce426 100644
---- a/src/main/java/gg/pufferfish/pufferfish/PufferfishConfig.java
-+++ b/src/main/java/gg/pufferfish/pufferfish/PufferfishConfig.java
-@@ -36,6 +36,7 @@ public class PufferfishConfig {
-
- private static final YamlFile config = new YamlFile();
- private static int updates = 0;
-+ public static File pufferfishFile; // Purpur
-
- private static ConfigurationSection convertToBukkit(org.simpleyaml.configuration.ConfigurationSection section) {
- ConfigurationSection newSection = new MemoryConfiguration();
-@@ -58,7 +59,7 @@ public class PufferfishConfig {
- }
-
- public static void load() throws IOException {
-- File configFile = new File("pufferfish.yml");
-+ File configFile = pufferfishFile; // Purpur
-
- if (configFile.exists()) {
- try {
-diff --git a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java
-index 519883c5549744e047a8a96afee142746fcb49cd..7cf328cf8d31f1041cb964a5a6289c27fd65d3bd 100644
---- a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java
-+++ b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java
-@@ -223,6 +223,7 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface
- thread.start(); // Paper - start console thread after MinecraftServer.console & PaperConfig are initialized
- io.papermc.paper.command.PaperCommands.registerCommands(this);
- com.destroystokyo.paper.Metrics.PaperMetrics.startMetrics();
-+ gg.pufferfish.pufferfish.PufferfishConfig.pufferfishFile = (java.io.File) options.valueOf("pufferfish-settings"); // Purpur
- com.destroystokyo.paper.VersionHistoryManager.INSTANCE.getClass(); // load version history now
- io.papermc.paper.brigadier.PaperBrigadierProviderImpl.INSTANCE.getClass(); // init PaperBrigadierProvider
- // Paper end
diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java
index 0c71d72fb04eb00e159ddd456df82376fc912b4e..da146b6e30a97ed27732165e3defa747bef7c14b 100644
--- a/src/main/java/net/minecraft/server/level/ServerLevel.java
@@ -76,22 +43,3 @@ index 0b08a91ae9dc73c011dbb5f517becac7d08fd1e9..6fbf26eb7da8df2f0a4158ff9f120225
}
public org.bukkit.Chunk bukkitChunk;
-diff --git a/src/main/java/org/bukkit/craftbukkit/Main.java b/src/main/java/org/bukkit/craftbukkit/Main.java
-index 56a784e943cb5d8b15b41e3e66545ebf166c221c..d9882b1211aea28de4890aa8b121e69a539a7aa0 100644
---- a/src/main/java/org/bukkit/craftbukkit/Main.java
-+++ b/src/main/java/org/bukkit/craftbukkit/Main.java
-@@ -164,6 +164,14 @@ public class Main {
- .describedAs("Jar file");
- // Paper end
-
-+ // Purpur Start
-+ acceptsAll(asList("pufferfish", "pufferfish-settings"), "File for pufferfish settings")
-+ .withRequiredArg()
-+ .ofType(File.class)
-+ .defaultsTo(new File("pufferfish.yml"))
-+ .describedAs("Yml file");
-+ // Purpur end
-+
- // Paper start
- acceptsAll(asList("server-name"), "Name of the server")
- .withRequiredArg()
diff --git a/patches/server/0003-Rebrand.patch b/patches/server/0003-Rebrand.patch
index 2d6b953e4..f5dbfb79d 100644
--- a/patches/server/0003-Rebrand.patch
+++ b/patches/server/0003-Rebrand.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] Rebrand
diff --git a/build.gradle.kts b/build.gradle.kts
-index 27d1663fea7cbddfa4e2000cf73d215886c70aa5..a9acec9feef3c5322ce2c312cd8800bcdaca0947 100644
+index 7074295d7399d03e259598bb4bfa0f21434d74be..dc00d06f9bd4cc7403e0fe89822ed40ed2e148c8 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -9,7 +9,7 @@ plugins {
@@ -15,7 +15,7 @@ index 27d1663fea7cbddfa4e2000cf73d215886c70aa5..a9acec9feef3c5322ce2c312cd8800bc
- implementation(project(":pufferfish-api")) // Pufferfish // Paper
+ implementation(project(":purpur-api")) // Purpur
// Pufferfish start
- implementation("io.papermc.paper:paper-mojangapi:1.19.2-R0.1-SNAPSHOT") { // Purpur
+ implementation("io.papermc.paper:paper-mojangapi:1.19.2-R0.1-SNAPSHOT") {
exclude("io.papermc.paper", "paper-api")
@@ -44,6 +44,9 @@ dependencies {
runtimeOnly("mysql:mysql-connector-java:8.0.29")
@@ -199,10 +199,10 @@ index 92f685b1b6015cdd3e6c50fd39a79e2ad187fc91..98a166edfda01f5e07a144a34fd57f0e
public SystemReport fillSystemReport(SystemReport details) {
diff --git a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java
-index 7cf328cf8d31f1041cb964a5a6289c27fd65d3bd..8a42d36d450c024b1c465d134649a6db6d97bdc3 100644
+index 519883c5549744e047a8a96afee142746fcb49cd..7c09182f465b66979e1981222d20fa4f574680d5 100644
--- a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java
+++ b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java
-@@ -286,11 +286,12 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface
+@@ -285,11 +285,12 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface
DedicatedServer.LOGGER.warn("**** SERVER IS RUNNING IN OFFLINE/INSECURE MODE!");
DedicatedServer.LOGGER.warn("The server will make no attempt to authenticate usernames. Beware.");
// Spigot start
@@ -231,7 +231,7 @@ index c31b9a6b1d4548d507ecb60d42ca9f96f49f6c4b..f613825c69a8d683b8029fe345031259
private static final int DEFAULT_SIZE_THRESHOLD = 1024 * 8;
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
-index a464d0a771875d3574fe4e461abe7212a933baf5..27b2416f725a57fcdc14378e7c14713978e51783 100644
+index 660d3f6e8a59751aa1d5b71f5bab72254b6065b8..0ab7d6b9fa8c1eca9b2e3b2548c37b444e1576dc 100644
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
@@ -248,7 +248,7 @@ import javax.annotation.Nullable; // Paper
diff --git a/patches/server/0004-Purpur-config-files.patch b/patches/server/0004-Purpur-config-files.patch
index 4255cbbfb..241583958 100644
--- a/patches/server/0004-Purpur-config-files.patch
+++ b/patches/server/0004-Purpur-config-files.patch
@@ -64,10 +64,10 @@ index dd0143f319d4adef8834c513af34b1cce7a94a84..40f6d9845d2405c6e54c5213618e1b21
if (this.source.acceptsSuccess() && !this.silent) {
this.source.sendSystemMessage(message);
diff --git a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java
-index 8a42d36d450c024b1c465d134649a6db6d97bdc3..956e21a45e82e288efa40100d7b4f0f05f5aa6e5 100644
+index 7c09182f465b66979e1981222d20fa4f574680d5..629024e5c3f480bd50ae2df9dadb72f06a62c3bf 100644
--- a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java
+++ b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java
-@@ -223,7 +223,16 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface
+@@ -223,6 +223,15 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface
thread.start(); // Paper - start console thread after MinecraftServer.console & PaperConfig are initialized
io.papermc.paper.command.PaperCommands.registerCommands(this);
com.destroystokyo.paper.Metrics.PaperMetrics.startMetrics();
@@ -79,7 +79,6 @@ index 8a42d36d450c024b1c465d134649a6db6d97bdc3..956e21a45e82e288efa40100d7b4f0f0
+ return false;
+ }
+ org.purpurmc.purpur.PurpurConfig.registerCommands();
- gg.pufferfish.pufferfish.PufferfishConfig.pufferfishFile = (java.io.File) options.valueOf("pufferfish-settings"); // Purpur
+ // Purpur end
com.destroystokyo.paper.VersionHistoryManager.INSTANCE.getClass(); // load version history now
io.papermc.paper.brigadier.PaperBrigadierProviderImpl.INSTANCE.getClass(); // init PaperBrigadierProvider
@@ -106,7 +105,7 @@ index b6f5d2aa4c6edb61421a553211ce71592d8c767a..9d68706d23da00700a89b533e9efefa3
this.world = new CraftWorld((ServerLevel) this, gen, biomeProvider, env);
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
-index 27b2416f725a57fcdc14378e7c14713978e51783..14669d51d624e7af1a06cff07f451524160687b3 100644
+index 0ab7d6b9fa8c1eca9b2e3b2548c37b444e1576dc..742c65fe400977ad7087f6756b6a80617fff2bfc 100644
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
@@ -961,6 +961,7 @@ public final class CraftServer implements Server {
@@ -153,21 +152,24 @@ index 27b2416f725a57fcdc14378e7c14713978e51783..14669d51d624e7af1a06cff07f451524
public void restart() {
org.spigotmc.RestartCommand.restart();
diff --git a/src/main/java/org/bukkit/craftbukkit/Main.java b/src/main/java/org/bukkit/craftbukkit/Main.java
-index d9882b1211aea28de4890aa8b121e69a539a7aa0..323c0e2e96b6900206eed5a42a977c06f0364da3 100644
+index 56a784e943cb5d8b15b41e3e66545ebf166c221c..64489713611840abb069957dcdb495c60c990059 100644
--- a/src/main/java/org/bukkit/craftbukkit/Main.java
+++ b/src/main/java/org/bukkit/craftbukkit/Main.java
-@@ -170,6 +170,11 @@ public class Main {
- .ofType(File.class)
- .defaultsTo(new File("pufferfish.yml"))
- .describedAs("Yml file");
+@@ -164,6 +164,14 @@ public class Main {
+ .describedAs("Jar file");
+ // Paper end
+
++ // Purpur Start
+ acceptsAll(asList("purpur", "purpur-settings"), "File for purpur settings")
+ .withRequiredArg()
+ .ofType(File.class)
+ .defaultsTo(new File("purpur.yml"))
+ .describedAs("Yml file");
- // Purpur end
-
++ // Purpur end
++
// Paper start
+ acceptsAll(asList("server-name"), "Name of the server")
+ .withRequiredArg()
diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java
new file mode 100644
index 0000000000000000000000000000000000000000..6dbb2e10ed244845fe9f857b237589900ea3cf40
diff --git a/patches/server/0005-Purpur-client-support.patch b/patches/server/0005-Purpur-client-support.patch
index ab26f999b..04258b5e9 100644
--- a/patches/server/0005-Purpur-client-support.patch
+++ b/patches/server/0005-Purpur-client-support.patch
@@ -17,10 +17,10 @@ index 3615576c24d5d6790a6894a91180de25fa0e5a9c..266a26d73dd5aec427b64a638693decf
public double lastEntitySpawnRadiusSquared; // Paper - optimise isOutsideRange, this field is in blocks
public final com.destroystokyo.paper.util.misc.PooledLinkedHashSets.PooledObjectLinkedOpenHashSet cachedSingleHashSet; // Paper
diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
-index 9aab29dd7a09c306d6c0e1e8143daf005d611d65..0f9dea99893581122a6d5f9176b374c1c815973c 100644
+index 3d4e0be647f48a33d1afcdbec62c6624f2086294..5d8f2eedb1c2acc82e61a4adc3c688802e2d25a7 100644
--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
-@@ -3653,6 +3653,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
+@@ -3647,6 +3647,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
private static final ResourceLocation CUSTOM_UNREGISTER = new ResourceLocation("unregister");
private static final ResourceLocation MINECRAFT_BRAND = new ResourceLocation("brand"); // Paper - Brand support
@@ -28,7 +28,7 @@ index 9aab29dd7a09c306d6c0e1e8143daf005d611d65..0f9dea99893581122a6d5f9176b374c1
@Override
public void handleCustomPayload(ServerboundCustomPayloadPacket packet) {
-@@ -3677,6 +3678,13 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
+@@ -3671,6 +3672,13 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
ServerGamePacketListenerImpl.LOGGER.error("Couldn\'t unregister custom payload", ex);
this.disconnect("Invalid payload UNREGISTER!", org.bukkit.event.player.PlayerKickEvent.Cause.INVALID_PAYLOAD); // Paper - kick event cause
}
diff --git a/patches/server/0007-Component-related-conveniences.patch b/patches/server/0007-Component-related-conveniences.patch
index 036363c8b..a90566743 100644
--- a/patches/server/0007-Component-related-conveniences.patch
+++ b/patches/server/0007-Component-related-conveniences.patch
@@ -36,10 +36,10 @@ index 266a26d73dd5aec427b64a638693decf70ea36cb..2049fa1008be5208d9bb168dd6548361
public void displayClientMessage(Component message, boolean overlay) {
this.sendSystemMessage(message, overlay);
diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java
-index 8326775a4005b03468fba1ec556f951dc740c302..26400f0efc7e0f97d2010532d42d0caaff99e071 100644
+index e1b6017953edffcea0be81b70cf7b22ce8c0570d..41c00d0fad32f2e6b7928e9ecc054217529819ce 100644
--- a/src/main/java/net/minecraft/server/players/PlayerList.java
+++ b/src/main/java/net/minecraft/server/players/PlayerList.java
-@@ -1070,6 +1070,20 @@ public abstract class PlayerList {
+@@ -1077,6 +1077,20 @@ public abstract class PlayerList {
}
// CraftBukkit end
diff --git a/patches/server/0008-Ridables.patch b/patches/server/0008-Ridables.patch
index d9e35ad1d..5b7bb4a24 100644
--- a/patches/server/0008-Ridables.patch
+++ b/patches/server/0008-Ridables.patch
@@ -66,10 +66,10 @@ index 2049fa1008be5208d9bb168dd65483613a7296f1..8e3e3dbbea328f76a790477545b46d2d
public void doTick() {
diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
-index 0f9dea99893581122a6d5f9176b374c1c815973c..f11f917130298aeca48fa51c1d9ea8150df60d8b 100644
+index 5d8f2eedb1c2acc82e61a4adc3c688802e2d25a7..34955c9dc680eb64403848da27ce0c5121ef8be5 100644
--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
-@@ -2921,6 +2921,8 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
+@@ -2915,6 +2915,8 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
ServerGamePacketListenerImpl.this.cserver.getPluginManager().callEvent(event);
@@ -2194,7 +2194,7 @@ index 45c3cec839a7c23903dedf6e3e004305da2adceb..248531727dcafb71d7d2d2767205e09a
this.targetSelector.addGoal(2, new OwnerHurtTargetGoal(this));
this.targetSelector.addGoal(3, (new HurtByTargetGoal(this, new Class[0])).setAlertOthers());
diff --git a/src/main/java/net/minecraft/world/entity/animal/allay/Allay.java b/src/main/java/net/minecraft/world/entity/animal/allay/Allay.java
-index 2d87b740e84435ef9bd3eee3d3e2af9f707a0826..d9cd71c57cde4cbd7131344ba7760fb6c224c7b6 100644
+index d38d1e3692e093d6707b6bd80cd56ec4afcf093b..c960aac9e1dbffe5e765f9adcfacc1966dc29148 100644
--- a/src/main/java/net/minecraft/world/entity/animal/allay/Allay.java
+++ b/src/main/java/net/minecraft/world/entity/animal/allay/Allay.java
@@ -101,10 +101,23 @@ public class Allay extends PathfinderMob implements InventoryCarrier {
@@ -2320,7 +2320,7 @@ index fdd2c63ff0017bafa544a3cff2ee6d2d62c92cb3..32b31e5efb5fc68430b9bcd4cd972494
}
diff --git a/src/main/java/net/minecraft/world/entity/animal/frog/Frog.java b/src/main/java/net/minecraft/world/entity/animal/frog/Frog.java
-index 9a2d1285c207290946ae664915a77b8f9dc00ad7..952d8da2d5bc35aba52b9b63c3cf0e7b2c81f157 100644
+index 4c3fd27bff777139e29905e8684f6e92a44decfe..5c670b368407010524dcee1064fac2748d84cec2 100644
--- a/src/main/java/net/minecraft/world/entity/animal/frog/Frog.java
+++ b/src/main/java/net/minecraft/world/entity/animal/frog/Frog.java
@@ -83,16 +83,65 @@ public class Frog extends Animal {
@@ -2390,7 +2390,7 @@ index 9a2d1285c207290946ae664915a77b8f9dc00ad7..952d8da2d5bc35aba52b9b63c3cf0e7b
@Override
protected Brain.Provider brainProvider() {
return Brain.provider(MEMORY_TYPES, SENSOR_TYPES);
-@@ -378,7 +427,7 @@ public class Frog extends Animal {
+@@ -380,7 +429,7 @@ public class Frog extends Animal {
return world.getBlockState(pos.below()).is(BlockTags.FROGS_SPAWNABLE_ON) && isBrightEnoughToSpawn(world, pos);
}
@@ -2400,7 +2400,7 @@ index 9a2d1285c207290946ae664915a77b8f9dc00ad7..952d8da2d5bc35aba52b9b63c3cf0e7b
super(entity);
}
diff --git a/src/main/java/net/minecraft/world/entity/animal/frog/Tadpole.java b/src/main/java/net/minecraft/world/entity/animal/frog/Tadpole.java
-index 3dd4e6d622a6daafa00ae971edd88a147e34beef..4dca3788a8fa335dc5969bd61cd0658f21e3bff3 100644
+index 32cca29fd622d18030931e1f330791491e7f9fa0..8561d1994cb8c42e69ef77fad16d037c205dad33 100644
--- a/src/main/java/net/minecraft/world/entity/animal/frog/Tadpole.java
+++ b/src/main/java/net/minecraft/world/entity/animal/frog/Tadpole.java
@@ -44,13 +44,50 @@ public class Tadpole extends AbstractFish {
@@ -4944,7 +4944,7 @@ index 769e4fbaac01a4fe3a45bd9cab5c63b61fc69f53..ff149234a8f3e1c94961e41d5bc81174
this.level.getProfiler().pop();
PiglinBruteAi.updateActivity(this);
diff --git a/src/main/java/net/minecraft/world/entity/monster/warden/Warden.java b/src/main/java/net/minecraft/world/entity/monster/warden/Warden.java
-index 27bd70dc30c8472e5a80f3273f9233a0392f831d..54959365ffc81d305d07562fc5677cbb9fb97d2b 100644
+index b3158b1a7772f1254dd081ff6d3278a92192e896..df55f9a9f684b474a3bff0977069471727b242f4 100644
--- a/src/main/java/net/minecraft/world/entity/monster/warden/Warden.java
+++ b/src/main/java/net/minecraft/world/entity/monster/warden/Warden.java
@@ -120,8 +120,32 @@ public class Warden extends Monster implements VibrationListener.VibrationListen
@@ -4980,7 +4980,7 @@ index 27bd70dc30c8472e5a80f3273f9233a0392f831d..54959365ffc81d305d07562fc5677cbb
@Override
public Packet> getAddEntityPacket() {
return new ClientboundAddEntityPacket(this, this.hasPose(Pose.EMERGING) ? 1 : 0);
-@@ -403,19 +427,16 @@ public class Warden extends Monster implements VibrationListener.VibrationListen
+@@ -405,19 +429,16 @@ public class Warden extends Monster implements VibrationListener.VibrationListen
@Contract("null->false")
public boolean canTargetEntity(@Nullable Entity entity) {
diff --git a/patches/server/0010-Barrels-and-enderchests-6-rows.patch b/patches/server/0010-Barrels-and-enderchests-6-rows.patch
index d7fab0de0..d727dcb56 100644
--- a/patches/server/0010-Barrels-and-enderchests-6-rows.patch
+++ b/patches/server/0010-Barrels-and-enderchests-6-rows.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Barrels and enderchests 6 rows
diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java
-index 26400f0efc7e0f97d2010532d42d0caaff99e071..482e6e00639f80497c61d6cb42502a05559d3ff9 100644
+index 41c00d0fad32f2e6b7928e9ecc054217529819ce..3fd73a7fe1ac10edeb3e688149820682e7f20f7b 100644
--- a/src/main/java/net/minecraft/server/players/PlayerList.java
+++ b/src/main/java/net/minecraft/server/players/PlayerList.java
-@@ -1195,6 +1195,27 @@ public abstract class PlayerList {
+@@ -1202,6 +1202,27 @@ public abstract class PlayerList {
player.getBukkitEntity().recalculatePermissions(); // CraftBukkit
this.server.getCommands().sendCommands(player);
} // Paper
diff --git a/patches/server/0012-AFK-API.patch b/patches/server/0012-AFK-API.patch
index de36ca7e2..54dc2bcb0 100644
--- a/patches/server/0012-AFK-API.patch
+++ b/patches/server/0012-AFK-API.patch
@@ -68,10 +68,10 @@ index 8e3e3dbbea328f76a790477545b46d2d3013546b..905aa1311791564720e541fc4fbe1e4f
return this.stats;
}
diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
-index f11f917130298aeca48fa51c1d9ea8150df60d8b..b10a5f39145cf62b981fad6595e42ac09602d510 100644
+index 34955c9dc680eb64403848da27ce0c5121ef8be5..575839fb7bd54d6a34cf8bfa59cf1086eaf22834 100644
--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
-@@ -343,6 +343,20 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
+@@ -342,6 +342,20 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
private boolean justTeleported = false;
private boolean hasMoved; // Spigot
@@ -92,7 +92,7 @@ index f11f917130298aeca48fa51c1d9ea8150df60d8b..b10a5f39145cf62b981fad6595e42ac0
public CraftPlayer getCraftPlayer() {
return (this.player == null) ? null : (CraftPlayer) this.player.getBukkitEntity();
}
-@@ -445,6 +459,12 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
+@@ -439,6 +453,12 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
}
if (this.player.getLastActionTime() > 0L && this.server.getPlayerIdleTimeout() > 0 && Util.getMillis() - this.player.getLastActionTime() > (long) (this.server.getPlayerIdleTimeout() * 1000 * 60) && !this.player.wonGame) { // Paper - Prevent AFK kick while watching end credits.
@@ -105,7 +105,7 @@ index f11f917130298aeca48fa51c1d9ea8150df60d8b..b10a5f39145cf62b981fad6595e42ac0
this.player.resetLastActionTime(); // CraftBukkit - SPIGOT-854
this.disconnect(Component.translatable("multiplayer.disconnect.idling"), org.bukkit.event.player.PlayerKickEvent.Cause.IDLING); // Paper - kick event cause
}
-@@ -750,6 +770,8 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
+@@ -744,6 +764,8 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
this.lastYaw = to.getYaw();
this.lastPitch = to.getPitch();
@@ -114,7 +114,7 @@ index f11f917130298aeca48fa51c1d9ea8150df60d8b..b10a5f39145cf62b981fad6595e42ac0
// Skip the first time we do this
if (true) { // Spigot - don't skip any move events
Location oldTo = to.clone();
-@@ -1554,7 +1576,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
+@@ -1548,7 +1570,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
if (!this.player.isChangingDimension() && d11 > org.spigotmc.SpigotConfig.movedWronglyThreshold && !this.player.isSleeping() && !this.player.gameMode.isCreative() && this.player.gameMode.getGameModeForPlayer() != GameType.SPECTATOR) { // Spigot
flag2 = true; // Paper - diff on change, this should be moved wrongly
@@ -123,7 +123,7 @@ index f11f917130298aeca48fa51c1d9ea8150df60d8b..b10a5f39145cf62b981fad6595e42ac0
}
this.player.absMoveTo(d0, d1, d2, f, f1);
-@@ -1604,6 +1626,8 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
+@@ -1598,6 +1620,8 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
this.lastYaw = to.getYaw();
this.lastPitch = to.getPitch();
diff --git a/patches/server/0019-Player-invulnerabilities.patch b/patches/server/0019-Player-invulnerabilities.patch
index 765cb71f1..fbe0a3e20 100644
--- a/patches/server/0019-Player-invulnerabilities.patch
+++ b/patches/server/0019-Player-invulnerabilities.patch
@@ -82,10 +82,10 @@ index 905aa1311791564720e541fc4fbe1e4f8d38a0e7..577a8a033c13832bc9cf5783b8cd6d47
public Scoreboard getScoreboard() {
return this.getBukkitEntity().getScoreboard().getHandle();
diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
-index b10a5f39145cf62b981fad6595e42ac09602d510..9873e559675203df5fc0b44c820fdd2671b17c23 100644
+index 575839fb7bd54d6a34cf8bfa59cf1086eaf22834..8d13fad0bd574cf9cd01d7aa5754023aecf46104 100644
--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
-@@ -2105,12 +2105,21 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
+@@ -2099,12 +2099,21 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
@Override
public void handleResourcePackResponse(ServerboundResourcePackPacket packet) {
PacketUtils.ensureRunningOnSameThread(packet, this, this.player.getLevel());
@@ -108,10 +108,10 @@ index b10a5f39145cf62b981fad6595e42ac09602d510..9873e559675203df5fc0b44c820fdd26
this.cserver.getPluginManager().callEvent(new PlayerResourcePackStatusEvent(this.getCraftPlayer(), packStatus)); // CraftBukkit
// Paper end
diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java
-index 482e6e00639f80497c61d6cb42502a05559d3ff9..c00f332e466b6d57877d80f0038d2f65c25fd751 100644
+index 3fd73a7fe1ac10edeb3e688149820682e7f20f7b..3c2f5ab8f566dadcc16d63eec754f057bca7444c 100644
--- a/src/main/java/net/minecraft/server/players/PlayerList.java
+++ b/src/main/java/net/minecraft/server/players/PlayerList.java
-@@ -1010,6 +1010,8 @@ public abstract class PlayerList {
+@@ -1017,6 +1017,8 @@ public abstract class PlayerList {
}
// Paper end
diff --git a/patches/server/0022-Alternative-Keepalive-Handling.patch b/patches/server/0022-Alternative-Keepalive-Handling.patch
index 153bbc354..8f4a913fc 100644
--- a/patches/server/0022-Alternative-Keepalive-Handling.patch
+++ b/patches/server/0022-Alternative-Keepalive-Handling.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Alternative Keepalive Handling
diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
-index 9873e559675203df5fc0b44c820fdd2671b17c23..accc5e15eef680c82bab4fdcf759d7b17e57dd67 100644
+index 8d13fad0bd574cf9cd01d7aa5754023aecf46104..2e03ec98f16295c8adec397dfaf0fb2a101ecc88 100644
--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
-@@ -261,6 +261,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
+@@ -260,6 +260,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
private long keepAliveTime = Util.getMillis();
private boolean keepAlivePending;
private long keepAliveChallenge;
@@ -16,7 +16,7 @@ index 9873e559675203df5fc0b44c820fdd2671b17c23..accc5e15eef680c82bab4fdcf759d7b1
// CraftBukkit start - multithreaded fields
private final AtomicInteger chatSpamTickCount = new AtomicInteger();
private final java.util.concurrent.atomic.AtomicInteger tabSpamLimiter = new java.util.concurrent.atomic.AtomicInteger(); // Paper - configurable tab spam limits
-@@ -427,6 +428,21 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
+@@ -421,6 +422,21 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
long currentTime = Util.getMillis();
long elapsedTime = currentTime - this.keepAliveTime;
@@ -38,7 +38,7 @@ index 9873e559675203df5fc0b44c820fdd2671b17c23..accc5e15eef680c82bab4fdcf759d7b1
if (this.keepAlivePending) {
if (!this.processedDisconnect && elapsedTime >= KEEPALIVE_LIMIT) { // check keepalive limit, don't fire if already disconnected
ServerGamePacketListenerImpl.LOGGER.warn("{} was kicked due to keepalive timeout!", this.player.getScoreboardName()); // more info
-@@ -3638,6 +3654,16 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
+@@ -3632,6 +3648,16 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
@Override
public void handleKeepAlive(ServerboundKeepAlivePacket packet) {
diff --git a/patches/server/0027-Disable-outdated-build-check.patch b/patches/server/0027-Disable-outdated-build-check.patch
index d7745c749..8bd4a12f5 100644
--- a/patches/server/0027-Disable-outdated-build-check.patch
+++ b/patches/server/0027-Disable-outdated-build-check.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Disable outdated build check
diff --git a/src/main/java/org/bukkit/craftbukkit/Main.java b/src/main/java/org/bukkit/craftbukkit/Main.java
-index 323c0e2e96b6900206eed5a42a977c06f0364da3..ee15a1f29b7af499ccedb3ff37413d68fb98d270 100644
+index 64489713611840abb069957dcdb495c60c990059..420300ce19d01f36f071eae44efd4cb32beb0ed6 100644
--- a/src/main/java/org/bukkit/craftbukkit/Main.java
+++ b/src/main/java/org/bukkit/craftbukkit/Main.java
-@@ -281,7 +281,7 @@ public class Main {
+@@ -276,7 +276,7 @@ public class Main {
System.setProperty(TerminalConsoleAppender.JLINE_OVERRIDE_PROPERTY, "false"); // Paper
}
diff --git a/patches/server/0051-Add-permission-for-F3-N-debug.patch b/patches/server/0051-Add-permission-for-F3-N-debug.patch
index 9677b9733..61d7fd875 100644
--- a/patches/server/0051-Add-permission-for-F3-N-debug.patch
+++ b/patches/server/0051-Add-permission-for-F3-N-debug.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Add permission for F3+N debug
diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java
-index c00f332e466b6d57877d80f0038d2f65c25fd751..26ebd7726783abd97c968c5183545a6e74082956 100644
+index 3c2f5ab8f566dadcc16d63eec754f057bca7444c..a71f315dfedc4e5856f0955b6f97ae5c374e020f 100644
--- a/src/main/java/net/minecraft/server/players/PlayerList.java
+++ b/src/main/java/net/minecraft/server/players/PlayerList.java
-@@ -1189,6 +1189,7 @@ public abstract class PlayerList {
+@@ -1196,6 +1196,7 @@ public abstract class PlayerList {
} else {
b0 = (byte) (24 + permissionLevel);
}
diff --git a/patches/server/0077-Allow-color-codes-in-books.patch b/patches/server/0077-Allow-color-codes-in-books.patch
index 8b296d6dc..6214d1048 100644
--- a/patches/server/0077-Allow-color-codes-in-books.patch
+++ b/patches/server/0077-Allow-color-codes-in-books.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Allow color codes in books
diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
-index accc5e15eef680c82bab4fdcf759d7b17e57dd67..9ad05f4e414e147ff1bdb90d83fa700b30d311a5 100644
+index 2e03ec98f16295c8adec397dfaf0fb2a101ecc88..9d8ed13f7bf6ff1bf2a3d1959687d12fa1073374 100644
--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
-@@ -1348,13 +1348,16 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
+@@ -1342,13 +1342,16 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
itemstack1.setTag(nbttagcompound.copy());
}
@@ -28,7 +28,7 @@ index accc5e15eef680c82bab4fdcf759d7b17e57dd67..9ad05f4e414e147ff1bdb90d83fa700b
this.updateBookPages(pages, (s) -> {
return Component.Serializer.toJson(Component.literal(s));
-@@ -1366,10 +1369,13 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
+@@ -1360,10 +1363,13 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
public void updateBookPages(List list, UnaryOperator unaryoperator, ItemStack itemstack, int slot, ItemStack handItem) { // CraftBukkit
ListTag nbttaglist = new ListTag();
@@ -44,7 +44,7 @@ index accc5e15eef680c82bab4fdcf759d7b17e57dd67..9ad05f4e414e147ff1bdb90d83fa700b
Objects.requireNonNull(nbttaglist);
stream.forEach(nbttaglist::add);
-@@ -1379,11 +1385,11 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
+@@ -1373,11 +1379,11 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
for (int j = list.size(); i < j; ++i) {
FilteredText filteredtext = (FilteredText) list.get(i);
@@ -58,7 +58,7 @@ index accc5e15eef680c82bab4fdcf759d7b17e57dd67..9ad05f4e414e147ff1bdb90d83fa700b
}
}
-@@ -1396,6 +1402,16 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
+@@ -1390,6 +1396,16 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
this.player.getInventory().setItem(slot, CraftEventFactory.handleEditBookEvent(player, slot, handItem, itemstack)); // CraftBukkit // Paper - Don't ignore result (see other callsite for handleEditBookEvent)
}
diff --git a/patches/server/0078-Entity-lifespan.patch b/patches/server/0078-Entity-lifespan.patch
index c78f54034..0342a515f 100644
--- a/patches/server/0078-Entity-lifespan.patch
+++ b/patches/server/0078-Entity-lifespan.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Entity lifespan
diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
-index 9ad05f4e414e147ff1bdb90d83fa700b30d311a5..bdabf2ce37b8662fe3d2387b791eee217ce7b61c 100644
+index 9d8ed13f7bf6ff1bf2a3d1959687d12fa1073374..febc3b007a0486bdcd9abb2d8f8676f8f02bbdc0 100644
--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
-@@ -2976,6 +2976,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
+@@ -2970,6 +2970,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
}
if (entity.distanceToSqr(this.player.getEyePosition()) < ServerGamePacketListenerImpl.MAX_INTERACTION_DISTANCE) {
diff --git a/patches/server/0098-Despawn-rate-config-options-per-projectile-type.patch b/patches/server/0098-Despawn-rate-config-options-per-projectile-type.patch
index 12be50c7d..3344177a2 100644
--- a/patches/server/0098-Despawn-rate-config-options-per-projectile-type.patch
+++ b/patches/server/0098-Despawn-rate-config-options-per-projectile-type.patch
@@ -7,10 +7,10 @@ This patch's implementation has been removed in favor of Pufferfish's entity-tim
The config remains for migration purposes.
diff --git a/src/main/java/gg/pufferfish/pufferfish/PufferfishConfig.java b/src/main/java/gg/pufferfish/pufferfish/PufferfishConfig.java
-index e03dd590b0c6c8e85d0f78f9ec48168753a92a48..da5bcc3c9a650612f832d3e39fea68613ad9e16b 100644
+index 38cb29c646ff496ffaa6553f98a565b71155c464..e077a43cf3f06207234cb445b58dff79eabcb9c6 100644
--- a/src/main/java/gg/pufferfish/pufferfish/PufferfishConfig.java
+++ b/src/main/java/gg/pufferfish/pufferfish/PufferfishConfig.java
-@@ -122,6 +122,22 @@ public class PufferfishConfig {
+@@ -121,6 +121,22 @@ public class PufferfishConfig {
config.setComment(key, String.join("\n", comment), CommentType.BLOCK);
}
}
diff --git a/patches/server/0120-Spread-out-and-optimise-player-list-ticksSpread-out-.patch b/patches/server/0120-Spread-out-and-optimise-player-list-ticksSpread-out-.patch
index 4246ae42f..3487bac56 100644
--- a/patches/server/0120-Spread-out-and-optimise-player-list-ticksSpread-out-.patch
+++ b/patches/server/0120-Spread-out-and-optimise-player-list-ticksSpread-out-.patch
@@ -6,10 +6,10 @@ Subject: [PATCH] Spread out and optimise player list ticksSpread out and
diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java
-index 26ebd7726783abd97c968c5183545a6e74082956..22fde2975bc5d66bd60ce0325945ee7c5afac55e 100644
+index a71f315dfedc4e5856f0955b6f97ae5c374e020f..80be27593ce08a0acb01fde04994ed60975a7a7f 100644
--- a/src/main/java/net/minecraft/server/players/PlayerList.java
+++ b/src/main/java/net/minecraft/server/players/PlayerList.java
-@@ -1024,22 +1024,22 @@ public abstract class PlayerList {
+@@ -1031,22 +1031,22 @@ public abstract class PlayerList {
}
public void tick() {
diff --git a/patches/server/0125-Implement-TPSBar.patch b/patches/server/0125-Implement-TPSBar.patch
index b73a7c896..5b13c2bb7 100644
--- a/patches/server/0125-Implement-TPSBar.patch
+++ b/patches/server/0125-Implement-TPSBar.patch
@@ -29,10 +29,10 @@ index eb12fed7ee6d7d3a5f5b9e99d8f11b38122cac7e..872632875d1569dd348c78983b260ebe
this.hasLoggedStop = true; // Paper
if (isDebugging()) io.papermc.paper.util.TraceUtil.dumpTraceForThread("Server stopped"); // Paper
diff --git a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java
-index 956e21a45e82e288efa40100d7b4f0f05f5aa6e5..4bd120ab4d19052ed769c4dd8a682650f0020bbc 100644
+index 629024e5c3f480bd50ae2df9dadb72f06a62c3bf..19bf680e222d7f91a0e7f67b29e3a5e38a35c1e7 100644
--- a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java
+++ b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java
-@@ -352,6 +352,7 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface
+@@ -351,6 +351,7 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface
}
if (gg.pufferfish.pufferfish.PufferfishConfig.enableAsyncMobSpawning) mobSpawnExecutor.start(); // Pufferfish
@@ -83,10 +83,10 @@ index 725358518b73b908c8150bdbabed68909c91f4d4..b858ce2ad443f6690dd71e56fb9eea14
// Purpur end
}
diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java
-index 22fde2975bc5d66bd60ce0325945ee7c5afac55e..d1acb410384899866458fbb8b63284a0148c92f2 100644
+index 80be27593ce08a0acb01fde04994ed60975a7a7f..b82000ecb5c5f61422e1a9c34ef1d2924d447d4b 100644
--- a/src/main/java/net/minecraft/server/players/PlayerList.java
+++ b/src/main/java/net/minecraft/server/players/PlayerList.java
-@@ -499,6 +499,7 @@ public abstract class PlayerList {
+@@ -506,6 +506,7 @@ public abstract class PlayerList {
scoreboard.addPlayerToTeam(player.getScoreboardName(), collideRuleTeam);
}
// Paper end
@@ -94,7 +94,7 @@ index 22fde2975bc5d66bd60ce0325945ee7c5afac55e..d1acb410384899866458fbb8b63284a0
// CraftBukkit - Moved from above, added world
PlayerList.LOGGER.info("{}[{}] logged in with entity id {} at ([{}]{}, {}, {})", player.getName().getString(), s1, player.getId(), worldserver1.serverLevelData.getLevelName(), player.getX(), player.getY(), player.getZ());
}
-@@ -609,6 +610,8 @@ public abstract class PlayerList {
+@@ -616,6 +617,8 @@ public abstract class PlayerList {
}
public net.kyori.adventure.text.Component remove(ServerPlayer entityplayer, net.kyori.adventure.text.Component leaveMessage) {
// Paper end
diff --git a/patches/server/0127-PlayerBookTooLargeEvent.patch b/patches/server/0127-PlayerBookTooLargeEvent.patch
index c8208e54a..552a58b12 100644
--- a/patches/server/0127-PlayerBookTooLargeEvent.patch
+++ b/patches/server/0127-PlayerBookTooLargeEvent.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] PlayerBookTooLargeEvent
diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
-index bdabf2ce37b8662fe3d2387b791eee217ce7b61c..1cee1e7f228d52af4f166d122f21ad37c3704a46 100644
+index febc3b007a0486bdcd9abb2d8f8676f8f02bbdc0..a761a005001fede9e3db415753a4ead59d7dd6f8 100644
--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
-@@ -1268,10 +1268,12 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
+@@ -1262,10 +1262,12 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
int maxBookPageSize = io.papermc.paper.configuration.GlobalConfiguration.get().itemValidation.bookSize.pageMax;
double multiplier = Math.max(0.3D, Math.min(1D, io.papermc.paper.configuration.GlobalConfiguration.get().itemValidation.bookSize.totalMultiplier));
long byteAllowed = maxBookPageSize;
@@ -21,7 +21,7 @@ index bdabf2ce37b8662fe3d2387b791eee217ce7b61c..1cee1e7f228d52af4f166d122f21ad37
server.scheduleOnMain(() -> this.disconnect("Book too large!", org.bukkit.event.player.PlayerKickEvent.Cause.ILLEGAL_ACTION)); // Paper - kick event cause
return;
}
-@@ -1295,6 +1297,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
+@@ -1289,6 +1291,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
if (byteTotal > byteAllowed) {
ServerGamePacketListenerImpl.LOGGER.warn(this.player.getScoreboardName() + " tried to send too large of a book. Book Size: " + byteTotal + " - Allowed: "+ byteAllowed + " - Pages: " + pageList.size());
diff --git a/patches/server/0140-Dont-run-with-scissors.patch b/patches/server/0140-Dont-run-with-scissors.patch
index 5144dac54..32397d48e 100644
--- a/patches/server/0140-Dont-run-with-scissors.patch
+++ b/patches/server/0140-Dont-run-with-scissors.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Dont run with scissors!
diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
-index 1cee1e7f228d52af4f166d122f21ad37c3704a46..c914fbbb8b63506e345c747ff5ef0bbbb471c9eb 100644
+index a761a005001fede9e3db415753a4ead59d7dd6f8..0010a80db783d1b33af7751d0c2d85a97df85add 100644
--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
-@@ -1702,6 +1702,13 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
+@@ -1696,6 +1696,13 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
this.player.resetFallDistance();
}
@@ -22,7 +22,7 @@ index 1cee1e7f228d52af4f166d122f21ad37c3704a46..c914fbbb8b63506e345c747ff5ef0bbb
this.player.checkMovementStatistics(this.player.getX() - d3, this.player.getY() - d4, this.player.getZ() - d5);
this.lastGoodX = this.player.getX();
this.lastGoodY = this.player.getY();
-@@ -1735,6 +1742,12 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
+@@ -1729,6 +1736,12 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
}
// Paper end - optimise out extra getCubes
diff --git a/patches/server/0191-Allow-player-join-full-server-by-permission.patch b/patches/server/0191-Allow-player-join-full-server-by-permission.patch
index 0c7cd5dbf..934b58571 100644
--- a/patches/server/0191-Allow-player-join-full-server-by-permission.patch
+++ b/patches/server/0191-Allow-player-join-full-server-by-permission.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Allow player join full server by permission
diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java
-index d1acb410384899866458fbb8b63284a0148c92f2..a6fe2e75b3c21a420432f33c9f5666fc558a06d1 100644
+index b82000ecb5c5f61422e1a9c34ef1d2924d447d4b..d9153b04b242e22d6e8894bfd45c92ea6466df00 100644
--- a/src/main/java/net/minecraft/server/players/PlayerList.java
+++ b/src/main/java/net/minecraft/server/players/PlayerList.java
-@@ -779,7 +779,7 @@ public abstract class PlayerList {
+@@ -786,7 +786,7 @@ public abstract class PlayerList {
event.disallow(PlayerLoginEvent.Result.KICK_BANNED, PaperAdventure.asAdventure(ichatmutablecomponent)); // Paper - Adventure
} else {
// return this.players.size() >= this.maxPlayers && !this.canBypassPlayerLimit(gameprofile) ? IChatBaseComponent.translatable("multiplayer.disconnect.server_full") : null;
diff --git a/patches/server/0227-Shift-right-click-to-use-exp-for-mending.patch b/patches/server/0227-Shift-right-click-to-use-exp-for-mending.patch
index 384a73a9e..0de59080a 100644
--- a/patches/server/0227-Shift-right-click-to-use-exp-for-mending.patch
+++ b/patches/server/0227-Shift-right-click-to-use-exp-for-mending.patch
@@ -36,10 +36,10 @@ index 28463bca77d62ad9175a55cffc92110ffa16fadc..bd77301ef6cde21e1ee1966d2ffa4186
+ // Purpur end
}
diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
-index c914fbbb8b63506e345c747ff5ef0bbbb471c9eb..7f3c1c9776aab0b92cac6feb1845e55a701a5705 100644
+index 0010a80db783d1b33af7751d0c2d85a97df85add..ae664ac204f47916da38c6ce70bf8531bb6cb704 100644
--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
-@@ -2101,6 +2101,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
+@@ -2095,6 +2095,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
boolean cancelled;
if (movingobjectposition == null || movingobjectposition.getType() != HitResult.Type.BLOCK) {
diff --git a/patches/server/0233-UPnP-Port-Forwarding.patch b/patches/server/0233-UPnP-Port-Forwarding.patch
index 91df38556..197104589 100644
--- a/patches/server/0233-UPnP-Port-Forwarding.patch
+++ b/patches/server/0233-UPnP-Port-Forwarding.patch
@@ -32,10 +32,10 @@ index d8e0bac3de2f7810d7af82fe6c5c00870fef3155..d950b72b7287b857cb849c1a2fc931fa
if (this.server != null) {
this.server.disablePlugins();
diff --git a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java
-index 4bd120ab4d19052ed769c4dd8a682650f0020bbc..de711300db4b9abe30bddb430875d4503355e9e2 100644
+index 19bf680e222d7f91a0e7f67b29e3a5e38a35c1e7..ac860bf07d0fca29adad3de79396055f957a64e9 100644
--- a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java
+++ b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java
-@@ -284,6 +284,30 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface
+@@ -283,6 +283,30 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface
DedicatedServer.LOGGER.warn("Perhaps a server is already running on that port?");
return false;
}
diff --git a/patches/server/0238-Signs-allow-color-codes.patch b/patches/server/0238-Signs-allow-color-codes.patch
index 62f96c6ce..26ab55aac 100644
--- a/patches/server/0238-Signs-allow-color-codes.patch
+++ b/patches/server/0238-Signs-allow-color-codes.patch
@@ -17,10 +17,10 @@ index 68008facb6cfcccbcb7501c84c5da9014321ce4a..4d28a1f9fe43bb8e9f5ffaf06895c94f
this.connection.send(new ClientboundBlockUpdatePacket(this.level, sign.getBlockPos()));
this.connection.send(new ClientboundOpenSignEditorPacket(sign.getBlockPos()));
diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
-index 7f3c1c9776aab0b92cac6feb1845e55a701a5705..1eafc5667fd6a9746df7f4233cb021c2c435347e 100644
+index ae664ac204f47916da38c6ce70bf8531bb6cb704..d842f7c95c1105ca5e6a5bd4bdc0347cfa1feee9 100644
--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
-@@ -3662,11 +3662,17 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
+@@ -3656,11 +3656,17 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
for (int i = 0; i < signText.size(); ++i) {
FilteredText filteredtext = (FilteredText) signText.get(i);
diff --git a/patches/server/0251-Give-bee-counts-in-beehives-to-Purpur-clients.patch b/patches/server/0251-Give-bee-counts-in-beehives-to-Purpur-clients.patch
index 6e870a14f..e64d5b386 100644
--- a/patches/server/0251-Give-bee-counts-in-beehives-to-Purpur-clients.patch
+++ b/patches/server/0251-Give-bee-counts-in-beehives-to-Purpur-clients.patch
@@ -17,10 +17,10 @@ index d950b72b7287b857cb849c1a2fc931fa7d30f25f..ad75fb1e1d8c91b46c98fc666f12b72f
this.hasLoggedStop = true; // Paper
if (isDebugging()) io.papermc.paper.util.TraceUtil.dumpTraceForThread("Server stopped"); // Paper
diff --git a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java
-index de711300db4b9abe30bddb430875d4503355e9e2..7875606264dc7bc2c4a0e8dfacecf07427c1d5a1 100644
+index ac860bf07d0fca29adad3de79396055f957a64e9..5de95ba778e4a0cd1467e7392aa80eda1bd21a03 100644
--- a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java
+++ b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java
-@@ -377,6 +377,7 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface
+@@ -376,6 +376,7 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface
if (gg.pufferfish.pufferfish.PufferfishConfig.enableAsyncMobSpawning) mobSpawnExecutor.start(); // Pufferfish
org.purpurmc.purpur.task.BossBarTask.startAll(); // Purpur
diff --git a/patches/server/0275-Add-log-suppression-for-sent-expired-chat.patch b/patches/server/0275-Add-log-suppression-for-sent-expired-chat.patch
index d558b5daf..e55677c7d 100644
--- a/patches/server/0275-Add-log-suppression-for-sent-expired-chat.patch
+++ b/patches/server/0275-Add-log-suppression-for-sent-expired-chat.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Add log suppression for sent expired chat
diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
-index 1eafc5667fd6a9746df7f4233cb021c2c435347e..25c9f742ad12a3ccab9860b4fc1de3d77ea9de82 100644
+index d842f7c95c1105ca5e6a5bd4bdc0347cfa1feee9..6bb6e70ede5c5fb5f505020e70a240b51010cb66 100644
--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
-@@ -2692,7 +2692,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
+@@ -2686,7 +2686,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
}
}
diff --git a/patches/server/0279-Option-to-disable-kick-for-out-of-order-chat.patch b/patches/server/0279-Option-to-disable-kick-for-out-of-order-chat.patch
index aa853a1c8..0c54cac24 100644
--- a/patches/server/0279-Option-to-disable-kick-for-out-of-order-chat.patch
+++ b/patches/server/0279-Option-to-disable-kick-for-out-of-order-chat.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Option to disable kick for out of order chat
diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
-index 25c9f742ad12a3ccab9860b4fc1de3d77ea9de82..cf24035eb1d145c2118d3ee57527f7cf9d2246fc 100644
+index 6bb6e70ede5c5fb5f505020e70a240b51010cb66..0bc14bd2252705bd08ced10db3ed8dfbdc59893d 100644
--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
-@@ -2457,7 +2457,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
+@@ -2451,7 +2451,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
do {
instant1 = (Instant) this.lastChatTimeStamp.get();
if (timestamp.isBefore(instant1)) {
diff --git a/patches/server/0288-Remove-Timings.patch b/patches/server/0288-Remove-Timings.patch
index 0a4116614..d5a1d87a6 100644
--- a/patches/server/0288-Remove-Timings.patch
+++ b/patches/server/0288-Remove-Timings.patch
@@ -264,10 +264,10 @@ index 00a50196f6a4768d84acfbbeec79a0753308f091..30093cd8bd35f0bbc8f26eca370622ee
i = this.context.runTopCommand(function, source);
} finally {
diff --git a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java
-index 7875606264dc7bc2c4a0e8dfacecf07427c1d5a1..5a5c5a366e1156e1233efc04d0c0a6051170a4f5 100644
+index 5de95ba778e4a0cd1467e7392aa80eda1bd21a03..0bfdc4247a651f6c1caf7a95114be68bc7d77d7b 100644
--- a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java
+++ b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java
-@@ -497,7 +497,7 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface
+@@ -496,7 +496,7 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface
}
public void handleConsoleInputs() {
@@ -276,7 +276,7 @@ index 7875606264dc7bc2c4a0e8dfacecf07427c1d5a1..5a5c5a366e1156e1233efc04d0c0a605
// Paper start - use proper queue
ConsoleInput servercommand;
while ((servercommand = this.serverCommandQueue.poll()) != null) {
-@@ -514,7 +514,7 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface
+@@ -513,7 +513,7 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface
// CraftBukkit end
}
@@ -769,10 +769,10 @@ index fdc9de253ae6d20b4df71fd6e6c1bb98ec753abf..5a800731927ca20e95fbcd0e8b94999e
this.entityManager.saveAll();
} else {
diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
-index cf24035eb1d145c2118d3ee57527f7cf9d2246fc..9dbd5c2e7d0c9bb26556ce32ced4c43ad9f3df0c 100644
+index 0bc14bd2252705bd08ced10db3ed8dfbdc59893d..166fd17d03d84cd3ea5917c17e6b9549a46295e0 100644
--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
-@@ -2607,7 +2607,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
+@@ -2601,7 +2601,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
}
}
// Paper End
@@ -781,7 +781,7 @@ index cf24035eb1d145c2118d3ee57527f7cf9d2246fc..9dbd5c2e7d0c9bb26556ce32ced4c43a
if ( org.spigotmc.SpigotConfig.logCommands ) // Spigot
this.LOGGER.info(this.player.getScoreboardName() + " issued server command: " + s);
-@@ -2617,7 +2617,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
+@@ -2611,7 +2611,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
this.cserver.getPluginManager().callEvent(event);
if (event.isCancelled()) {
@@ -790,7 +790,7 @@ index cf24035eb1d145c2118d3ee57527f7cf9d2246fc..9dbd5c2e7d0c9bb26556ce32ced4c43a
return;
}
-@@ -2630,7 +2630,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
+@@ -2624,7 +2624,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
java.util.logging.Logger.getLogger(ServerGamePacketListenerImpl.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
return;
} finally {
@@ -800,10 +800,10 @@ index cf24035eb1d145c2118d3ee57527f7cf9d2246fc..9dbd5c2e7d0c9bb26556ce32ced4c43a
}
// CraftBukkit end
diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java
-index a6fe2e75b3c21a420432f33c9f5666fc558a06d1..cc09274fb3c3068ecd56e4c3c280b4fc876e628f 100644
+index d9153b04b242e22d6e8894bfd45c92ea6466df00..1da509127582618d6ced45e6e8a310304e9ecc16 100644
--- a/src/main/java/net/minecraft/server/players/PlayerList.java
+++ b/src/main/java/net/minecraft/server/players/PlayerList.java
-@@ -1283,7 +1283,7 @@ public abstract class PlayerList {
+@@ -1290,7 +1290,7 @@ public abstract class PlayerList {
public void saveAll(int interval) {
net.minecraft.server.MCUtil.ensureMain("Save Players" , () -> { // Paper - Ensure main
@@ -812,7 +812,7 @@ index a6fe2e75b3c21a420432f33c9f5666fc558a06d1..cc09274fb3c3068ecd56e4c3c280b4fc
int numSaved = 0;
long now = MinecraftServer.currentTick;
for (int i = 0; i < this.players.size(); ++i) {
-@@ -1294,7 +1294,7 @@ public abstract class PlayerList {
+@@ -1301,7 +1301,7 @@ public abstract class PlayerList {
}
// Paper end
}
diff --git a/patches/server/0289-Remove-Mojang-Profiler.patch b/patches/server/0289-Remove-Mojang-Profiler.patch
index 8bc835ee3..8ee4c5f89 100644
--- a/patches/server/0289-Remove-Mojang-Profiler.patch
+++ b/patches/server/0289-Remove-Mojang-Profiler.patch
@@ -835,10 +835,10 @@ index 4d28a1f9fe43bb8e9f5ffaf06895c94fa0749d5d..08c46cdc626e89fed0d769d50735e983
this.connection.send(new ClientboundPlayerAbilitiesPacket(this.getAbilities()));
playerlist.sendLevelInfo(this, worldserver);
diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
-index 9dbd5c2e7d0c9bb26556ce32ced4c43ad9f3df0c..93c0560df791e768277e33999379738ec597a6dd 100644
+index 166fd17d03d84cd3ea5917c17e6b9549a46295e0..48224c850e5be223971b76a4e580b95585208ea6 100644
--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
-@@ -422,7 +422,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
+@@ -416,7 +416,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
this.aboveGroundVehicleTickCount = 0;
}} // Paper - end if (valid)
@@ -847,7 +847,7 @@ index 9dbd5c2e7d0c9bb26556ce32ced4c43ad9f3df0c..93c0560df791e768277e33999379738e
// Paper Start - give clients a longer time to respond to pings as per pre 1.12.2 timings
// This should effectively place the keepalive handling back to "as it was" before 1.12.2
long currentTime = Util.getMillis();
-@@ -458,7 +458,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
+@@ -452,7 +452,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
}
// Paper end
@@ -1491,15 +1491,16 @@ index 288c6627906d07c0d223eacd84ae4eb31a349998..9babe636176da3c40598eb5bdac0919a
this.seen.add(i);
} else {
diff --git a/src/main/java/net/minecraft/world/entity/animal/allay/Allay.java b/src/main/java/net/minecraft/world/entity/animal/allay/Allay.java
-index d9cd71c57cde4cbd7131344ba7760fb6c224c7b6..0f69e1c4e4b14186e7cb99f170ac4d164d2e252c 100644
+index c960aac9e1dbffe5e765f9adcfacc1966dc29148..c233533fdacb4f5e635267b5fc9fe21bc8b3c51a 100644
--- a/src/main/java/net/minecraft/world/entity/animal/allay/Allay.java
+++ b/src/main/java/net/minecraft/world/entity/animal/allay/Allay.java
-@@ -265,12 +265,12 @@ public class Allay extends PathfinderMob implements InventoryCarrier {
-
+@@ -266,13 +266,13 @@ public class Allay extends PathfinderMob implements InventoryCarrier {
+ private int behaviorTick = 0; // Pufferfish
@Override
protected void customServerAiStep() {
- this.level.getProfiler().push("allayBrain");
+ //this.level.getProfiler().push("allayBrain"); // Purpur
+ if (this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish
this.getBrain().tick((ServerLevel) this.level, this);
- this.level.getProfiler().pop();
- this.level.getProfiler().push("allayActivityUpdate");
@@ -1534,15 +1535,16 @@ index 32870e6727d09fbf1c4913ffdf321a278b5b6f64..50f19125fa3dda79a850cfce0ab7c720
Optional optional = this.getBrain().getMemory(MemoryModuleType.PLAY_DEAD_TICKS);
diff --git a/src/main/java/net/minecraft/world/entity/animal/frog/Frog.java b/src/main/java/net/minecraft/world/entity/animal/frog/Frog.java
-index 04262d31dc0767500f2b22cfe5768a8e24de7af9..82d98615fea97ebc0a333748d47b83beeff923d6 100644
+index b84effd5e18fee155e731d1a80ba516b86431d3b..989af6f3e0604a342032b308f97c7b863b3b1e40 100644
--- a/src/main/java/net/minecraft/world/entity/animal/frog/Frog.java
+++ b/src/main/java/net/minecraft/world/entity/animal/frog/Frog.java
-@@ -229,12 +229,12 @@ public class Frog extends Animal {
-
+@@ -230,13 +230,13 @@ public class Frog extends Animal {
+ private int behaviorTick = 0; // Pufferfish
@Override
protected void customServerAiStep() {
- this.level.getProfiler().push("frogBrain");
+ //this.level.getProfiler().push("frogBrain"); // Purpur
+ if (this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish
this.getBrain().tick((ServerLevel)this.level, this);
- this.level.getProfiler().pop();
- this.level.getProfiler().push("frogActivityUpdate");
@@ -1555,15 +1557,16 @@ index 04262d31dc0767500f2b22cfe5768a8e24de7af9..82d98615fea97ebc0a333748d47b83be
}
diff --git a/src/main/java/net/minecraft/world/entity/animal/frog/Tadpole.java b/src/main/java/net/minecraft/world/entity/animal/frog/Tadpole.java
-index 4dca3788a8fa335dc5969bd61cd0658f21e3bff3..88025a051a9e8c21aaf171431a0850c267ca4ca4 100644
+index 8561d1994cb8c42e69ef77fad16d037c205dad33..5268a56a7967275df63f5a5ddb59219904f9a3c4 100644
--- a/src/main/java/net/minecraft/world/entity/animal/frog/Tadpole.java
+++ b/src/main/java/net/minecraft/world/entity/animal/frog/Tadpole.java
-@@ -115,12 +115,12 @@ public class Tadpole extends AbstractFish {
-
+@@ -116,13 +116,13 @@ public class Tadpole extends AbstractFish {
+ private int behaviorTick = 0; // Pufferfish
@Override
protected void customServerAiStep() {
- this.level.getProfiler().push("tadpoleBrain");
+ //this.level.getProfiler().push("tadpoleBrain"); // Purpur
+ if (this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish
this.getBrain().tick((ServerLevel) this.level, this);
- this.level.getProfiler().pop();
- this.level.getProfiler().push("tadpoleActivityUpdate");
@@ -1666,15 +1669,16 @@ index 760015f7a98e70b735707c77472c084d8bd052bb..bc6572b1025d74a7590d7e1cc49132f9
PiglinBruteAi.maybePlayActivitySound(this);
super.customServerAiStep();
diff --git a/src/main/java/net/minecraft/world/entity/monster/warden/Warden.java b/src/main/java/net/minecraft/world/entity/monster/warden/Warden.java
-index 54959365ffc81d305d07562fc5677cbb9fb97d2b..f8d773d3a2c20ab27c0a250b2f5fc7be05ca9b1b 100644
+index df55f9a9f684b474a3bff0977069471727b242f4..5dab2eea9e9c50e41c7971daefc3bbe819583207 100644
--- a/src/main/java/net/minecraft/world/entity/monster/warden/Warden.java
+++ b/src/main/java/net/minecraft/world/entity/monster/warden/Warden.java
-@@ -298,9 +298,9 @@ public class Warden extends Monster implements VibrationListener.VibrationListen
+@@ -299,10 +299,10 @@ public class Warden extends Monster implements VibrationListener.VibrationListen
protected void customServerAiStep() {
ServerLevel worldserver = (ServerLevel) this.level;
- worldserver.getProfiler().push("wardenBrain");
+ //worldserver.getProfiler().push("wardenBrain"); // Purpur
+ if (this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish
this.getBrain().tick(worldserver, this);
- this.level.getProfiler().pop();
+ //this.level.getProfiler().pop(); // Purpur
diff --git a/patches/server/0290-Add-more-logger-output-for-invalid-movement-kicks.patch b/patches/server/0290-Add-more-logger-output-for-invalid-movement-kicks.patch
index 8f55d8f98..56c30cc52 100644
--- a/patches/server/0290-Add-more-logger-output-for-invalid-movement-kicks.patch
+++ b/patches/server/0290-Add-more-logger-output-for-invalid-movement-kicks.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Add more logger output for invalid movement kicks
diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
-index 93c0560df791e768277e33999379738ec597a6dd..9adc717cffee5065863e2972ad749517e5a4a2a3 100644
+index 48224c850e5be223971b76a4e580b95585208ea6..d70c9d4a77edce10f783ab6c53b1e2d66b44c5fe 100644
--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
-@@ -864,6 +864,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
+@@ -858,6 +858,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
if (packet.getId() == this.awaitingTeleport) {
if (this.awaitingPositionFromClient == null) {
this.disconnect(Component.translatable("multiplayer.disconnect.invalid_player_movement"), org.bukkit.event.player.PlayerKickEvent.Cause.INVALID_PLAYER_MOVEMENT); // Paper - kick event cause
@@ -16,7 +16,7 @@ index 93c0560df791e768277e33999379738ec597a6dd..9adc717cffee5065863e2972ad749517
return;
}
-@@ -1444,8 +1445,16 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
+@@ -1438,8 +1439,16 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
@Override
public void handleMovePlayer(ServerboundMovePlayerPacket packet) {
PacketUtils.ensureRunningOnSameThread(packet, this, this.player.getLevel());
diff --git a/patches/server/0295-Make-pufferfish-config-relocatable.patch b/patches/server/0295-Make-pufferfish-config-relocatable.patch
new file mode 100644
index 000000000..005bfe8f8
--- /dev/null
+++ b/patches/server/0295-Make-pufferfish-config-relocatable.patch
@@ -0,0 +1,56 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: BillyGalbreath
+Date: Sun, 12 Jun 2022 09:18:57 -0500
+Subject: [PATCH] Make pufferfish config relocatable
+
+
+diff --git a/src/main/java/gg/pufferfish/pufferfish/PufferfishConfig.java b/src/main/java/gg/pufferfish/pufferfish/PufferfishConfig.java
+index e077a43cf3f06207234cb445b58dff79eabcb9c6..852ed093488ae624960a7dd35f68d8cee39067e7 100644
+--- a/src/main/java/gg/pufferfish/pufferfish/PufferfishConfig.java
++++ b/src/main/java/gg/pufferfish/pufferfish/PufferfishConfig.java
+@@ -36,6 +36,7 @@ public class PufferfishConfig {
+
+ private static final YamlFile config = new YamlFile();
+ private static int updates = 0;
++ public static File pufferfishFile; // Purpur
+
+ private static ConfigurationSection convertToBukkit(org.simpleyaml.configuration.ConfigurationSection section) {
+ ConfigurationSection newSection = new MemoryConfiguration();
+@@ -58,7 +59,7 @@ public class PufferfishConfig {
+ }
+
+ public static void load() throws IOException {
+- File configFile = new File("pufferfish.yml");
++ File configFile = pufferfishFile; // Purpur
+
+ if (configFile.exists()) {
+ try {
+diff --git a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java
+index 0bfdc4247a651f6c1caf7a95114be68bc7d77d7b..33ec9cb7efd5623866c03506b8dcb28831b54b21 100644
+--- a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java
++++ b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java
+@@ -235,6 +235,7 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface
+ com.destroystokyo.paper.VersionHistoryManager.INSTANCE.getClass(); // load version history now
+ io.papermc.paper.brigadier.PaperBrigadierProviderImpl.INSTANCE.getClass(); // init PaperBrigadierProvider
+ // Paper end
++ gg.pufferfish.pufferfish.PufferfishConfig.pufferfishFile = (java.io.File) options.valueOf("pufferfish-settings"); // Purpur
+ gg.pufferfish.pufferfish.PufferfishConfig.load(); // Pufferfish
+ gg.pufferfish.pufferfish.PufferfishCommand.init(); // Pufferfish
+
+diff --git a/src/main/java/org/bukkit/craftbukkit/Main.java b/src/main/java/org/bukkit/craftbukkit/Main.java
+index 420300ce19d01f36f071eae44efd4cb32beb0ed6..3080b2a7920a736880c48b66164ed45686ab1d44 100644
+--- a/src/main/java/org/bukkit/craftbukkit/Main.java
++++ b/src/main/java/org/bukkit/craftbukkit/Main.java
+@@ -170,6 +170,12 @@ public class Main {
+ .ofType(File.class)
+ .defaultsTo(new File("purpur.yml"))
+ .describedAs("Yml file");
++
++ acceptsAll(asList("pufferfish", "pufferfish-settings"), "File for pufferfish settings")
++ .withRequiredArg()
++ .ofType(File.class)
++ .defaultsTo(new File("pufferfish.yml"))
++ .describedAs("Yml file");
+ // Purpur end
+
+ // Paper start