diff --git a/gradle.properties b/gradle.properties
index b1acc29eb..0a86da7e8 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -1,7 +1,7 @@
group = org.purpurmc.purpur
version = 1.19.3-R0.1-SNAPSHOT
-paperCommit = 50eacd3c0464162a41b5cff6cbeb4360aec69b7b
+paperCommit = 81d7ff6e317cee83c971baf7b10046be90a6891b
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 a8a9f2f4d..0e7f5034a 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 56333098150995cd36793de75a998b628e82881d..d65eb422de43b70496db2da85e8f2da30a5214fb 100644
+index 7ba2b08b8c5eb405a64f9edfa72195dcf48f82bd..d351ae66db72208a78ee6c522201693f19f68ef5 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -41,6 +41,7 @@ dependencies {
@@ -476,7 +476,7 @@ index 9a54f5bde27f1b77fd7b831100cb4e71d8ce4e29..6d91420290a1700d14d3932ab0d030ee
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 7d300a539ac2ef1c773cfa90cecc8655490a8686..edc8e4b071c28a608d9f34cbc8e5b0fb7178e396 100644
+index 7d300a539ac2ef1c773cfa90cecc8655490a8686..3ea600ade1e75cd1e2cdb30ae72335a0c8a4d86c 100644
--- a/src/main/java/org/bukkit/plugin/java/PluginClassLoader.java
+++ b/src/main/java/org/bukkit/plugin/java/PluginClassLoader.java
@@ -47,6 +47,8 @@ public final class PluginClassLoader extends URLClassLoader implements io.paperm
diff --git a/patches/server/0001-Pufferfish-Server-Changes.patch b/patches/server/0001-Pufferfish-Server-Changes.patch
index a53ee5f04..182499683 100644
--- a/patches/server/0001-Pufferfish-Server-Changes.patch
+++ b/patches/server/0001-Pufferfish-Server-Changes.patch
@@ -619,10 +619,10 @@ index 0000000000000000000000000000000000000000..020368da69b9a492155f6de6297f7473
+}
diff --git a/src/main/java/gg/pufferfish/pufferfish/PufferfishConfig.java b/src/main/java/gg/pufferfish/pufferfish/PufferfishConfig.java
new file mode 100644
-index 0000000000000000000000000000000000000000..48582f98fde23f3f1544a7303da21b6d7d4c874e
+index 0000000000000000000000000000000000000000..6e441a1a28ba72a8b1cc09fe5fca71b3c70627d4
--- /dev/null
+++ b/src/main/java/gg/pufferfish/pufferfish/PufferfishConfig.java
-@@ -0,0 +1,283 @@
+@@ -0,0 +1,285 @@
+package gg.pufferfish.pufferfish;
+
+import gg.pufferfish.pufferfish.simd.SIMDDetection;
@@ -712,7 +712,9 @@ index 0000000000000000000000000000000000000000..48582f98fde23f3f1544a7303da21b6d
+ try {
+ SIMDDetection.isEnabled = SIMDDetection.canEnable(PufferfishLogger.LOGGER);
+ SIMDDetection.versionLimited = SIMDDetection.getJavaVersion() != 17 && SIMDDetection.getJavaVersion() != 18 && SIMDDetection.getJavaVersion() != 19;
-+ } catch (NoClassDefFoundError | Exception ignored) { ignored.printStackTrace(); }
++ } catch (NoClassDefFoundError | Exception ignored) {
++ ignored.printStackTrace();
++ }
+
+ if (SIMDDetection.isEnabled) {
+ PufferfishLogger.LOGGER.info("SIMD operations detected as functional. Will replace some operations with faster versions.");
@@ -3138,10 +3140,10 @@ index a71414397bd45ee7bcacfeef0041d80dfa25f114..d66806565770cb03a21794f99e5c4b0f
@Override
diff --git a/src/main/java/net/minecraft/world/level/block/entity/HopperBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/HopperBlockEntity.java
-index ccad692aba2ed77259f6814d88f01b91ed9d229b..698a0ac71cf9fb409d609a81cc2958121260a46d 100644
+index d76603c4172aa10889949c6c2acff05fee02a13d..034a0665f56fca37a48972671cebc6ec249db120 100644
--- a/src/main/java/net/minecraft/world/level/block/entity/HopperBlockEntity.java
+++ b/src/main/java/net/minecraft/world/level/block/entity/HopperBlockEntity.java
-@@ -43,7 +43,10 @@ public class HopperBlockEntity extends RandomizableContainerBlockEntity implemen
+@@ -45,7 +45,10 @@ public class HopperBlockEntity extends RandomizableContainerBlockEntity implemen
public static final int MOVE_ITEM_SPEED = 8;
public static final int HOPPER_CONTAINER_SIZE = 5;
@@ -3152,7 +3154,7 @@ index ccad692aba2ed77259f6814d88f01b91ed9d229b..698a0ac71cf9fb409d609a81cc295812
private int cooldownTime;
private long tickedGameTime;
-@@ -79,14 +82,37 @@ public class HopperBlockEntity extends RandomizableContainerBlockEntity implemen
+@@ -81,14 +84,37 @@ public class HopperBlockEntity extends RandomizableContainerBlockEntity implemen
public HopperBlockEntity(BlockPos pos, BlockState state) {
super(BlockEntityType.HOPPER, pos, state);
@@ -3192,7 +3194,7 @@ index ccad692aba2ed77259f6814d88f01b91ed9d229b..698a0ac71cf9fb409d609a81cc295812
if (!this.tryLoadLootTable(nbt)) {
ContainerHelper.loadAllItems(nbt, this.items);
}
-@@ -158,7 +184,7 @@ public class HopperBlockEntity extends RandomizableContainerBlockEntity implemen
+@@ -160,7 +186,7 @@ public class HopperBlockEntity extends RandomizableContainerBlockEntity implemen
flag = HopperBlockEntity.ejectItems(world, pos, state, (Container) blockEntity, blockEntity); // CraftBukkit
}
@@ -3201,16 +3203,16 @@ index ccad692aba2ed77259f6814d88f01b91ed9d229b..698a0ac71cf9fb409d609a81cc295812
flag |= booleansupplier.getAsBoolean();
}
-@@ -197,7 +223,7 @@ public class HopperBlockEntity extends RandomizableContainerBlockEntity implemen
+@@ -199,7 +225,7 @@ public class HopperBlockEntity extends RandomizableContainerBlockEntity implemen
skipPushModeEventFire = skipHopperEvents;
boolean foundItem = false;
for (int i = 0; i < hopper.getContainerSize(); ++i) {
-- ItemStack item = hopper.getItem(i);
-+ ItemStack item = hopper.getItem(i); // Pufferfish
+- final ItemStack item = hopper.getItem(i);
++ final ItemStack item = hopper.getItem(i); // Pufferfish
if (!item.isEmpty()) {
foundItem = true;
ItemStack origItemStack = item;
-@@ -400,12 +426,18 @@ public class HopperBlockEntity extends RandomizableContainerBlockEntity implemen
+@@ -408,12 +434,18 @@ public class HopperBlockEntity extends RandomizableContainerBlockEntity implemen
}
private static boolean isFullContainer(Container inventory, Direction direction) {
@@ -3231,7 +3233,7 @@ index ccad692aba2ed77259f6814d88f01b91ed9d229b..698a0ac71cf9fb409d609a81cc295812
}
private static boolean allMatch(Container iinventory, Direction enumdirection, java.util.function.BiPredicate test) {
if (iinventory instanceof WorldlyContainer) {
-@@ -582,7 +614,7 @@ public class HopperBlockEntity extends RandomizableContainerBlockEntity implemen
+@@ -592,7 +624,7 @@ public class HopperBlockEntity extends RandomizableContainerBlockEntity implemen
if (HopperBlockEntity.canPlaceItemInContainer(to, stack, slot, side)) {
boolean flag = false;
@@ -3240,7 +3242,7 @@ index ccad692aba2ed77259f6814d88f01b91ed9d229b..698a0ac71cf9fb409d609a81cc295812
if (itemstack1.isEmpty()) {
// Spigot start - SPIGOT-6693, InventorySubcontainer#setItem
-@@ -730,7 +762,10 @@ public class HopperBlockEntity extends RandomizableContainerBlockEntity implemen
+@@ -745,7 +777,10 @@ public class HopperBlockEntity extends RandomizableContainerBlockEntity implemen
@Override
protected void setItems(NonNullList list) {
@@ -3544,7 +3546,7 @@ index ebe65474a4a05ff1637d7f37ebcfe690af59def5..42142c512b12e5b269c19f1e821c50e7
@Nullable
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
-index 621919a4a45caa73a43020fdca24764d95d89fd2..fdabf7f68d1fa12598e3803cf2d72054645393b1 100644
+index 1ca7a4aa8ccd34e2aedbe3963950ba3717c558b7..81dbb98d8e96c81e724af7eb7ab815d102b52f41 100644
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
@@ -261,7 +261,7 @@ import javax.annotation.Nullable; // Paper
@@ -3556,7 +3558,7 @@ index 621919a4a45caa73a43020fdca24764d95d89fd2..fdabf7f68d1fa12598e3803cf2d72054
private final String serverVersion;
private final String bukkitVersion = Versioning.getBukkitVersion();
private final Logger logger = Logger.getLogger("Minecraft");
-@@ -1048,6 +1048,11 @@ public final class CraftServer implements Server {
+@@ -1049,6 +1049,11 @@ public final class CraftServer implements Server {
plugin.getDescription().getName(),
"This plugin is not properly shutting down its async tasks when it is being shut down. This task may throw errors during the final shutdown logs and might not complete before process dies."
));
diff --git a/patches/server/0002-Fix-pufferfish-issues.patch b/patches/server/0002-Fix-pufferfish-issues.patch
index 72d34b2b5..f3dab3382 100644
--- a/patches/server/0002-Fix-pufferfish-issues.patch
+++ b/patches/server/0002-Fix-pufferfish-issues.patch
@@ -5,10 +5,10 @@ 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 48582f98fde23f3f1544a7303da21b6d7d4c874e..5f3be4356a6d65ea2a7e4d013abd4501cedd7428 100644
+index 6e441a1a28ba72a8b1cc09fe5fca71b3c70627d4..5c691db595ee412b77f729e90172bc4f8ae57226 100644
--- a/src/main/java/gg/pufferfish/pufferfish/PufferfishConfig.java
+++ b/src/main/java/gg/pufferfish/pufferfish/PufferfishConfig.java
-@@ -222,7 +222,7 @@ public class PufferfishConfig {
+@@ -224,7 +224,7 @@ public class PufferfishConfig {
public static int activationDistanceMod;
private static void dynamicActivationOfBrains() throws IOException {
@@ -17,7 +17,7 @@ index 48582f98fde23f3f1544a7303da21b6d7d4c874e..5f3be4356a6d65ea2a7e4d013abd4501
startDistance = getInt("dab.start-distance", "activation-range.start-distance", 12,
"This value determines how far away an entity has to be",
"from the player to start being effected by DEAR.");
-@@ -266,7 +266,7 @@ public class PufferfishConfig {
+@@ -268,7 +268,7 @@ public class PufferfishConfig {
public static boolean throttleInactiveGoalSelectorTick;
private static void inactiveGoalSelectorThrottle() {
diff --git a/patches/server/0004-Purpur-config-files.patch b/patches/server/0004-Purpur-config-files.patch
index 5b9a62132..439d4dce6 100644
--- a/patches/server/0004-Purpur-config-files.patch
+++ b/patches/server/0004-Purpur-config-files.patch
@@ -105,7 +105,7 @@ index 42299fd6ae663b01bb5f010b96887caa744dcb96..816f906f98adc180f37d2b216628e576
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 9f8f6ff6408a191012241846cce058b80969e5fe..d633d9da06ea08b55a57fa4e9b8104ccb074385f 100644
+index be998ee2d790ded8dfbeb20d92ba70594a5baafa..234ba3e20fd79040c1386a5c5a47a924b3d42164 100644
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
@@ -962,6 +962,7 @@ public final class CraftServer implements Server {
@@ -132,7 +132,7 @@ index 9f8f6ff6408a191012241846cce058b80969e5fe..d633d9da06ea08b55a57fa4e9b8104cc
this.overrideAllCommandBlockCommands = this.commandsConfiguration.getStringList("command-block-overrides").contains("*");
this.ignoreVanillaPermissions = this.commandsConfiguration.getBoolean("ignore-vanilla-permissions");
-@@ -2751,6 +2754,18 @@ public final class CraftServer implements Server {
+@@ -2752,6 +2755,18 @@ public final class CraftServer implements Server {
return CraftServer.this.console.paperConfigurations.createLegacyObject(CraftServer.this.console);
}
diff --git a/patches/server/0013-Bring-back-server-name.patch b/patches/server/0013-Bring-back-server-name.patch
index 0555dde9d..2366e99ce 100644
--- a/patches/server/0013-Bring-back-server-name.patch
+++ b/patches/server/0013-Bring-back-server-name.patch
@@ -17,10 +17,10 @@ index c7e4330c93baff1f3027d7c75cf857b673d38970..5134fed0cd0eedbe0c2177bce91b978b
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 d633d9da06ea08b55a57fa4e9b8104ccb074385f..1528e8ec7d475e59d93b28a8874676afdb5c96ac 100644
+index 234ba3e20fd79040c1386a5c5a47a924b3d42164..ca3bb446e7f4e1585b06f462ec6844956e2a0ee6 100644
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
-@@ -2941,4 +2941,11 @@ public final class CraftServer implements Server {
+@@ -2942,4 +2942,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 5db057b12..b92b47280 100644
--- a/patches/server/0016-Lagging-threshold.patch
+++ b/patches/server/0016-Lagging-threshold.patch
@@ -25,10 +25,10 @@ index 70d3fc30e21a6c3c3d7a87ce2e43dd2eb8322b2c..7c731c72a19c43f4b291557310c632f3
}
// Spigot end
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
-index 1528e8ec7d475e59d93b28a8874676afdb5c96ac..d7279047dfe353ce9f4312ac0fc53623fa8d7a55 100644
+index ca3bb446e7f4e1585b06f462ec6844956e2a0ee6..eb180b694198d31ae34eb451964f7f738db7ab81 100644
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
-@@ -2947,5 +2947,10 @@ public final class CraftServer implements Server {
+@@ -2948,5 +2948,10 @@ public final class CraftServer implements Server {
public String getServerName() {
return this.getProperties().serverName;
}
diff --git a/patches/server/0062-Add-5-second-tps-average-in-tps.patch b/patches/server/0062-Add-5-second-tps-average-in-tps.patch
index 5d4e6ce38..cc25aaff1 100644
--- a/patches/server/0062-Add-5-second-tps-average-in-tps.patch
+++ b/patches/server/0062-Add-5-second-tps-average-in-tps.patch
@@ -69,10 +69,10 @@ index 779d14840fdb0b27e1bb49e680c59539294b2995..96f50760dec9fb7ec317b500ce5cd6a6
lagging = recentTps[0] < org.purpurmc.purpur.PurpurConfig.laggingThreshold; // Purpur
tickSection = curTime;
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
-index d7279047dfe353ce9f4312ac0fc53623fa8d7a55..10a63a0e67f061d68264a6ebe0209bb51bbef5fc 100644
+index eb180b694198d31ae34eb451964f7f738db7ab81..e8bae4faae8046ee0c59822db72e8dfeb311314f 100644
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
-@@ -2708,6 +2708,7 @@ public final class CraftServer implements Server {
+@@ -2709,6 +2709,7 @@ public final class CraftServer implements Server {
@Override
public double[] getTPS() {
return new double[] {
diff --git a/patches/server/0217-Added-the-ability-to-add-combustible-items.patch b/patches/server/0217-Added-the-ability-to-add-combustible-items.patch
index e5a9883ee..8ee411cce 100644
--- a/patches/server/0217-Added-the-ability-to-add-combustible-items.patch
+++ b/patches/server/0217-Added-the-ability-to-add-combustible-items.patch
@@ -51,10 +51,10 @@ index bbff7466cecf50285c97fadaf68682a6c6ea879f..5ae858b81e6f9903b7296077cf497f62
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 10a63a0e67f061d68264a6ebe0209bb51bbef5fc..0fe1f103f1df37ecb879a6101dac2e9800623f6d 100644
+index e8bae4faae8046ee0c59822db72e8dfeb311314f..b9577cfb29f4339622548ad95dbb0130d6a36798 100644
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
-@@ -1436,6 +1436,19 @@ public final class CraftServer implements Server {
+@@ -1437,6 +1437,19 @@ public final class CraftServer implements Server {
return true;
}
diff --git a/patches/server/0268-Spark-Profiler.patch b/patches/server/0268-Spark-Profiler.patch
index ec37a214b..41eae709c 100644
--- a/patches/server/0268-Spark-Profiler.patch
+++ b/patches/server/0268-Spark-Profiler.patch
@@ -5,6 +5,18 @@ Subject: [PATCH] Spark Profiler
Co-authored-by: granny
+diff --git a/src/main/java/io/papermc/paper/plugin/PluginInitializerManager.java b/src/main/java/io/papermc/paper/plugin/PluginInitializerManager.java
+index f7e43c693140b7a820b2432db312df8f7b099d4d..7ca119409eaab2052920e8d425bfde87a8ffc205 100644
+--- a/src/main/java/io/papermc/paper/plugin/PluginInitializerManager.java
++++ b/src/main/java/io/papermc/paper/plugin/PluginInitializerManager.java
+@@ -102,6 +102,7 @@ public class PluginInitializerManager {
+ java.util.List files = (java.util.List) optionSet.valuesOf("add-plugin");
+ // Register plugins from the flag
+ io.papermc.paper.plugin.util.EntrypointUtil.registerProvidersFromSource(io.papermc.paper.plugin.provider.source.PluginFlagProviderSource.INSTANCE, files);
++ io.papermc.paper.plugin.util.EntrypointUtil.registerProvidersFromSource(io.papermc.paper.plugin.provider.source.SparkProviderSource.INSTANCE, new File("cache", "spark.jar").toPath()); // Purpur
+ }
+
+ // This will be the end of me...
diff --git a/src/main/java/io/papermc/paper/plugin/provider/source/SparkProviderSource.java b/src/main/java/io/papermc/paper/plugin/provider/source/SparkProviderSource.java
new file mode 100644
index 0000000000000000000000000000000000000000..74e3334ec92e3864b84e299b33ca995224eb7c3f
@@ -93,15 +105,3 @@ index 0000000000000000000000000000000000000000..74e3334ec92e3864b84e299b33ca9952
+ return false;
+ }
+}
-diff --git a/src/main/java/net/minecraft/server/Main.java b/src/main/java/net/minecraft/server/Main.java
-index a821cb33fbc29109aec68f9d6a0eb2efc121ee13..066b18444e92508908dd823c8d928721e338d06d 100644
---- a/src/main/java/net/minecraft/server/Main.java
-+++ b/src/main/java/net/minecraft/server/Main.java
-@@ -122,6 +122,7 @@ public class Main {
- // Register plugins from the flag
- io.papermc.paper.plugin.util.EntrypointUtil.registerProvidersFromSource(io.papermc.paper.plugin.provider.source.PluginFlagProviderSource.INSTANCE, files);
- // Paper end
-+ io.papermc.paper.plugin.util.EntrypointUtil.registerProvidersFromSource(io.papermc.paper.plugin.provider.source.SparkProviderSource.INSTANCE, new File("cache", "spark.jar").toPath()); // Purpur
- Bootstrap.bootStrap();
- Bootstrap.validate();
- Util.startTimerHackThread();
diff --git a/patches/server/0282-Debug-Marker-API.patch b/patches/server/0282-Debug-Marker-API.patch
index ab2243a4d..cad27bd6f 100644
--- a/patches/server/0282-Debug-Marker-API.patch
+++ b/patches/server/0282-Debug-Marker-API.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Debug Marker API
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
-index 0fe1f103f1df37ecb879a6101dac2e9800623f6d..2bdabca25c75cbee0f53c1d50a07202bac9e1550 100644
+index b9577cfb29f4339622548ad95dbb0130d6a36798..612ffc2922a73fba2b9e0b9aa341dcca1c359008 100644
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
-@@ -1447,6 +1447,42 @@ public final class CraftServer implements Server {
+@@ -1448,6 +1448,42 @@ public final class CraftServer implements Server {
public void removeFuel(org.bukkit.Material material) {
net.minecraft.world.level.block.entity.AbstractFurnaceBlockEntity.removeFuel(net.minecraft.world.item.ItemStack.fromBukkitCopy(new ItemStack(material)));
}