diff --git a/build.gradle.kts b/build.gradle.kts
index 67e3a89b8..e440fc550 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -5,7 +5,7 @@ plugins {
java
`maven-publish`
id("com.github.johnrengelman.shadow") version "8.1.1" apply false
- id("io.papermc.paperweight.patcher") version "1.5.8"
+ id("io.papermc.paperweight.patcher") version "1.5.9"
}
allprojects {
diff --git a/gradle.properties b/gradle.properties
index aad58a3fa..b7102beb8 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -2,7 +2,7 @@ group = org.purpurmc.purpur
version = 1.20.2-R0.1-SNAPSHOT
mcVersion = 1.20.2
-paperCommit = c1ac98328c3b4dc2834497aae70020af7b3c7d04
+paperCommit = b974a6b6f3a989050bf4af344be27da46de9041e
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 7b92d9cbd..775a27097 100644
--- a/patches/api/0001-Pufferfish-API-Changes.patch
+++ b/patches/api/0001-Pufferfish-API-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 fb47a794893d5fef026a35a7c573becf74420aa0..0330a20576c372c29ca4d98a2bc5b01e28303ac3 100644
+index 639651972fddce4dff63a0f0a7e566a15b9e2dd6..0b87f34c2bb5a2f72124912a62ea393b19b1f3a3 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -46,6 +46,7 @@ dependencies {
@@ -480,10 +480,10 @@ index eaefbb00e9993d54906cc8cf35cf753c0d6c7707..301e82369603f3dd6e6c1bd380da4bac
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 13da387d3b59bc67c0d73e3fbd3a4034b1281527..7572a0bf6614b02be3cbccc7b86e52ee1b8df621 100644
+index f9b57b872780aa6b9b959494874b57c7a8ff0c53..90953bfc81168068a281be4d2d3942d5e7dd69ff 100644
--- a/src/main/java/org/bukkit/plugin/java/PluginClassLoader.java
+++ b/src/main/java/org/bukkit/plugin/java/PluginClassLoader.java
-@@ -48,6 +48,8 @@ public final class PluginClassLoader extends URLClassLoader implements io.paperm
+@@ -50,6 +50,8 @@ public final class PluginClassLoader extends URLClassLoader implements io.paperm
private io.papermc.paper.plugin.provider.classloader.PluginClassLoaderGroup classLoaderGroup; // Paper
public io.papermc.paper.plugin.provider.entrypoint.DependencyContext dependencyContext; // Paper
@@ -492,7 +492,7 @@ index 13da387d3b59bc67c0d73e3fbd3a4034b1281527..7572a0bf6614b02be3cbccc7b86e52ee
static {
ClassLoader.registerAsParallelCapable();
}
-@@ -183,6 +185,7 @@ public final class PluginClassLoader extends URLClassLoader implements io.paperm
+@@ -197,6 +199,7 @@ public final class PluginClassLoader extends URLClassLoader implements io.paperm
throw new ClassNotFoundException(name);
}
@@ -500,7 +500,7 @@ index 13da387d3b59bc67c0d73e3fbd3a4034b1281527..7572a0bf6614b02be3cbccc7b86e52ee
@Override
protected Class> findClass(String name) throws ClassNotFoundException {
if (name.startsWith("org.bukkit.") || name.startsWith("net.minecraft.")) {
-@@ -190,7 +193,7 @@ public final class PluginClassLoader extends URLClassLoader implements io.paperm
+@@ -204,7 +207,7 @@ public final class PluginClassLoader extends URLClassLoader implements io.paperm
}
Class> result = classes.get(name);
@@ -509,7 +509,7 @@ index 13da387d3b59bc67c0d73e3fbd3a4034b1281527..7572a0bf6614b02be3cbccc7b86e52ee
String path = name.replace('.', '/').concat(".class");
JarEntry entry = jar.getJarEntry(path);
-@@ -237,6 +240,7 @@ public final class PluginClassLoader extends URLClassLoader implements io.paperm
+@@ -251,6 +254,7 @@ public final class PluginClassLoader extends URLClassLoader implements io.paperm
this.setClass(name, result); // Paper
}
@@ -517,7 +517,7 @@ index 13da387d3b59bc67c0d73e3fbd3a4034b1281527..7572a0bf6614b02be3cbccc7b86e52ee
return result;
}
-@@ -251,6 +255,7 @@ public final class PluginClassLoader extends URLClassLoader implements io.paperm
+@@ -265,6 +269,7 @@ public final class PluginClassLoader extends URLClassLoader implements io.paperm
// Paper end
super.close();
} finally {
diff --git a/patches/api/0054-Add-hover-lines-API.patch b/patches/api/0054-Add-hover-lines-API.patch
index 4cb7789bf..a2f0f0a92 100644
--- a/patches/api/0054-Add-hover-lines-API.patch
+++ b/patches/api/0054-Add-hover-lines-API.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Add hover lines API
diff --git a/src/main/java/org/bukkit/inventory/ItemFactory.java b/src/main/java/org/bukkit/inventory/ItemFactory.java
-index ab73893656932f54009340df59293df2a732be51..9448709716e0b91dd9e2c7ff4060ec0d33d77d24 100644
+index 1c4e0c7356047163a38f5ac4dd544129d0b36271..5e64f172508d928b6d74796a942ecc1077665b7b 100644
--- a/src/main/java/org/bukkit/inventory/ItemFactory.java
+++ b/src/main/java/org/bukkit/inventory/ItemFactory.java
-@@ -298,4 +298,14 @@ public interface ItemFactory {
+@@ -299,4 +299,14 @@ public interface ItemFactory {
@Deprecated
net.md_5.bungee.api.chat.hover.content.Content hoverContentOf(@NotNull org.bukkit.entity.Entity entity, @NotNull net.md_5.bungee.api.chat.BaseComponent[] customName);
// Paper end - bungee hover events
diff --git a/patches/server/0001-Pufferfish-Server-Changes.patch b/patches/server/0001-Pufferfish-Server-Changes.patch
index a14c73408..4126e6457 100644
--- a/patches/server/0001-Pufferfish-Server-Changes.patch
+++ b/patches/server/0001-Pufferfish-Server-Changes.patch
@@ -1477,7 +1477,7 @@ index d02546b18cb689724887b4e85e8d32a18828a4ad..91eaff58bb422ba188e6cfaa9c20b45b
public static long getCoordinateKey(final ChunkPos pair) {
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
-index 97745f0bab8d82d397c6c2a5775aed92bca0a034..371049c1236c6443384c0ce184e99d5b9f8e57c2 100644
+index 8f31413c939cc2b0454ad3d9a1b618dbae449d00..58d076e2a8fa1cf56c4c8d15a502e85fcf48aa90 100644
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
@@ -308,6 +308,8 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop {
+ entity.activatedPriorityReset = false; // Pufferfish - DAB
if (!entity.isRemoved()) {
@@ -1782,7 +1782,7 @@ index 17610196db7a1c6feb2cf74a02479a8691aa323f..c1b03e4c37ea85ddf283479682d0eb2e
if (this.isRainingAt(blockposition)) {
diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
-index 34fcdeb0f4039f1fc6c4c8c593cc615560af1ba2..ef6d8f787cba0db53270adedd923f9a47d435852 100644
+index 8bca5ba75977c0a61197eb47c94f0456d66b29a4..dcc26435a7d3eb83f92ec165cf16486a06397576 100644
--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
@@ -1118,6 +1118,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
@@ -1914,7 +1914,7 @@ index d6cbe98e67fdbf8db46338a88ab1356dd63b50a3..20dd3a63b2f955b05a75eb240e33ae4c
int LARGE_MAX_STACK_SIZE = 64;
int DEFAULT_DISTANCE_LIMIT = 8;
diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java
-index f20ae9153b7098980ce6c0e75fcbbb4da652661b..505ed0f8f933428192f5fc806ff52d84acea7f99 100644
+index 2eaa35f5679053b6864fcc4eeb49f360a828bb34..d8c51744f494c81b27783d34de9378884df2fb20 100644
--- a/src/main/java/net/minecraft/world/entity/Entity.java
+++ b/src/main/java/net/minecraft/world/entity/Entity.java
@@ -305,7 +305,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource {
@@ -2073,7 +2073,7 @@ index 73871f456a85bda1e51f54986d0e61fb629822e8..2561e74ffdf595a9b6ae13dcd738662c
private String descriptionId;
@Nullable
diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java
-index b95f88d5e5b4785ee063695fd81935636a0588d1..2cdc2bd62f0cb62f75365b6b3e6d80d9a2132451 100644
+index 776e9adc07e9ddd142c9fc7df56b5795ff8b2249..02d53d7c4e308b2fd70b1f7c1367484bbb3dcec7 100644
--- a/src/main/java/net/minecraft/world/entity/LivingEntity.java
+++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java
@@ -142,7 +142,6 @@ import org.bukkit.event.entity.EntityTeleportEvent;
@@ -2326,7 +2326,7 @@ index 5ad5f22e5aa26445e5eb229958e7bf356bdd460e..d241ca4d0295f9fce39c11197bd435cf
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 aa850cfaa0534d57e83f37360724da2428a48a18..eb1e850f11ed1cd8d2f1f2eb1af55b7fe6352ed4 100644
+index d5b97d4316390028f54aa9bb9fa52b0b003e32a0..b4793b88688bd568a428aa520e880f0038de45a7 100644
--- a/src/main/java/net/minecraft/world/entity/animal/axolotl/Axolotl.java
+++ b/src/main/java/net/minecraft/world/entity/animal/axolotl/Axolotl.java
@@ -280,9 +280,11 @@ public class Axolotl extends Animal implements LerpingModel, VariantHolder(CraftNamespacedKey.toMinecraft(this.getKey()), new net.minecraft.world.item.crafting.ShapelessRecipe(this.getGroup(), CraftRecipe.getCategory(this.getCategory()), CraftItemStack.asNMSCopy(this.getResult()), data)));
@@ -3332,7 +3332,7 @@ index 774556a62eb240da42e84db4502e2ed43495be17..80553face9c70c2a3d897681e7761df8
if (stream != null) {
diff --git a/src/main/java/org/spigotmc/ActivationRange.java b/src/main/java/org/spigotmc/ActivationRange.java
-index 2f9e5a1adf9d67ffe18d95f2822ca3d2288fb27a..14e8e7ad8d742cdc0c50d29d6dade3e338c0463e 100644
+index 59103744ac6beeb12719fdefcda54eeff498229e..c0333ba8e57cd284bb8ab15181da6b39d55872f9 100644
--- a/src/main/java/org/spigotmc/ActivationRange.java
+++ b/src/main/java/org/spigotmc/ActivationRange.java
@@ -38,6 +38,10 @@ import co.aikar.timings.MinecraftTimings;
diff --git a/patches/server/0004-Purpur-config-files.patch b/patches/server/0004-Purpur-config-files.patch
index 47fa0eb0e..d82853081 100644
--- a/patches/server/0004-Purpur-config-files.patch
+++ b/patches/server/0004-Purpur-config-files.patch
@@ -72,7 +72,7 @@ index 56ae02aab93b9a698e9d2f07a0448aa4767169d9..756651db912068c837197a972e95bc66
boolean flag1 = this.source.acceptsSuccess() && !this.silent;
boolean flag2 = broadcastToOps && this.source.shouldInformAdmins() && !this.silent;
diff --git a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java
-index 66aeb0ea388a8c8a08cf33728921061a0c74552f..6908e2165c4e4b43408a93963b4585d7cabf41dd 100644
+index 462c4eb3c06779f86f66778e9578d3d8f06c3294..a87d025a7ad0b7df16bea6fa4aeecae416551dde 100644
--- a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java
+++ b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java
@@ -218,6 +218,15 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface
@@ -92,7 +92,7 @@ index 66aeb0ea388a8c8a08cf33728921061a0c74552f..6908e2165c4e4b43408a93963b4585d7
io.papermc.paper.brigadier.PaperBrigadierProviderImpl.INSTANCE.getClass(); // init PaperBrigadierProvider
// Paper end
diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java
-index 6c0e33323922de72dcb941a10883a07c72808b5f..eccc55372a7a52a92dd9418a47ece0fd2adcd6ed 100644
+index 28fd04794e2a624c5d0a1322b1d6d851f443e3b1..b60ab6c545296c67304019759ab04aa659fb5700 100644
--- a/src/main/java/net/minecraft/world/level/Level.java
+++ b/src/main/java/net/minecraft/world/level/Level.java
@@ -176,6 +176,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable {
@@ -112,12 +112,12 @@ index 6c0e33323922de72dcb941a10883a07c72808b5f..eccc55372a7a52a92dd9418a47ece0fd
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 ff9a2122fa26a1238660dcb1bc64e3fc778ddd8d..2674aede815f8c6d0fbaf22895ccb7ed05f9a714 100644
+index bd53d6406d616021ec384c177797f78b6911c3a7..b84fdc990cca9cb7c0d570123a8c7e6bb54ab0b5 100644
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
@@ -1039,6 +1039,7 @@ public final class CraftServer implements Server {
- org.spigotmc.SpigotConfig.init((File) console.options.valueOf("spigot-settings")); // Spigot
+ org.spigotmc.SpigotConfig.init((File) this.console.options.valueOf("spigot-settings")); // Spigot
this.console.paperConfigurations.reloadConfigs(this.console);
+ org.purpurmc.purpur.PurpurConfig.init((File) console.options.valueOf("purpur-settings")); // Purpur
for (ServerLevel world : this.console.getAllLevels()) {
@@ -139,7 +139,7 @@ index ff9a2122fa26a1238660dcb1bc64e3fc778ddd8d..2674aede815f8c6d0fbaf22895ccb7ed
this.overrideAllCommandBlockCommands = this.commandsConfiguration.getStringList("command-block-overrides").contains("*");
this.ignoreVanillaPermissions = this.commandsConfiguration.getBoolean("ignore-vanilla-permissions");
-@@ -2919,6 +2922,18 @@ public final class CraftServer implements Server {
+@@ -2920,6 +2923,18 @@ public final class CraftServer implements Server {
return CraftServer.this.console.paperConfigurations.createLegacyObject(CraftServer.this.console);
}
@@ -159,7 +159,7 @@ index ff9a2122fa26a1238660dcb1bc64e3fc778ddd8d..2674aede815f8c6d0fbaf22895ccb7ed
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 e4cacb17f56c618bef19e1165c07aac86af61150..a6b1c83e289bd0a9ad59288ed2da88ac3e607c0f 100644
+index 2af0068ef338634d1f44532af5db66c2d0b3dd10..8e844e3c88a1100d407fac1edf0379072370a6e8 100644
--- a/src/main/java/org/bukkit/craftbukkit/Main.java
+++ b/src/main/java/org/bukkit/craftbukkit/Main.java
@@ -173,6 +173,14 @@ public class Main {
diff --git a/patches/server/0005-Purpur-client-support.patch b/patches/server/0005-Purpur-client-support.patch
index d2813bee5..e0832a8f0 100644
--- a/patches/server/0005-Purpur-client-support.patch
+++ b/patches/server/0005-Purpur-client-support.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] Purpur client support
diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java
-index ba972d1661426d7e30f6f61bad3b9608e66ea721..5fe10d6d8590ef5997a4f8f6af01ec16bf20e00a 100644
+index c7d26a119415ced56ccad04f8a1b180d9f714586..431353d891f94bbe9fa3d18fd16e434a81b293d5 100644
--- a/src/main/java/net/minecraft/server/level/ServerPlayer.java
+++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java
@@ -274,6 +274,7 @@ public class ServerPlayer extends Player {
@@ -17,7 +17,7 @@ index ba972d1661426d7e30f6f61bad3b9608e66ea721..5fe10d6d8590ef5997a4f8f6af01ec16
// Paper start - replace player chunk loader
private final java.util.concurrent.atomic.AtomicReference viewDistances = new java.util.concurrent.atomic.AtomicReference<>(new io.papermc.paper.chunk.system.RegionizedPlayerChunkLoader.ViewDistances(-1, -1, -1));
diff --git a/src/main/java/net/minecraft/server/network/ServerCommonPacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerCommonPacketListenerImpl.java
-index 20122bf191ebc74c223310aea1f004fdbb163e57..9226fadcf53da5f7d55f4434a660d3e091c0775f 100644
+index 598f807f0d0caac98b81e0e2991f1bd497c4534e..e9824deab810738e0df8b8e6932048b601ba6662 100644
--- a/src/main/java/net/minecraft/server/network/ServerCommonPacketListenerImpl.java
+++ b/src/main/java/net/minecraft/server/network/ServerCommonPacketListenerImpl.java
@@ -55,6 +55,7 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack
@@ -39,14 +39,14 @@ index 20122bf191ebc74c223310aea1f004fdbb163e57..9226fadcf53da5f7d55f4434a660d3e0
+ } catch (Exception ignore) {
+ }
+ // Purpur end
- } else if (identifier.equals(CUSTOM_UNREGISTER)) {
+ } else if (identifier.equals(ServerCommonPacketListenerImpl.CUSTOM_UNREGISTER)) {
try {
String channels = payload.toString(com.google.common.base.Charsets.UTF_8);
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
-index 604ed1f6742a6b028b9db2809f7bd4b9a3b38f4d..16c05edcd94d8a7ea166a4ab8c72cdeb09f26a73 100644
+index 57229748ae446d70dbc3d71219d9f81f5c8f72b1..0d63baac39f0a6c01dc9e4ff7ba6194a9efdf4dd 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
-@@ -3283,4 +3283,11 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
+@@ -3285,4 +3285,11 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
return this.spigot;
}
// Spigot end
diff --git a/patches/server/0008-Ridables.patch b/patches/server/0008-Ridables.patch
index a6e75dc7f..b2e2eab83 100644
--- a/patches/server/0008-Ridables.patch
+++ b/patches/server/0008-Ridables.patch
@@ -22,7 +22,7 @@ index 83cab746d1d6fe25c043c8aee28c39412b90c127..ec6b58dae525c81bbb1c0e2d96fbded6
super(x, y, z);
}
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
-index ebcd6c821379f4feb3b2c094266645ae552972db..edd53077098cfaaa5987dc7df7163b83a5ed3b26 100644
+index ef14f47cec00ffaf1ac683964d3d1831dae9bcdb..be7508a527a55ada0f769588db024f999d0b95f5 100644
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
@@ -1531,6 +1531,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop {
return worldserver + " " + worldserver.dimension().location();
diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java
-index cf2fd8eba6aa4cf15cac924577507a700f7f72b5..19698f13530183b3580a7a6ad720d078b6c791ba 100644
+index ee0403e18b484b85c92aca76faf977c013bfdfe0..f7a19cdc38feb0dcee3e3cf42610a0604f9f4672 100644
--- a/src/main/java/net/minecraft/server/level/ServerLevel.java
+++ b/src/main/java/net/minecraft/server/level/ServerLevel.java
@@ -223,6 +223,7 @@ public class ServerLevel extends Level implements WorldGenLevel {
@@ -46,7 +46,7 @@ index cf2fd8eba6aa4cf15cac924577507a700f7f72b5..19698f13530183b3580a7a6ad720d078
final Throwable thr = new Throwable(entity + " Added to world at " + new java.util.Date());
io.papermc.paper.util.StacktraceDeobfuscator.INSTANCE.deobfuscateThrowable(thr);
diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java
-index 75faac7c8009672c733033c5aabb4e1974ce5790..3f5d87ccdee1309ae8240a3d181e268d8c022f56 100644
+index c1c596f60d4a29e70f149fd1fb67abadea62c9b3..9f644c24027dec3d89b81fbd86a183f4b773be0f 100644
--- a/src/main/java/net/minecraft/server/level/ServerPlayer.java
+++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java
@@ -756,6 +756,15 @@ public class ServerPlayer extends Player {
@@ -66,12 +66,12 @@ index 75faac7c8009672c733033c5aabb4e1974ce5790..3f5d87ccdee1309ae8240a3d181e268d
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 ef6d8f787cba0db53270adedd923f9a47d435852..675e6e7246d84195dc027c0209744896bd2b7224 100644
+index dcc26435a7d3eb83f92ec165cf16486a06397576..26b4307a6a693a1b99951d1270264baa86868630 100644
--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
@@ -2713,6 +2713,8 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
- cserver.getPluginManager().callEvent(event);
+ ServerGamePacketListenerImpl.this.cserver.getPluginManager().callEvent(event);
+ player.processClick(enumhand); // Purpur
+
@@ -79,7 +79,7 @@ index ef6d8f787cba0db53270adedd923f9a47d435852..675e6e7246d84195dc027c0209744896
if ((entity instanceof Bucketable && entity instanceof LivingEntity && origItem != null && origItem.asItem() == Items.WATER_BUCKET) && (event.isCancelled() || ServerGamePacketListenerImpl.this.player.getInventory().getSelected() == null || ServerGamePacketListenerImpl.this.player.getInventory().getSelected().getItem() != origItem)) {
entity.getEntityData().resendPossiblyDesyncedEntity(player); // Paper - The entire mob gets deleted, so resend it.
diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java
-index 8bc26cc6af27ba4c13940d61154786d47cb5aaf3..5eb10b5f75b55f66a002745d016b88e0366d1301 100644
+index ab01dba073e09ca33ef2ddb00293c2eaaffad1ea..5230f1471ea7aeb01179db32f0c0e4ed4f1dd056 100644
--- a/src/main/java/net/minecraft/world/entity/Entity.java
+++ b/src/main/java/net/minecraft/world/entity/Entity.java
@@ -375,7 +375,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource {
@@ -191,7 +191,7 @@ index 1bb8b6e91c44cd13411d96d749fa64835c75a267..75c278b67ad2b78766efd8f89c4c2ca7
protected ParticleOptions getInkParticle() {
return ParticleTypes.GLOW_SQUID_INK;
diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java
-index 2cdc2bd62f0cb62f75365b6b3e6d80d9a2132451..cc82a506e0da0bf4318a37326924d71ca3340d5e 100644
+index 02d53d7c4e308b2fd70b1f7c1367484bbb3dcec7..aa5a70c0b791c2e0bf9cb878e4f4ed7afe9807bf 100644
--- a/src/main/java/net/minecraft/world/entity/LivingEntity.java
+++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java
@@ -218,9 +218,9 @@ public abstract class LivingEntity extends Entity implements Attackable {
@@ -965,7 +965,7 @@ index 3cdd9f379c7e2d46ea47c9ef55b121c93ec0bb4a..b0cff23aa6f841ad291437964ea5bebb
// CraftBukkit end
diff --git a/src/main/java/net/minecraft/world/entity/animal/Dolphin.java b/src/main/java/net/minecraft/world/entity/animal/Dolphin.java
-index 8448c5d778998390cf2b683f36e4e18ca7ffdc34..3dab78e2f39855f71bb7294521be71b3faa59b81 100644
+index c528cb7c18650863eaf8e2c6c0d9276c02712cc9..3f81b9d3c0758d20b3f9421a6bf41599e107b5e1 100644
--- a/src/main/java/net/minecraft/world/entity/animal/Dolphin.java
+++ b/src/main/java/net/minecraft/world/entity/animal/Dolphin.java
@@ -82,14 +82,82 @@ public class Dolphin extends WaterAnimal {
@@ -1090,7 +1090,7 @@ index 8448c5d778998390cf2b683f36e4e18ca7ffdc34..3dab78e2f39855f71bb7294521be71b3
this.setAirSupply(this.getMaxAirSupply());
} else {
diff --git a/src/main/java/net/minecraft/world/entity/animal/Fox.java b/src/main/java/net/minecraft/world/entity/animal/Fox.java
-index 31d4683f5e158f076ce9a416b7003478af293688..7d692f61ed4c6cc8e6b94eda4f48e9cb6baa0ae2 100644
+index 9e2af80c6a87f5849710266149cbca8cabfad4f8..b5f1d79787a7dbc8fddaa47fdeec1b224b409d19 100644
--- a/src/main/java/net/minecraft/world/entity/animal/Fox.java
+++ b/src/main/java/net/minecraft/world/entity/animal/Fox.java
@@ -144,6 +144,44 @@ public class Fox extends Animal implements VariantHolder {
@@ -2204,7 +2204,7 @@ index d241ca4d0295f9fce39c11197bd435cfac7f6e54..09f796ec491f21520e1fcc454249e469
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 eb1e850f11ed1cd8d2f1f2eb1af55b7fe6352ed4..4dfe6a909ac3d553bd1cd4cfc131ac8bfb5a0b02 100644
+index b4793b88688bd568a428aa520e880f0038de45a7..d1dd2cda473bb2294dc10c66c13eac8591ea4d5b 100644
--- a/src/main/java/net/minecraft/world/entity/animal/axolotl/Axolotl.java
+++ b/src/main/java/net/minecraft/world/entity/animal/axolotl/Axolotl.java
@@ -98,6 +98,23 @@ public class Axolotl extends Animal implements LerpingModel, VariantHolder) server.getHandle().players) {
+- this.getHandle().listName = name.equals(this.getName()) ? null : CraftChatMessage.fromStringOrNull(name);
++ this.getHandle().listName = name.equals(this.getName()) ? null : useMM ? io.papermc.paper.adventure.PaperAdventure.asVanilla(net.kyori.adventure.text.minimessage.MiniMessage.miniMessage().deserialize(name)) : CraftChatMessage.fromStringOrNull(name); // Purpur
+ for (ServerPlayer player : (List) this.server.getHandle().players) {
if (player.getBukkitEntity().canSee(this)) {
player.connection.send(new ClientboundPlayerInfoUpdatePacket(ClientboundPlayerInfoUpdatePacket.Action.UPDATE_DISPLAY_NAME, this.getHandle()));
-@@ -3289,5 +3294,20 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
+@@ -3291,5 +3296,20 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
public boolean usesPurpurClient() {
return getHandle().purpurClient;
}
@@ -317,7 +317,7 @@ index 27ce55687c7c59fdfdcc4553240ea8b023919b77..3ed1a91c93f659306acaf8bad6820f49
public boolean untamedTamablesAreRidable = true;
public boolean useNightVisionWhenRiding = false;
diff --git a/src/main/java/org/spigotmc/ActivationRange.java b/src/main/java/org/spigotmc/ActivationRange.java
-index 14e8e7ad8d742cdc0c50d29d6dade3e338c0463e..d1448f50a9c03bd779f4bcd6b4fc896365316b78 100644
+index c0333ba8e57cd284bb8ab15181da6b39d55872f9..282a57df4e2e5708e9cfd9c76b1d7de2a8a23900 100644
--- a/src/main/java/org/spigotmc/ActivationRange.java
+++ b/src/main/java/org/spigotmc/ActivationRange.java
@@ -203,6 +203,7 @@ public class ActivationRange
diff --git a/patches/server/0013-Bring-back-server-name.patch b/patches/server/0013-Bring-back-server-name.patch
index 360d8d409..ba895ba3a 100644
--- a/patches/server/0013-Bring-back-server-name.patch
+++ b/patches/server/0013-Bring-back-server-name.patch
@@ -17,10 +17,10 @@ index c5598adb8cbcbcf7277c2fd4dd72c243d44d9700..cda4544ae96a4fcb5c6c4483df67a59f
public final boolean spawnNpcs = this.get("spawn-npcs", true);
public final boolean pvp = this.get("pvp", true);
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
-index 2674aede815f8c6d0fbaf22895ccb7ed05f9a714..76d448e18b81fbb4b87c9cc1425fb446d9d6419c 100644
+index b84fdc990cca9cb7c0d570123a8c7e6bb54ab0b5..87103371b53305bd7e55672f8aa8b86ff23f7ac7 100644
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
-@@ -3152,4 +3152,11 @@ public final class CraftServer implements Server {
+@@ -3153,4 +3153,11 @@ public final class CraftServer implements Server {
}
// Paper end
diff --git a/patches/server/0016-Lagging-threshold.patch b/patches/server/0016-Lagging-threshold.patch
index 0c9e4c45b..46b19866e 100644
--- a/patches/server/0016-Lagging-threshold.patch
+++ b/patches/server/0016-Lagging-threshold.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] Lagging threshold
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
-index a22dbc34cfd9de6e996eb925c47abfccef13b0e7..4eeb7a43c8cdcd81fd9f8da4792ab27f54595d14 100644
+index 393cf73f3897f32f4a17bdc36b0d8881605817ed..89adc016610c13fee02b7dba35fcc37679afcec9 100644
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
@@ -301,6 +301,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop= 0, "Maximum repair cost must be positive (or 0)");
- container.maximumRepairCost = levels;
+ this.container.maximumRepairCost = levels;
}
+
+ // Purpur start
diff --git a/patches/server/0059-Add-5-second-tps-average-in-tps.patch b/patches/server/0059-Add-5-second-tps-average-in-tps.patch
index cf86e81e2..54de2c81e 100644
--- a/patches/server/0059-Add-5-second-tps-average-in-tps.patch
+++ b/patches/server/0059-Add-5-second-tps-average-in-tps.patch
@@ -27,7 +27,7 @@ index fa56cd09102a89692b42f1d14257990508c5c720..f9251183df72ddc56662fd3f02acf216
setListData(vector);
}
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
-index 57f2b54ad36d33e76e538895df691987c869a043..c29f8291b43a2e92e3444ab72dd23065a006f11f 100644
+index f99658c42e69ded4c61ccaf4ac5e9e645ee5bc7c..c5a93bb3f0ae907d3abb63f97567ab0e54a25b42 100644
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
@@ -297,7 +297,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop 0) {
--this.nextStartTick;
diff --git a/src/main/java/net/minecraft/world/entity/animal/Fox.java b/src/main/java/net/minecraft/world/entity/animal/Fox.java
-index b13429e254bd056cf942f39d46976ff0ef2a97f3..948760c9ee6ba921a7f1b4200fc77aa13f198984 100644
+index fc4b66e0a0561fc6705a50dc65b1120301f02f77..cf58894de9804770ba1722e2c0b727d3a637bf9f 100644
--- a/src/main/java/net/minecraft/world/entity/animal/Fox.java
+++ b/src/main/java/net/minecraft/world/entity/animal/Fox.java
@@ -1385,7 +1385,7 @@ public class Fox extends Animal implements VariantHolder {
@@ -131,7 +131,7 @@ index d3da7487f911ff791dca5f7b546dccda751fe44c..84e0a41620fd52af0cd22dc92fd13ee4
}
diff --git a/src/main/java/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java b/src/main/java/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java
-index 4149a7aea12cac04a2dfe29e071047de461eb3f4..0d16d486c7efc9a8c4c0db648175cacee5aa3a04 100644
+index a5b2af9d56e4efece7161d25dbc88f343ef233cc..39d7fe20ef5b3ca34a72a50bb8d9c35aa3b2ed23 100644
--- a/src/main/java/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java
+++ b/src/main/java/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java
@@ -603,7 +603,7 @@ public class EnderDragon extends Mob implements Enemy {
@@ -157,7 +157,7 @@ index 8796b779ac0550e32c7313b1280278de48070baf..97be7061d3cccac7b64f4b1a234ccbd8
j = Mth.floor(this.getX());
int i1 = Mth.floor(this.getZ());
diff --git a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java
-index aecccc96a1ea7fbd774a4ccbd45c11be1da1b43b..580e7c149e24f0bcbb8c21284869f78e485d091d 100644
+index c8f1d2de8682761ef8d4d50302c211f32b086783..51524661a62cbfe5ff7a3b7d640260e911902b23 100644
--- a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java
+++ b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java
@@ -549,7 +549,15 @@ public class EnderMan extends Monster implements NeutralMob {
@@ -256,22 +256,22 @@ index d9b1bde3ce458b7e50f7645d07ee578d13006a0a..d133820c47ecda733aa8242acdb2cd3b
protected boolean canReplaceCurrentItem(ItemStack stack) {
diff --git a/src/main/java/net/minecraft/world/entity/projectile/LargeFireball.java b/src/main/java/net/minecraft/world/entity/projectile/LargeFireball.java
-index 251e6bc87eb02ec4372062ef22b21249ac5164ff..6b60597a0e837054b0d1891c1e6e5e7cd3af9539 100644
+index 6b67eec90cd0dc1b20762514eac97f75fdbdf182..2dec28091d1816e9d4c749a5155e83031751cf50 100644
--- a/src/main/java/net/minecraft/world/entity/projectile/LargeFireball.java
+++ b/src/main/java/net/minecraft/world/entity/projectile/LargeFireball.java
@@ -16,20 +16,20 @@ public class LargeFireball extends Fireball {
public LargeFireball(EntityType extends LargeFireball> type, Level world) {
super(type, world);
-- isIncendiary = this.level().getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING); // CraftBukkit
-+ isIncendiary = this.level().purpurConfig.fireballsBypassMobGriefing || this.level().getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING); // CraftBukkit // Purpur
+- this.isIncendiary = this.level().getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING); // CraftBukkit
++ this.isIncendiary = this.level().purpurConfig.fireballsBypassMobGriefing || this.level().getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING); // CraftBukkit // Purpur
}
public LargeFireball(Level world, LivingEntity owner, double velocityX, double velocityY, double velocityZ, int explosionPower) {
super(EntityType.FIREBALL, owner, velocityX, velocityY, velocityZ, world);
this.explosionPower = explosionPower;
-- isIncendiary = this.level().getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING); // CraftBukkit
-+ isIncendiary = this.level().purpurConfig.fireballsBypassMobGriefing || this.level().getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING); // CraftBukkit // Purpur
+- this.isIncendiary = this.level().getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING); // CraftBukkit
++ this.isIncendiary = this.level().purpurConfig.fireballsBypassMobGriefing || this.level().getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING); // CraftBukkit // Purpur
}
@Override
@@ -296,15 +296,15 @@ index cd0629581bae5f805842157af36c2d838e01bee3..b0a559dfefac693bda8692a30fbaa5ac
}
}
diff --git a/src/main/java/net/minecraft/world/entity/projectile/SmallFireball.java b/src/main/java/net/minecraft/world/entity/projectile/SmallFireball.java
-index 04c2ea1ff44af72ae48e2d6b7b912b1c14285038..7839d856b3f924f0c87b298d9a1e3b15ab0693d6 100644
+index 9d43c8520953d6fe0d0948f9dbe14e0650ee01c2..deee9fffe6981d7e728621cc799a812d78000592 100644
--- a/src/main/java/net/minecraft/world/entity/projectile/SmallFireball.java
+++ b/src/main/java/net/minecraft/world/entity/projectile/SmallFireball.java
@@ -24,7 +24,7 @@ public class SmallFireball extends Fireball {
super(EntityType.SMALL_FIREBALL, owner, velocityX, velocityY, velocityZ, world);
// CraftBukkit start
if (this.getOwner() != null && this.getOwner() instanceof Mob) {
-- isIncendiary = this.level().getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING);
-+ isIncendiary = this.level().purpurConfig.fireballsBypassMobGriefing || this.level().getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING); // Purpur
+- this.isIncendiary = this.level().getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING);
++ this.isIncendiary = this.level().purpurConfig.fireballsBypassMobGriefing || this.level().getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING); // Purpur
}
// CraftBukkit end
}
diff --git a/patches/server/0152-Config-to-allow-for-unsafe-enchants.patch b/patches/server/0152-Config-to-allow-for-unsafe-enchants.patch
index eccba460e..6658e842d 100644
--- a/patches/server/0152-Config-to-allow-for-unsafe-enchants.patch
+++ b/patches/server/0152-Config-to-allow-for-unsafe-enchants.patch
@@ -27,7 +27,7 @@ index 664cbce2e06fcb95d3d3d6c5302fc9119f938925..bc9778c705d23acd84fa1cdeff6b403b
++i;
} else if (targets.size() == 1) {
diff --git a/src/main/java/net/minecraft/world/inventory/AnvilMenu.java b/src/main/java/net/minecraft/world/inventory/AnvilMenu.java
-index 8a7c30e316db4960b0b62ca0e366c19febead214..fdf2bf10a533c3d4ee145880e6949dadf6ce5410 100644
+index cccd34370d76d96eddeba3de1cfc41d47f9d1f60..ceac7d74f6fbe6519535357a03a0e4d1214d6a1d 100644
--- a/src/main/java/net/minecraft/world/inventory/AnvilMenu.java
+++ b/src/main/java/net/minecraft/world/inventory/AnvilMenu.java
@@ -228,7 +228,8 @@ public class AnvilMenu extends ItemCombinerMenu {
@@ -65,7 +65,7 @@ index 8a7c30e316db4960b0b62ca0e366c19febead214..fdf2bf10a533c3d4ee145880e6949dad
}
@@ -389,7 +394,7 @@ public class AnvilMenu extends ItemCombinerMenu {
- sendAllDataToRemote(); // CraftBukkit - SPIGOT-6686: Always send completed inventory to stay in sync with client
+ this.sendAllDataToRemote(); // CraftBukkit - SPIGOT-6686: Always send completed inventory to stay in sync with client
this.broadcastChanges();
// Purpur start
- if (canDoUnsafeEnchants && itemstack1 != ItemStack.EMPTY) {
diff --git a/patches/server/0210-Added-the-ability-to-add-combustible-items.patch b/patches/server/0210-Added-the-ability-to-add-combustible-items.patch
index 8bb5df6d0..031768cc6 100644
--- a/patches/server/0210-Added-the-ability-to-add-combustible-items.patch
+++ b/patches/server/0210-Added-the-ability-to-add-combustible-items.patch
@@ -51,10 +51,10 @@ index b0afc384907bb75dfa26e432a2328fe080660019..92e58d9503daf4cc9bc1f4c7785e159e
private int maxStack = MAX_STACK;
public List transaction = new java.util.ArrayList();
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
-index da114737b3515b3f39aaa36c23a0d76699eb4239..6e8cd10ec919e9c42c214a9a9c78a51794731fb6 100644
+index 892acaa0c664020b75a800eaa4d6e495727a6430..8215160bdba34c5eea7aed54ecf71b76abb49a45 100644
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
-@@ -1537,6 +1537,19 @@ public final class CraftServer implements Server {
+@@ -1538,6 +1538,19 @@ public final class CraftServer implements Server {
return true;
}
diff --git a/patches/server/0227-Potion-NamespacedKey.patch b/patches/server/0227-Potion-NamespacedKey.patch
index 04f1c4001..c565ac2a7 100644
--- a/patches/server/0227-Potion-NamespacedKey.patch
+++ b/patches/server/0227-Potion-NamespacedKey.patch
@@ -160,7 +160,7 @@ index 68e1b8271475996020af50b3b2cf04cd25aa6c85..4f2fcbcf90d6f5ee89e35c993a65cae6
@Override
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java
-index 42b336a96e5c786b95356200da7d02bfd8b584dc..f79d79d7c9ca18ac711b81c8c3d94e2145aa5bf0 100644
+index a86ce1e672df969b28293e7da4c6f4414d8d80a7..bc2a7120a7758097080b39f2aa37828d98b84fd5 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java
@@ -465,7 +465,7 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity {
@@ -191,7 +191,7 @@ index 42b336a96e5c786b95356200da7d02bfd8b584dc..f79d79d7c9ca18ac711b81c8c3d94e21
return effects;
}
diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaPotion.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaPotion.java
-index 677fdb8c312f79daade76f169292a2a989e11eec..e67c86bae2ab419dd4e6d989d12cef81d135cc2e 100644
+index bac3a5c378054481e1a5abaec1f83afde5d64ac1..f1050bf2b9efc54a894426b08989d44566acd875 100644
--- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaPotion.java
+++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaPotion.java
@@ -45,6 +45,7 @@ class CraftMetaPotion extends CraftMetaItem implements PotionMeta {
@@ -203,14 +203,14 @@ index 677fdb8c312f79daade76f169292a2a989e11eec..e67c86bae2ab419dd4e6d989d12cef81
// Having an initial "state" in ItemMeta seems bit dirty but the UNCRAFTABLE potion type
// is treated as the empty form of the meta because it represents an empty potion with no effect
@@ -97,7 +98,13 @@ class CraftMetaPotion extends CraftMetaItem implements PotionMeta {
- boolean ambient = effect.getBoolean(AMBIENT.NBT);
- boolean particles = effect.contains(SHOW_PARTICLES.NBT, CraftMagicNumbers.NBT.TAG_BYTE) ? effect.getBoolean(SHOW_PARTICLES.NBT) : true;
- boolean icon = effect.contains(SHOW_ICON.NBT, CraftMagicNumbers.NBT.TAG_BYTE) ? effect.getBoolean(SHOW_ICON.NBT) : particles;
+ boolean ambient = effect.getBoolean(CraftMetaPotion.AMBIENT.NBT);
+ boolean particles = effect.contains(CraftMetaPotion.SHOW_PARTICLES.NBT, CraftMagicNumbers.NBT.TAG_BYTE) ? effect.getBoolean(CraftMetaPotion.SHOW_PARTICLES.NBT) : true;
+ boolean icon = effect.contains(CraftMetaPotion.SHOW_ICON.NBT, CraftMagicNumbers.NBT.TAG_BYTE) ? effect.getBoolean(CraftMetaPotion.SHOW_ICON.NBT) : particles;
- this.customEffects.add(new PotionEffect(type, duration, amp, ambient, particles, icon));
+ // Purpur start
+ NamespacedKey key = null;
-+ if (tag.contains(KEY.NBT)) {
-+ key = NamespacedKey.fromString(effect.getString(KEY.NBT));
++ if (tag.contains(CraftMetaPotion.KEY.NBT)) {
++ key = NamespacedKey.fromString(effect.getString(CraftMetaPotion.KEY.NBT));
+ }
+ this.customEffects.add(new PotionEffect(type, duration, amp, ambient, particles, icon, key));
+ // Purpur end
@@ -218,12 +218,12 @@ index 677fdb8c312f79daade76f169292a2a989e11eec..e67c86bae2ab419dd4e6d989d12cef81
}
}
@@ -150,6 +157,11 @@ class CraftMetaPotion extends CraftMetaItem implements PotionMeta {
- effectData.putBoolean(AMBIENT.NBT, effect.isAmbient());
- effectData.putBoolean(SHOW_PARTICLES.NBT, effect.hasParticles());
- effectData.putBoolean(SHOW_ICON.NBT, effect.hasIcon());
+ effectData.putBoolean(CraftMetaPotion.AMBIENT.NBT, effect.isAmbient());
+ effectData.putBoolean(CraftMetaPotion.SHOW_PARTICLES.NBT, effect.hasParticles());
+ effectData.putBoolean(CraftMetaPotion.SHOW_ICON.NBT, effect.hasIcon());
+ // Purpur start
+ if (effect.hasKey()) {
-+ effectData.putString(KEY.NBT, effect.getKey().toString());
++ effectData.putString(CraftMetaPotion.KEY.NBT, effect.getKey().toString());
+ }
+ // Purpur end
effectList.add(effectData);
diff --git a/patches/server/0262-Add-local-difficulty-api.patch b/patches/server/0262-Add-local-difficulty-api.patch
index bb29fd10d..11ccdc887 100644
--- a/patches/server/0262-Add-local-difficulty-api.patch
+++ b/patches/server/0262-Add-local-difficulty-api.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Add local difficulty api
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
-index 4879b585df9a6488922511a8e6603964bd13abcf..e4cfc31970ca6ee2b1f943d9d1771c9d369effb1 100644
+index 5e350fa39f47d54f6048ea89c1317759f122b8ae..0afa519068a9d7bf5b16e201d9d768254094dc4f 100644
--- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
+++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
-@@ -2298,6 +2298,12 @@ public class CraftWorld extends CraftRegionAccessor implements World {
+@@ -2301,6 +2301,12 @@ public class CraftWorld extends CraftRegionAccessor implements World {
return (this.getHandle().getDragonFight() == null) ? null : new CraftDragonBattle(this.getHandle().getDragonFight());
}
diff --git a/patches/server/0266-Remove-Timings.patch b/patches/server/0266-Remove-Timings.patch
index c8bc91be3..3c1f2bf92 100644
--- a/patches/server/0266-Remove-Timings.patch
+++ b/patches/server/0266-Remove-Timings.patch
@@ -56,7 +56,7 @@ index 9a49f5271ec1d9de17632bfffe8309cb1ba0d8b1..0be239c5c78432a6377cd7828cd49f61
} catch (Exception exception) {
if (exception instanceof ReportedException) {
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
-index 219f4c9ca2dfa1f55d7c5f4443dab9844ebec4b9..2ea0db79e2a4b23455b2b2bc345621b4a58629ab 100644
+index cd319d1bddbe5f02e998c961905bcba777492371..bf5cc18304f464aec59f3982311a0a99d9a9706b 100644
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
@@ -1390,15 +1390,15 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop {
entity.activatedPriorityReset = false; // Pufferfish - DAB
if (!entity.isRemoved()) {
@@ -489,10 +489,10 @@ index 3c8585976bbfcb33c26ee5fde8448805e0f97e1a..68a29b818db34ef0263704d7b6d71b9a
}
}
});
-- timings.entityTick.stopTiming(); // Spigot
-- timings.tickEntities.stopTiming(); // Spigot
-+ //timings.entityTick.stopTiming(); // Spigot // Purpur
-+ //timings.tickEntities.stopTiming(); // Spigot // Purpur
+- this.timings.entityTick.stopTiming(); // Spigot
+- this.timings.tickEntities.stopTiming(); // Spigot
++ //this.timings.entityTick.stopTiming(); // Spigot // Purpur
++ //this.timings.tickEntities.stopTiming(); // Spigot // Purpur
gameprofilerfiller.pop();
this.tickBlockEntities();
}
@@ -584,7 +584,7 @@ index 3c8585976bbfcb33c26ee5fde8448805e0f97e1a..68a29b818db34ef0263704d7b6d71b9a
@@ -1578,7 +1578,7 @@ public class ServerLevel extends Level implements WorldGenLevel {
if (!savingDisabled) {
- org.bukkit.Bukkit.getPluginManager().callEvent(new org.bukkit.event.world.WorldSaveEvent(getWorld())); // CraftBukkit
+ org.bukkit.Bukkit.getPluginManager().callEvent(new org.bukkit.event.world.WorldSaveEvent(this.getWorld())); // CraftBukkit
- try (co.aikar.timings.Timing ignored = timings.worldSave.startTiming()) { // Paper
+ //try (co.aikar.timings.Timing ignored = timings.worldSave.startTiming()) { // Paper // Purpur // Purpur
if (progressListener != null) {
@@ -606,7 +606,7 @@ index 3c8585976bbfcb33c26ee5fde8448805e0f97e1a..68a29b818db34ef0263704d7b6d71b9a
} else if (close) { chunkproviderserver.close(false); } // Paper - rewrite chunk system
diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
-index 018a3597c7132ba1f5972fef74b6a32837a31cb3..0c56b90dbcb4aaf904eeb1773a1aa82e9e018c50 100644
+index fe54da743bf3583de98ff5c26d1746f686736729..1060672a14af92acd307e165a6c0f1b5bb234edb 100644
--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
@@ -2448,7 +2448,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
@@ -637,7 +637,7 @@ index 018a3597c7132ba1f5972fef74b6a32837a31cb3..0c56b90dbcb4aaf904eeb1773a1aa82e
}
// 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 cf721106b861a8c166244efc2114e22d038aa3a7..5c38df8170033dbfee267520991a3cc3285d219e 100644
+index 11b825f3dda93005e4b6fd4a5f36935215daf76a..d83f360d5f28f39fffca2949c5dbc114c04e7629 100644
--- a/src/main/java/net/minecraft/server/players/PlayerList.java
+++ b/src/main/java/net/minecraft/server/players/PlayerList.java
@@ -1249,7 +1249,7 @@ public abstract class PlayerList {
@@ -708,25 +708,25 @@ index fcdb9bde8e1605e30dde3e580491522d4b62cdc0..7094701d213c73ba47ace806962244c1
}
diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java
-index b486008e2ef64648064aa365fb98bd5878f9c379..fc27f690d302559dd534e9f4ede7a7bd6422837a 100644
+index 80b4d8d1283c03681106853fd83bf6df0392c230..8b537022638648c11396c0ee638750c712a6230b 100644
--- a/src/main/java/net/minecraft/world/level/Level.java
+++ b/src/main/java/net/minecraft/world/level/Level.java
@@ -1304,15 +1304,15 @@ public abstract class Level implements LevelAccessor, AutoCloseable {
ProfilerFiller gameprofilerfiller = this.getProfiler();
gameprofilerfiller.push("blockEntities");
-- timings.tileEntityPending.startTiming(); // Spigot
-+ //timings.tileEntityPending.startTiming(); // Spigot // Purpur
+- this.timings.tileEntityPending.startTiming(); // Spigot
++ //this.timings.tileEntityPending.startTiming(); // Spigot // Purpur
this.tickingBlockEntities = true;
if (!this.pendingBlockEntityTickers.isEmpty()) {
this.blockEntityTickers.addAll(this.pendingBlockEntityTickers);
this.pendingBlockEntityTickers.clear();
}
-- timings.tileEntityPending.stopTiming(); // Spigot
-+ //timings.tileEntityPending.stopTiming(); // Spigot // Purpur
+- this.timings.tileEntityPending.stopTiming(); // Spigot
++ //this.timings.tileEntityPending.stopTiming(); // Spigot // Purpur
-- timings.tileEntityTick.startTiming(); // Spigot
-+ //timings.tileEntityTick.startTiming(); // Spigot // Purpur
+- this.timings.tileEntityTick.startTiming(); // Spigot
++ //this.timings.tileEntityTick.startTiming(); // Spigot // Purpur
// Spigot start
// Iterator iterator = this.blockEntityTickers.iterator();
int tilesThisCycle = 0;
@@ -734,8 +734,8 @@ index b486008e2ef64648064aa365fb98bd5878f9c379..fc27f690d302559dd534e9f4ede7a7bd
}
this.blockEntityTickers.removeAll(toRemove);
-- timings.tileEntityTick.stopTiming(); // Spigot
-+ //timings.tileEntityTick.stopTiming(); // Spigot // Purpur
+- this.timings.tileEntityTick.stopTiming(); // Spigot
++ //this.timings.tileEntityTick.stopTiming(); // Spigot // Purpur
this.tickingBlockEntities = false;
co.aikar.timings.TimingHistory.tileEntityTicks += this.blockEntityTickers.size(); // Paper
gameprofilerfiller.pop();
@@ -762,7 +762,7 @@ index 9c2d62feff1816f5729060c6192269a5b2d34153..1e3349690d00c7889a381f7c65a3b5bf
}
diff --git a/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java b/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java
-index e2ea90469352346b43f0a86746179a6adc53d82a..ef2f9ee9f32d6a6ad7ec9385335fc368f0ecff32 100644
+index b9aca339851cdaa6325c04e5cea847904752c63c..88b7f814a1454841b1f1b27e9c7d66d64717a422 100644
--- a/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java
+++ b/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java
@@ -800,7 +800,7 @@ public class LevelChunk extends ChunkAccess {
@@ -802,7 +802,7 @@ index e2ea90469352346b43f0a86746179a6adc53d82a..ef2f9ee9f32d6a6ad7ec9385335fc368
}
}
diff --git a/src/main/java/org/bukkit/craftbukkit/scheduler/CraftScheduler.java b/src/main/java/org/bukkit/craftbukkit/scheduler/CraftScheduler.java
-index 5a47a8785bc2e251d041f80a79295c43459de3bc..a4567188e2fe3f922bb6aeb71a2845d1a1be536f 100644
+index e5b8466fb2f8c98bdc81839d9c01cece42c39081..247b233978728d8a0007b494e1d1e0aee29f68c6 100644
--- a/src/main/java/org/bukkit/craftbukkit/scheduler/CraftScheduler.java
+++ b/src/main/java/org/bukkit/craftbukkit/scheduler/CraftScheduler.java
@@ -513,10 +513,10 @@ public class CraftScheduler implements BukkitScheduler {
@@ -837,7 +837,7 @@ index 5a47a8785bc2e251d041f80a79295c43459de3bc..a4567188e2fe3f922bb6aeb71a2845d1
private boolean isReady(final int currentTick) {
diff --git a/src/main/java/org/bukkit/craftbukkit/scheduler/CraftTask.java b/src/main/java/org/bukkit/craftbukkit/scheduler/CraftTask.java
-index 3f45bab0e9f7b3697e6d9d1092a1e6e579f7066f..4f1cf281c4bf68c37982d390da8779dea78dab18 100644
+index ea26d9464644b5217879b8c21b4da28e57708dcb..5835dc236b3f5291a804f7fb14a12eb466d4e0ba 100644
--- a/src/main/java/org/bukkit/craftbukkit/scheduler/CraftTask.java
+++ b/src/main/java/org/bukkit/craftbukkit/scheduler/CraftTask.java
@@ -96,13 +96,13 @@ public class CraftTask implements BukkitTask, Runnable { // Spigot
@@ -857,7 +857,7 @@ index 3f45bab0e9f7b3697e6d9d1092a1e6e579f7066f..4f1cf281c4bf68c37982d390da8779de
long getCreatedAt() {
diff --git a/src/main/java/org/bukkit/craftbukkit/scoreboard/CraftScoreboardManager.java b/src/main/java/org/bukkit/craftbukkit/scoreboard/CraftScoreboardManager.java
-index 7a2f46579352870cfbb32c343d7c68919758ffe3..60b8331a4327cc276b88420254495455babbe3b0 100644
+index 891f850ea99dac1433f3e395e26be14c8abf2bfb..280ed3a3b61b3eadbb6f253cd4e058641e2c3d2e 100644
--- a/src/main/java/org/bukkit/craftbukkit/scoreboard/CraftScoreboardManager.java
+++ b/src/main/java/org/bukkit/craftbukkit/scoreboard/CraftScoreboardManager.java
@@ -115,7 +115,7 @@ public final class CraftScoreboardManager implements ScoreboardManager {
@@ -879,7 +879,7 @@ index 7a2f46579352870cfbb32c343d7c68919758ffe3..60b8331a4327cc276b88420254495455
// Paper end - add timings for scoreboard search
}
diff --git a/src/main/java/org/spigotmc/ActivationRange.java b/src/main/java/org/spigotmc/ActivationRange.java
-index 925cd6e07efc3a42ff5787823b046726ce863104..eae9bf47521ded2a4b7972978f3bd801c685d56a 100644
+index a7ecbd77d0017a298b94cceeddc049eff713f60f..0b03dae85e6008283e68b07fa438daccf0e4f5fa 100644
--- a/src/main/java/org/spigotmc/ActivationRange.java
+++ b/src/main/java/org/spigotmc/ActivationRange.java
@@ -170,7 +170,7 @@ public class ActivationRange
diff --git a/patches/server/0267-Remove-Mojang-Profiler.patch b/patches/server/0267-Remove-Mojang-Profiler.patch
index 463e03961..1dbb39df8 100644
--- a/patches/server/0267-Remove-Mojang-Profiler.patch
+++ b/patches/server/0267-Remove-Mojang-Profiler.patch
@@ -39,7 +39,7 @@ index af712f089e7919fa0bd3946866fd3486fab19f76..9caab6541a224dc8f729a7d720eccda7
return b0;
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
-index 2ea0db79e2a4b23455b2b2bc345621b4a58629ab..306195a8a57dc62379ffd856b214a651fd60e483 100644
+index bf5cc18304f464aec59f3982311a0a99d9a9706b..926ba816e7bccec0d1b34c2f8fc3300be84df4c2 100644
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
@@ -338,13 +338,13 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop s = getSnapshot().getStored();
++ List s = this.getSnapshot().getStored();
+ if(length < s.size()) {
+ storage.add(new org.purpurmc.purpur.entity.PurpurStoredBee(s.get(s.size() - 1), this));
+ }