diff --git a/.idea/runConfigurations/Upstream_Paper__build_.xml b/.idea/runConfigurations/Upstream_Paper__build_.xml
new file mode 100644
index 000000000..195cdef25
--- /dev/null
+++ b/.idea/runConfigurations/Upstream_Paper__build_.xml
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+
+
+
+
+ true
+ true
+ false
+ false
+
+
+
+
+
diff --git a/.idea/runConfigurations/Upstream_Paper__createReobfPaperclipJar_.xml b/.idea/runConfigurations/Upstream_Paper__createReobfPaperclipJar_.xml
index 3fdca7105..8911b6115 100644
--- a/.idea/runConfigurations/Upstream_Paper__createReobfPaperclipJar_.xml
+++ b/.idea/runConfigurations/Upstream_Paper__createReobfPaperclipJar_.xml
@@ -18,9 +18,9 @@
true
true
false
- false
+ false
-
+
-
\ No newline at end of file
+
diff --git a/gradle.properties b/gradle.properties
index fb2bfd9ee..d90308912 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -2,7 +2,7 @@ group = org.purpurmc.purpur
version = 1.20.1-R0.1-SNAPSHOT
mcVersion = 1.20.1
-paperCommit = a751001ed1649860794a57ab818a5e51793aafe6
+paperCommit = 0c8882f7f9a39cadb6e3ca8b94bed7ab9b41c710
org.gradle.caching = true
org.gradle.parallel = true
diff --git a/patches/api/0036-Extended-OfflinePlayer-API.patch b/patches/api/0036-Extended-OfflinePlayer-API.patch
index 5d7aeef21..467cdf300 100644
--- a/patches/api/0036-Extended-OfflinePlayer-API.patch
+++ b/patches/api/0036-Extended-OfflinePlayer-API.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Extended OfflinePlayer API
diff --git a/src/main/java/org/bukkit/OfflinePlayer.java b/src/main/java/org/bukkit/OfflinePlayer.java
-index 9b84cb5abdf3db55cbc7ba19c8cd6955bf4fc5ec..5616d2acfa8180f71ae4123845fc126508f73b90 100644
+index bce07d84cafca677bb6fad78c21b82097f06430c..4ef0fa4f1ef72bb784674671473c6a322acadecc 100644
--- a/src/main/java/org/bukkit/OfflinePlayer.java
+++ b/src/main/java/org/bukkit/OfflinePlayer.java
-@@ -506,4 +506,114 @@ public interface OfflinePlayer extends ServerOperator, AnimalTamer, Configuratio
+@@ -522,4 +522,114 @@ public interface OfflinePlayer extends ServerOperator, AnimalTamer, Configuratio
*/
@Nullable
public Location getLastDeathLocation();
diff --git a/patches/server/0001-Pufferfish-Server-Changes.patch b/patches/server/0001-Pufferfish-Server-Changes.patch
index e6f5854a4..7bc152f7e 100644
--- a/patches/server/0001-Pufferfish-Server-Changes.patch
+++ b/patches/server/0001-Pufferfish-Server-Changes.patch
@@ -2759,10 +2759,10 @@ index ca1edc083847b47bb450b291723aca778a5912dc..dc695c518beed770e787d61bcda7e1cd
}
}
diff --git a/src/main/java/net/minecraft/world/item/crafting/ShapelessRecipe.java b/src/main/java/net/minecraft/world/item/crafting/ShapelessRecipe.java
-index 7f174bb89bf4d700a5ae1b65d8abd4f5b1e7b5ed..e16bde81442e2bedeb2a5b1b77b008c418f05b1c 100644
+index 2e60bdc44c33d434bfd9ca5bf8f75de799c6768c..565318c2afaa1661ed9963453a6354dff499f47a 100644
--- a/src/main/java/net/minecraft/world/item/crafting/ShapelessRecipe.java
+++ b/src/main/java/net/minecraft/world/item/crafting/ShapelessRecipe.java
-@@ -27,8 +27,13 @@ public class ShapelessRecipe implements CraftingRecipe {
+@@ -27,8 +27,13 @@ public class ShapelessRecipe extends io.papermc.paper.inventory.recipe.RecipeBoo
final CraftingBookCategory category;
final ItemStack result;
final NonNullList ingredients;
@@ -2776,7 +2776,7 @@ index 7f174bb89bf4d700a5ae1b65d8abd4f5b1e7b5ed..e16bde81442e2bedeb2a5b1b77b008c4
this.id = id;
this.group = group;
this.category = category;
-@@ -82,6 +87,28 @@ public class ShapelessRecipe implements CraftingRecipe {
+@@ -83,6 +88,28 @@ public class ShapelessRecipe extends io.papermc.paper.inventory.recipe.RecipeBoo
}
public boolean matches(CraftingContainer inventory, Level world) {
@@ -2803,8 +2803,8 @@ index 7f174bb89bf4d700a5ae1b65d8abd4f5b1e7b5ed..e16bde81442e2bedeb2a5b1b77b008c4
+ // Pufferfish end
+
StackedContents autorecipestackmanager = new StackedContents();
+ autorecipestackmanager.initialize(this); // Paper - better exact choice recipes
int i = 0;
-
diff --git a/src/main/java/net/minecraft/world/level/BlockGetter.java b/src/main/java/net/minecraft/world/level/BlockGetter.java
index 0e8746759752b692668886370181aa5db1fd0bb0..58e5ce2afabf480f5dfd9adf43f8fc12666861c6 100644
--- a/src/main/java/net/minecraft/world/level/BlockGetter.java
diff --git a/patches/server/0005-Purpur-client-support.patch b/patches/server/0005-Purpur-client-support.patch
index 81625b5f4..5fe9d13fd 100644
--- a/patches/server/0005-Purpur-client-support.patch
+++ b/patches/server/0005-Purpur-client-support.patch
@@ -43,10 +43,10 @@ index 776c7df81d2b71a5610fe90475f4e8044850beab..63eac8b250b8bae40de432a0ffd47921
try {
byte[] data = new byte[packet.data.readableBytes()];
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
-index 472705e92cef5802f377637d8ea5c8001d7a185c..b7b1f6822480edf37f954e0d1e8e8f97c165d9c6 100644
+index 4e6fea7cf11b1e29ae7c7098a6f5d06bb5f93cc2..7f7375c0a3e680ef60fb9fc6157b72bb0812d1c3 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
-@@ -3260,4 +3260,11 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
+@@ -3267,4 +3267,11 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
return this.spigot;
}
// Spigot end
diff --git a/patches/server/0012-AFK-API.patch b/patches/server/0012-AFK-API.patch
index ce6db9033..8f682c13a 100644
--- a/patches/server/0012-AFK-API.patch
+++ b/patches/server/0012-AFK-API.patch
@@ -224,10 +224,10 @@ index 3b959f42d958bf0f426853aee56753d6c455fcdb..d17abb283ea818244df0379d6b57fc63
if (range < 0.0D || d < range * range) {
return true;
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
-index b7b1f6822480edf37f954e0d1e8e8f97c165d9c6..ec2d2a63c9534ae9c3275822906da3564290c262 100644
+index 7f7375c0a3e680ef60fb9fc6157b72bb0812d1c3..d0986b7b130f790c21d2324d0014d258bc36c527 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
-@@ -510,10 +510,15 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
+@@ -517,10 +517,15 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
@Override
public void setPlayerListName(String name) {
@@ -244,7 +244,7 @@ index b7b1f6822480edf37f954e0d1e8e8f97c165d9c6..ec2d2a63c9534ae9c3275822906da356
for (ServerPlayer player : (List) server.getHandle().players) {
if (player.getBukkitEntity().canSee(this)) {
player.connection.send(new ClientboundPlayerInfoUpdatePacket(ClientboundPlayerInfoUpdatePacket.Action.UPDATE_DISPLAY_NAME, this.getHandle()));
-@@ -3266,5 +3271,20 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
+@@ -3273,5 +3278,20 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
public boolean usesPurpurClient() {
return getHandle().purpurClient;
}
diff --git a/patches/server/0018-Player-invulnerabilities.patch b/patches/server/0018-Player-invulnerabilities.patch
index 37e224caa..264908477 100644
--- a/patches/server/0018-Player-invulnerabilities.patch
+++ b/patches/server/0018-Player-invulnerabilities.patch
@@ -121,10 +121,10 @@ index 42801a26b9d5f8af2d0ce1fef864bb031cfa8965..2cac536ebbc21a23a2219c630fe477bf
return entityplayer1;
}
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
-index ec2d2a63c9534ae9c3275822906da3564290c262..9fb883b77c65ecc967d7f04c3adbd2e6b4465e55 100644
+index d0986b7b130f790c21d2324d0014d258bc36c527..c6ede1fac5c68f2912a9c401765bd10b09afe7f9 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
-@@ -3286,5 +3286,20 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
+@@ -3293,5 +3293,20 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
public void resetIdleTimer() {
getHandle().resetLastActionTime();
}
diff --git a/patches/server/0125-Add-EntityTeleportHinderedEvent.patch b/patches/server/0125-Add-EntityTeleportHinderedEvent.patch
index 1c5b200a1..73ec2dd3d 100644
--- a/patches/server/0125-Add-EntityTeleportHinderedEvent.patch
+++ b/patches/server/0125-Add-EntityTeleportHinderedEvent.patch
@@ -89,10 +89,10 @@ index 912d9e4b3168cf89bd263ba63e049a791beefc90..283836981f5ed94dfc8999c3c5450213
}
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
-index 9fb883b77c65ecc967d7f04c3adbd2e6b4465e55..a5b91ade9889ae8d90825c0ec1d3da085dfef966 100644
+index c6ede1fac5c68f2912a9c401765bd10b09afe7f9..5965b4e91e63a3d3b64e5193399ae3b6d774120b 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
-@@ -1348,6 +1348,10 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
+@@ -1355,6 +1355,10 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
}
if (entity.isVehicle() && !ignorePassengers) { // Paper - Teleport API
diff --git a/patches/server/0210-Extended-OfflinePlayer-API.patch b/patches/server/0210-Extended-OfflinePlayer-API.patch
index 91e192648..97ca4ef26 100644
--- a/patches/server/0210-Extended-OfflinePlayer-API.patch
+++ b/patches/server/0210-Extended-OfflinePlayer-API.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Extended OfflinePlayer API
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftOfflinePlayer.java b/src/main/java/org/bukkit/craftbukkit/CraftOfflinePlayer.java
-index c6129dc565b8f874b73e2fefcabd4be1c221fd73..07050f97621c0cb68b48bf39fb9c90673f7caf64 100644
+index c1b874cd6e0498fce3cd53fdbaca30d290e004d7..23087d511b609693f0bb06cbaac8b6cf8d0defe2 100644
--- a/src/main/java/org/bukkit/craftbukkit/CraftOfflinePlayer.java
+++ b/src/main/java/org/bukkit/craftbukkit/CraftOfflinePlayer.java
-@@ -560,4 +560,213 @@ public class CraftOfflinePlayer implements OfflinePlayer, ConfigurationSerializa
+@@ -567,4 +567,213 @@ public class CraftOfflinePlayer implements OfflinePlayer, ConfigurationSerializa
manager.save();
}
}
@@ -223,10 +223,10 @@ index c6129dc565b8f874b73e2fefcabd4be1c221fd73..07050f97621c0cb68b48bf39fb9c9067
+ // Purpur end - OfflinePlayer API
}
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
-index a5b91ade9889ae8d90825c0ec1d3da085dfef966..88ddea147bb9e0f5e3805dee8f3c112496328de1 100644
+index 5965b4e91e63a3d3b64e5193399ae3b6d774120b..5baf36d8d65574f3e57de0937a949cff03435d30 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
-@@ -2498,6 +2498,28 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
+@@ -2505,6 +2505,28 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
return this.getHandle().getAbilities().walkingSpeed * 2f;
}
diff --git a/patches/server/0266-PaperPR-7822-Fix-exact-choice-recipe-book-clicks.patch b/patches/server/0266-PaperPR-7822-Fix-exact-choice-recipe-book-clicks.patch
index 35bc0a7a6..98df8a3c0 100644
--- a/patches/server/0266-PaperPR-7822-Fix-exact-choice-recipe-book-clicks.patch
+++ b/patches/server/0266-PaperPR-7822-Fix-exact-choice-recipe-book-clicks.patch
@@ -5,12 +5,12 @@ Subject: [PATCH] PaperPR #7822 Fix exact choice recipe book clicks
diff --git a/src/main/java/net/minecraft/world/entity/player/StackedContents.java b/src/main/java/net/minecraft/world/entity/player/StackedContents.java
-index 574ebb3a2fcd0e4e426a8a7ee88d722ed3b9c3f5..862972afa333422592a25b854cec191e02c10734 100644
+index 68d272e98f9e54c9b150c75c27a9ae545be842f6..63fc6074082b579c3f88316008cbeb2a2d7f5841 100644
--- a/src/main/java/net/minecraft/world/entity/player/StackedContents.java
+++ b/src/main/java/net/minecraft/world/entity/player/StackedContents.java
-@@ -37,8 +37,62 @@ public class StackedContents {
- int i = getStackingIndex(stack);
+@@ -40,8 +40,62 @@ public class StackedContents {
int j = Math.min(maxCount, stack.getCount());
+ if (this.extrasMap != null && stack.hasTag() && this.extrasMap.accountStack(stack, j)) return; // Paper - if an exact ingredient, don't include it
this.put(i, j);
+ // PaperPR start
+ if (stack.hasTag()) {
@@ -71,7 +71,7 @@ index 574ebb3a2fcd0e4e426a8a7ee88d722ed3b9c3f5..862972afa333422592a25b854cec191e
}
public static int getStackingIndex(ItemStack stack) {
-@@ -80,6 +134,12 @@ public class StackedContents {
+@@ -83,6 +137,12 @@ public class StackedContents {
}
public static ItemStack fromStackingIndex(int itemId) {
diff --git a/patches/server/0272-Debug-Marker-API.patch b/patches/server/0272-Debug-Marker-API.patch
index a9af6a943..5adeb3b9e 100644
--- a/patches/server/0272-Debug-Marker-API.patch
+++ b/patches/server/0272-Debug-Marker-API.patch
@@ -99,10 +99,10 @@ index a2e852adf47261b1b2eb9734cc90f4676ed58126..1392e483c363e25d1f16465d876cb7d7
@Override
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
-index 88ddea147bb9e0f5e3805dee8f3c112496328de1..0e6218ae64d5fd1f185bcff4a21ebaadea9eb213 100644
+index 5baf36d8d65574f3e57de0937a949cff03435d30..beae58414b27d2a33bb6507ae8ab2104fde2cc0e 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
-@@ -3327,5 +3327,48 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
+@@ -3334,5 +3334,48 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
public void setSpawnInvulnerableTicks(int spawnInvulnerableTime) {
getHandle().spawnInvulnerableTime = spawnInvulnerableTime;
}
diff --git a/patches/server/0276-Add-death-screen-API.patch b/patches/server/0276-Add-death-screen-API.patch
index 150f93d91..3e78bfa92 100644
--- a/patches/server/0276-Add-death-screen-API.patch
+++ b/patches/server/0276-Add-death-screen-API.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Add death screen API
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
-index 0e6218ae64d5fd1f185bcff4a21ebaadea9eb213..018cf3cd424ac85e8d84179bc05ab241f0a00827 100644
+index beae58414b27d2a33bb6507ae8ab2104fde2cc0e..668d825a2469706e4de11629a0b41877de700ca6 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
-@@ -3370,5 +3370,11 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
+@@ -3377,5 +3377,11 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
if (this.getHandle().connection == null) return;
this.getHandle().connection.send(new net.minecraft.network.protocol.game.ClientboundCustomPayloadPacket(ClientboundCustomPayloadPacket.DEBUG_GAME_TEST_CLEAR, new FriendlyByteBuf(io.netty.buffer.Unpooled.buffer())));
}