diff --git a/gradle.properties b/gradle.properties
index 5441771f2..bafadf9c8 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -4,7 +4,7 @@ version = 1.18.1-R0.1-SNAPSHOT
mcVersion = 1.18.1
packageVersion = 1_18_R1
-paperCommit = df8d28a450fe391b9f0c2dc4a64543cf9b84266f
+paperCommit = 464b1715bb8fb3c87b1f0f1f76d136b581794228
org.gradle.caching = true
org.gradle.parallel = true
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index d2880ba80..2e6e5897b 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -1,5 +1,5 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-7.3.2-bin.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-7.3.3-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
diff --git a/patches/api/0003-Purpur-client-support.patch b/patches/api/0003-Purpur-client-support.patch
index 51a7411b3..6b4b8f455 100644
--- a/patches/api/0003-Purpur-client-support.patch
+++ b/patches/api/0003-Purpur-client-support.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Purpur client support
diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java
-index 1b4b54741719252892a3a51491d49cd5423de499..f9d46d0ba72e84c58c5165227875396000f22f4a 100644
+index 5e4a9ce5f899624255e806152c59f60664bcf701..3428757d62a449411f909c4e2a50bf7ec19936ef 100644
--- a/src/main/java/org/bukkit/entity/Player.java
+++ b/src/main/java/org/bukkit/entity/Player.java
-@@ -2507,4 +2507,13 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
+@@ -2603,4 +2603,13 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
@Override
Spigot spigot();
// Spigot end
diff --git a/patches/api/0005-Ridables.patch b/patches/api/0005-Ridables.patch
index e1e29bfa9..2d1d8caf6 100644
--- a/patches/api/0005-Ridables.patch
+++ b/patches/api/0005-Ridables.patch
@@ -21,12 +21,12 @@ index 2405254739a83b2fb517da7fa4ea0721c68f9f6d..825c02793e3aaff45a8a0a9da01d72da
* @deprecated removed in 1.16
*/
diff --git a/src/main/java/org/bukkit/entity/Entity.java b/src/main/java/org/bukkit/entity/Entity.java
-index bafad5764cc3933fcd9602d37bd2e68424cbd575..f1740d0d50e251fa029f22eeaacf2a68b3cd2e96 100644
+index 51ec2e4ec4239659272bba3d6ba2ad73926ebb88..a032bc5aaa0d7abffa9ec91fca397c47b2dac4a8 100644
--- a/src/main/java/org/bukkit/entity/Entity.java
+++ b/src/main/java/org/bukkit/entity/Entity.java
-@@ -795,4 +795,35 @@ public interface Entity extends Metadatable, CommandSender, Nameable, Persistent
+@@ -802,4 +802,35 @@ public interface Entity extends Metadatable, CommandSender, Nameable, Persistent
*/
- public boolean spawnAt(@NotNull Location location, @NotNull org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason reason);
+ boolean isInPowderedSnow();
// Paper end
+
+ // Purpur start
diff --git a/patches/api/0008-AFK-API.patch b/patches/api/0008-AFK-API.patch
index 088333967..cd81c2cd6 100644
--- a/patches/api/0008-AFK-API.patch
+++ b/patches/api/0008-AFK-API.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] AFK API
diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java
-index f9d46d0ba72e84c58c5165227875396000f22f4a..2d9a25bfd7a1468d139f98b01feceb6553663c24 100644
+index 3428757d62a449411f909c4e2a50bf7ec19936ef..52fc606dc7c88fd5ef8dd2f888f65a780ba93f6f 100644
--- a/src/main/java/org/bukkit/entity/Player.java
+++ b/src/main/java/org/bukkit/entity/Player.java
-@@ -2515,5 +2515,24 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
+@@ -2611,5 +2611,24 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
* @return True if Player uses Purpur Client
*/
public boolean usesPurpurClient();
diff --git a/patches/api/0015-Player-invulnerabilities.patch b/patches/api/0015-Player-invulnerabilities.patch
index 87bf2adb5..cc96886be 100644
--- a/patches/api/0015-Player-invulnerabilities.patch
+++ b/patches/api/0015-Player-invulnerabilities.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Player invulnerabilities
diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java
-index 2d9a25bfd7a1468d139f98b01feceb6553663c24..e92de95ec40518006db6c5d098b334c7f854fcea 100644
+index 52fc606dc7c88fd5ef8dd2f888f65a780ba93f6f..414997a2496fececd375fd4ac8f7601d03cfb1b0 100644
--- a/src/main/java/org/bukkit/entity/Player.java
+++ b/src/main/java/org/bukkit/entity/Player.java
-@@ -2534,5 +2534,26 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
+@@ -2630,5 +2630,26 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
* Reset the idle timer back to 0
*/
void resetIdleTimer();
diff --git a/patches/api/0021-Item-entity-immunities.patch b/patches/api/0021-Item-entity-immunities.patch
index 0d320bc5f..33db49a26 100644
--- a/patches/api/0021-Item-entity-immunities.patch
+++ b/patches/api/0021-Item-entity-immunities.patch
@@ -5,12 +5,12 @@ Subject: [PATCH] Item entity immunities
diff --git a/src/main/java/org/bukkit/entity/Item.java b/src/main/java/org/bukkit/entity/Item.java
-index 0ee072645ecf1bf5feb74de6960947ef76db366e..5b9a20e0695218f1239d2bf1d0368291e2a10c06 100644
+index 87dbc00ab565377b8ae0eb6e73799ae6e2e3a376..38ebf0f60113c5eff9d83e6a22ccdade651f419a 100644
--- a/src/main/java/org/bukkit/entity/Item.java
+++ b/src/main/java/org/bukkit/entity/Item.java
-@@ -120,4 +120,62 @@ public interface Item extends Entity {
+@@ -139,4 +139,62 @@ public interface Item extends Entity {
*/
- public void setWillAge(boolean willAge);
+ public void setHealth(int health);
// Paper end
+
+ // Purpur start
diff --git a/patches/api/0027-Fix-javadoc-warnings-missing-param-and-return.patch b/patches/api/0027-Fix-javadoc-warnings-missing-param-and-return.patch
index bc066c0b3..c4cc25ba7 100644
--- a/patches/api/0027-Fix-javadoc-warnings-missing-param-and-return.patch
+++ b/patches/api/0027-Fix-javadoc-warnings-missing-param-and-return.patch
@@ -503,10 +503,10 @@ index fa2a5c8ed947cd2beed01df82fcc5e450e3e5782..d5e7538f7c7f288e1710fb383b57683f
@NotNull
diff --git a/src/main/java/org/bukkit/UnsafeValues.java b/src/main/java/org/bukkit/UnsafeValues.java
-index 014c9984018ad5e51a26228a137e1ba4eb3e80c8..a39c0da1663f53b828bb35e662dd81df63b9d045 100644
+index 81e17ebb54f8b5c085842f223081f3d6d33a317d..9b17e6920dc3612e1787be1b74988a24bb6ad5a7 100644
--- a/src/main/java/org/bukkit/UnsafeValues.java
+++ b/src/main/java/org/bukkit/UnsafeValues.java
-@@ -87,6 +87,8 @@ public interface UnsafeValues {
+@@ -88,6 +88,8 @@ public interface UnsafeValues {
/**
* Called once by the version command on first use, then cached.
@@ -515,7 +515,7 @@ index 014c9984018ad5e51a26228a137e1ba4eb3e80c8..a39c0da1663f53b828bb35e662dd81df
*/
default com.destroystokyo.paper.util.VersionFetcher getVersionFetcher() {
return new com.destroystokyo.paper.util.VersionFetcher.DummyVersionFetcher();
-@@ -113,6 +115,8 @@ public interface UnsafeValues {
+@@ -114,6 +116,8 @@ public interface UnsafeValues {
/**
* Return the translation key for the Material, so the client can translate it into the active
* locale when using a {@link net.kyori.adventure.text.TranslatableComponent}.
@@ -524,7 +524,7 @@ index 014c9984018ad5e51a26228a137e1ba4eb3e80c8..a39c0da1663f53b828bb35e662dd81df
* @return the translation key
*/
String getTranslationKey(Material mat);
-@@ -120,6 +124,8 @@ public interface UnsafeValues {
+@@ -121,6 +125,8 @@ public interface UnsafeValues {
/**
* Return the translation key for the Block, so the client can translate it into the active
* locale when using a {@link net.kyori.adventure.text.TranslatableComponent}.
@@ -533,7 +533,7 @@ index 014c9984018ad5e51a26228a137e1ba4eb3e80c8..a39c0da1663f53b828bb35e662dd81df
* @return the translation key
*/
String getTranslationKey(org.bukkit.block.Block block);
-@@ -128,6 +134,8 @@ public interface UnsafeValues {
+@@ -129,6 +135,8 @@ public interface UnsafeValues {
* Return the translation key for the EntityType, so the client can translate it into the active
* locale when using a {@link net.kyori.adventure.text.TranslatableComponent}.
* This is null
, when the EntityType isn't known to NMS (custom entities)
@@ -542,7 +542,7 @@ index 014c9984018ad5e51a26228a137e1ba4eb3e80c8..a39c0da1663f53b828bb35e662dd81df
* @return the translation key
*/
String getTranslationKey(org.bukkit.entity.EntityType type);
-@@ -143,6 +151,8 @@ public interface UnsafeValues {
+@@ -144,6 +152,8 @@ public interface UnsafeValues {
* Creates and returns the next EntityId available.
*
* Use this when sending custom packets, so that there are no collisions on the client or server.
@@ -787,7 +787,7 @@ index 9e7f42caab1204036f4203354c115fd40c6def92..f76ddd80f9fc926f73b1cc50f0a2767a
/**
diff --git a/src/main/java/org/bukkit/entity/Entity.java b/src/main/java/org/bukkit/entity/Entity.java
-index f1740d0d50e251fa029f22eeaacf2a68b3cd2e96..6fdb484f7eda40155898849cb5ae963f75fafa40 100644
+index a032bc5aaa0d7abffa9ec91fca397c47b2dac4a8..568836b589f4f81d8b3e715b39b90e5172215273 100644
--- a/src/main/java/org/bukkit/entity/Entity.java
+++ b/src/main/java/org/bukkit/entity/Entity.java
@@ -668,6 +668,9 @@ public interface Entity extends Metadatable, CommandSender, Nameable, Persistent
@@ -921,10 +921,10 @@ index a6a7429ed2e1eefb2b12b7480ed74fcc3963a864..e8027e1d505dda6effbb1698550016e8
NORMAL(false),
diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java
-index e92de95ec40518006db6c5d098b334c7f854fcea..809827d41ca42a665cd7b9c23a6361dc10d22ccf 100644
+index 414997a2496fececd375fd4ac8f7601d03cfb1b0..d87bb346bc2f7153d7bf4582e8dddd0ad52e480d 100644
--- a/src/main/java/org/bukkit/entity/Player.java
+++ b/src/main/java/org/bukkit/entity/Player.java
-@@ -2337,6 +2337,8 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
+@@ -2433,6 +2433,8 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
void resetCooldown();
/**
@@ -933,7 +933,7 @@ index e92de95ec40518006db6c5d098b334c7f854fcea..809827d41ca42a665cd7b9c23a6361dc
* @return the client option value of the player
*/
@NotNull
-@@ -2368,6 +2370,9 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
+@@ -2464,6 +2466,9 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
// Paper end
// Spigot start
diff --git a/patches/api/0031-Conflict-on-change-for-adventure-deprecations.patch b/patches/api/0031-Conflict-on-change-for-adventure-deprecations.patch
index 159833def..ab08b385f 100644
--- a/patches/api/0031-Conflict-on-change-for-adventure-deprecations.patch
+++ b/patches/api/0031-Conflict-on-change-for-adventure-deprecations.patch
@@ -170,7 +170,7 @@ index c8d37184d8e882a4084a1bfef85faa330588600b..46bae5c13ce2b973b114682f6a338981
/**
diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java
-index 809827d41ca42a665cd7b9c23a6361dc10d22ccf..38762db5c3383c3663a328ac591b0f6b25ac7f5a 100644
+index d87bb346bc2f7153d7bf4582e8dddd0ad52e480d..7c720a1d210f165b9e3577232af655d3d9b3de34 100644
--- a/src/main/java/org/bukkit/entity/Player.java
+++ b/src/main/java/org/bukkit/entity/Player.java
@@ -76,7 +76,7 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
@@ -281,7 +281,7 @@ index 809827d41ca42a665cd7b9c23a6361dc10d22ccf..38762db5c3383c3663a328ac591b0f6b
public void sendSignChange(@NotNull Location loc, @Nullable String[] lines, @NotNull DyeColor dyeColor) throws IllegalArgumentException;
/**
-@@ -2063,7 +2063,7 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
+@@ -2159,7 +2159,7 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
* @deprecated in favour of {@link #locale()}
*/
@NotNull
@@ -746,7 +746,7 @@ index ed0bc2024a0bb85837e25f75ae89d1fe257b2e60..f6e831f844e1fe99a2617bd64c2290d1
this.caption = caption == null ? null : org.bukkit.Bukkit.getUnsafe().legacyComponentSerializer().deserialize(caption); // Paper
}
diff --git a/src/main/java/org/bukkit/scoreboard/Objective.java b/src/main/java/org/bukkit/scoreboard/Objective.java
-index 75acd6f8f3d774bb79e8e513125e801c5569a244..1eccadd957867e0c5d59a157e16bd4e5557caf68 100644
+index b93b1b0428d11589605c8edf5c053369e1031076..140ac3ebdb0aab58093429faf67a31f7e527e625 100644
--- a/src/main/java/org/bukkit/scoreboard/Objective.java
+++ b/src/main/java/org/bukkit/scoreboard/Objective.java
@@ -47,7 +47,7 @@ public interface Objective {
@@ -768,7 +768,7 @@ index 75acd6f8f3d774bb79e8e513125e801c5569a244..1eccadd957867e0c5d59a157e16bd4e5
/**
diff --git a/src/main/java/org/bukkit/scoreboard/Scoreboard.java b/src/main/java/org/bukkit/scoreboard/Scoreboard.java
-index f7754ab421c7b452a53c28d1e2fafdccfbba24bf..05026b8bc3d41f0391f7c7a59b56aab899537a3e 100644
+index 9a395b138be3f6fa9a52639f0ac4070c23f7d77c..3e1cddb86fd721683220c2a2d1e016c921cc3016 100644
--- a/src/main/java/org/bukkit/scoreboard/Scoreboard.java
+++ b/src/main/java/org/bukkit/scoreboard/Scoreboard.java
@@ -89,7 +89,7 @@ public interface Scoreboard {
@@ -790,7 +790,7 @@ index f7754ab421c7b452a53c28d1e2fafdccfbba24bf..05026b8bc3d41f0391f7c7a59b56aab8
/**
diff --git a/src/main/java/org/bukkit/scoreboard/Team.java b/src/main/java/org/bukkit/scoreboard/Team.java
-index d5b39fb4fc16a342b5661e08df1506858168d20d..723eb266fe1f965d2f08c6f3e8c652d0a0e52d58 100644
+index 2b93692204a74ea0def513a54ddf77a40c64d3d2..918a572328971b6dc864de276475c0403fdbd879 100644
--- a/src/main/java/org/bukkit/scoreboard/Team.java
+++ b/src/main/java/org/bukkit/scoreboard/Team.java
@@ -108,7 +108,7 @@ public interface Team {
diff --git a/patches/api/0034-API-for-any-mob-to-burn-daylight.patch b/patches/api/0034-API-for-any-mob-to-burn-daylight.patch
index 7ddacd47b..b1a8f600b 100644
--- a/patches/api/0034-API-for-any-mob-to-burn-daylight.patch
+++ b/patches/api/0034-API-for-any-mob-to-burn-daylight.patch
@@ -6,10 +6,10 @@ Subject: [PATCH] API for any mob to burn daylight
Co-authored by: Encode42
diff --git a/src/main/java/org/bukkit/entity/Entity.java b/src/main/java/org/bukkit/entity/Entity.java
-index 6fdb484f7eda40155898849cb5ae963f75fafa40..52b3ba61bd58bdee339ecabeb047564aeaa46bdc 100644
+index 568836b589f4f81d8b3e715b39b90e5172215273..b2504a24ee2cc142f7b07fa5a908c0c693f18b8b 100644
--- a/src/main/java/org/bukkit/entity/Entity.java
+++ b/src/main/java/org/bukkit/entity/Entity.java
-@@ -842,5 +842,12 @@ public interface Entity extends Metadatable, CommandSender, Nameable, Persistent
+@@ -849,5 +849,12 @@ public interface Entity extends Metadatable, CommandSender, Nameable, Persistent
* @return True if ridable in water
*/
boolean isRidableInWater();
diff --git a/patches/api/0035-Flying-Fall-Damage-API.patch b/patches/api/0035-Flying-Fall-Damage-API.patch
index fe1cb627a..7dfade153 100644
--- a/patches/api/0035-Flying-Fall-Damage-API.patch
+++ b/patches/api/0035-Flying-Fall-Damage-API.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Flying Fall Damage API
diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java
-index 38762db5c3383c3663a328ac591b0f6b25ac7f5a..d093d43380e09426f9430460a8626f8dcd675f22 100644
+index 7c720a1d210f165b9e3577232af655d3d9b3de34..d71a81d4891813ad8a36736a3d08dcc569b30dbc 100644
--- a/src/main/java/org/bukkit/entity/Player.java
+++ b/src/main/java/org/bukkit/entity/Player.java
-@@ -2560,5 +2560,19 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
+@@ -2656,5 +2656,19 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
* @param invulnerableTicks Invulnerable ticks remaining
*/
void setSpawnInvulnerableTicks(int invulnerableTicks);
diff --git a/patches/api/0040-Add-component-support-to-resource-pack-api.patch b/patches/api/0040-Add-component-support-to-resource-pack-api.patch
deleted file mode 100644
index ea50f0a49..000000000
--- a/patches/api/0040-Add-component-support-to-resource-pack-api.patch
+++ /dev/null
@@ -1,114 +0,0 @@
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: William Blake Galbreath
-Date: Tue, 17 Aug 2021 17:39:14 -0500
-Subject: [PATCH] Add component support to resource pack api
-
-
-diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java
-index d093d43380e09426f9430460a8626f8dcd675f22..a1d0302deb4e002d18264883f5ce1c1a17a6089d 100644
---- a/src/main/java/org/bukkit/entity/Player.java
-+++ b/src/main/java/org/bukkit/entity/Player.java
-@@ -1570,6 +1570,50 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
- */
- public void setResourcePack(@NotNull String url, @Nullable byte[] hash, @Nullable String prompt);
-
-+ /**
-+ * Request that the player's client download and switch resource packs.
-+ *
-+ * The player's client will download the new resource pack asynchronously
-+ * in the background, and will automatically switch to it once the
-+ * download is complete. If the client has downloaded and cached a
-+ * resource pack with the same hash in the past it will not download but
-+ * directly apply the cached pack. If the hash is null and the client has
-+ * downloaded and cached the same resource pack in the past, it will
-+ * perform a file size check against the response content to determine if
-+ * the resource pack has changed and needs to be downloaded again. When
-+ * this request is sent for the very first time from a given server, the
-+ * client will first display a confirmation GUI to the player before
-+ * proceeding with the download.
-+ *
-+ * Notes:
-+ *
-+ * - Players can disable server resources on their client, in which
-+ * case this method will have no affect on them. Use the
-+ * {@link PlayerResourcePackStatusEvent} to figure out whether or not
-+ * the player loaded the pack!
-+ *
- There is no concept of resetting resource packs back to default
-+ * within Minecraft, so players will have to relog to do so or you
-+ * have to send an empty pack.
-+ *
- The request is sent with empty string as the hash when the hash is
-+ * not provided. This might result in newer versions not loading the
-+ * pack correctly.
-+ *
-+ *
-+ * @param url The URL from which the client will download the resource
-+ * pack. The string must contain only US-ASCII characters and should
-+ * be encoded as per RFC 1738.
-+ * @param hash The sha1 hash sum of the resource pack file which is used
-+ * to apply a cached version of the pack directly without downloading
-+ * if it is available. Hast to be 20 bytes long!
-+ * @param prompt The optional custom prompt message to be shown to client.
-+ * @throws IllegalArgumentException Thrown if the URL is null.
-+ * @throws IllegalArgumentException Thrown if the URL is too long. The
-+ * length restriction is an implementation specific arbitrary value.
-+ * @throws IllegalArgumentException Thrown if the hash is not 20 bytes
-+ * long.
-+ */
-+ public void setResourcePack(@NotNull String url, @Nullable byte[] hash, @Nullable net.kyori.adventure.text.Component prompt);
-+
- /**
- * Request that the player's client download and switch resource packs.
- *
-@@ -1661,6 +1705,52 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
- */
- public void setResourcePack(@NotNull String url, @Nullable byte[] hash, @Nullable String prompt, boolean force);
-
-+ /**
-+ * Request that the player's client download and switch resource packs.
-+ *
-+ * The player's client will download the new resource pack asynchronously
-+ * in the background, and will automatically switch to it once the
-+ * download is complete. If the client has downloaded and cached a
-+ * resource pack with the same hash in the past it will not download but
-+ * directly apply the cached pack. If the hash is null and the client has
-+ * downloaded and cached the same resource pack in the past, it will
-+ * perform a file size check against the response content to determine if
-+ * the resource pack has changed and needs to be downloaded again. When
-+ * this request is sent for the very first time from a given server, the
-+ * client will first display a confirmation GUI to the player before
-+ * proceeding with the download.
-+ *
-+ * Notes:
-+ *
-+ * - Players can disable server resources on their client, in which
-+ * case this method will have no affect on them. Use the
-+ * {@link PlayerResourcePackStatusEvent} to figure out whether or not
-+ * the player loaded the pack!
-+ *
- There is no concept of resetting resource packs back to default
-+ * within Minecraft, so players will have to relog to do so or you
-+ * have to send an empty pack.
-+ *
- The request is sent with empty string as the hash when the hash is
-+ * not provided. This might result in newer versions not loading the
-+ * pack correctly.
-+ *
-+ *
-+ * @param url The URL from which the client will download the resource
-+ * pack. The string must contain only US-ASCII characters and should
-+ * be encoded as per RFC 1738.
-+ * @param hash The sha1 hash sum of the resource pack file which is used
-+ * to apply a cached version of the pack directly without downloading
-+ * if it is available. Hast to be 20 bytes long!
-+ * @param prompt The optional custom prompt message to be shown to client.
-+ * @param force If true, the client will be disconnected from the server
-+ * when it declines to use the resource pack.
-+ * @throws IllegalArgumentException Thrown if the URL is null.
-+ * @throws IllegalArgumentException Thrown if the URL is too long. The
-+ * length restriction is an implementation specific arbitrary value.
-+ * @throws IllegalArgumentException Thrown if the hash is not 20 bytes
-+ * long.
-+ */
-+ public void setResourcePack(@NotNull String url, @Nullable byte[] hash, @Nullable net.kyori.adventure.text.Component prompt, boolean force);
-+
- /**
- * Gets the Scoreboard displayed to this player
- *
diff --git a/patches/api/0041-Extended-OfflinePlayer-API.patch b/patches/api/0040-Extended-OfflinePlayer-API.patch
similarity index 100%
rename from patches/api/0041-Extended-OfflinePlayer-API.patch
rename to patches/api/0040-Extended-OfflinePlayer-API.patch
diff --git a/patches/api/0042-Added-the-ability-to-add-combustible-items.patch b/patches/api/0041-Added-the-ability-to-add-combustible-items.patch
similarity index 100%
rename from patches/api/0042-Added-the-ability-to-add-combustible-items.patch
rename to patches/api/0041-Added-the-ability-to-add-combustible-items.patch
diff --git a/patches/server/0004-Purpur-client-support.patch b/patches/server/0004-Purpur-client-support.patch
index 18e479f51..b1993672b 100644
--- a/patches/server/0004-Purpur-client-support.patch
+++ b/patches/server/0004-Purpur-client-support.patch
@@ -43,10 +43,10 @@ index 057fcbc389e54e0c9f7a90a3e8b965cd46db9d58..7de5cf6d7ebd0ab14f1478d466cf5393
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 74acf429b97476974f844a9621d059c935fcb4bd..cf2af2734dbf3b4f35a7e3dd79233cde6c7e728a 100644
+index 8de4ad9f2120d22b78202981624abd1d2fc70148..48fc8c707ffee15fcbfbb23c59cdb492d57ad707 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
-@@ -2594,4 +2594,11 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
+@@ -2609,4 +2609,11 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
return this.spigot;
}
// Spigot end
diff --git a/patches/server/0005-Component-related-conveniences.patch b/patches/server/0005-Component-related-conveniences.patch
index a0215175c..66d0a73f9 100644
--- a/patches/server/0005-Component-related-conveniences.patch
+++ b/patches/server/0005-Component-related-conveniences.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] Component related conveniences
diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java
-index 08cb39a9af8adbd048a91a7cfa76863c7b1a13af..3e91bb85adc33434b278bf2ca83164dae3f7a6e5 100644
+index 4b842e78d3e8fbca90f5f3d975bee654ec87d91d..c516ad43cac2419bcf63e11eaa183785b462de5c 100644
--- a/src/main/java/net/minecraft/server/level/ServerPlayer.java
+++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java
@@ -1693,6 +1693,26 @@ public class ServerPlayer extends Player {
@@ -103,10 +103,10 @@ index 042be2cf60a9d01698808d84f2e537a5eb952079..6ec5a8a52ec06be917f2ca682f5920ed
this.server.sendMessage(message, sender);
Iterator iterator = this.players.iterator();
diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java
-index 1dd646bb8d1c153a3d034de1c208b3bacebd067f..390f8398af00b770d48d274970b8b164925b63b5 100644
+index 8ea81f6ac7503c68f0aea34802843bc545f46db0..605a0e9cf68a4f698ac03b3477585861aeb354c7 100644
--- a/src/main/java/net/minecraft/world/entity/Entity.java
+++ b/src/main/java/net/minecraft/world/entity/Entity.java
-@@ -3601,6 +3601,34 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, i
+@@ -3608,6 +3608,34 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, i
return SlotAccess.NULL;
}
diff --git a/patches/server/0006-Ridables.patch b/patches/server/0006-Ridables.patch
index 9f854f358..4d74da06b 100644
--- a/patches/server/0006-Ridables.patch
+++ b/patches/server/0006-Ridables.patch
@@ -86,7 +86,7 @@ index 7de5cf6d7ebd0ab14f1478d466cf53932bb62565..7aebd080238d7d0f789468c900e15a18
if ((entity instanceof AbstractFish && origItem != null && origItem.asItem() == Items.WATER_BUCKET) && (event.isCancelled() || ServerGamePacketListenerImpl.this.player.getInventory().getSelected() == null || ServerGamePacketListenerImpl.this.player.getInventory().getSelected().getItem() != origItem)) {
ServerGamePacketListenerImpl.this.send(new ClientboundAddMobPacket((AbstractFish) entity));
diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java
-index a7a0d3f29ad3f07236905a764466400e7a22d8d6..5c1a9dc4eab3ecdf7f8ea35733717a3de501d85a 100644
+index 605a0e9cf68a4f698ac03b3477585861aeb354c7..43697061ddbbdf160453d3ab189097a6a56e6246 100644
--- a/src/main/java/net/minecraft/world/entity/Entity.java
+++ b/src/main/java/net/minecraft/world/entity/Entity.java
@@ -292,7 +292,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, i
@@ -126,7 +126,7 @@ index a7a0d3f29ad3f07236905a764466400e7a22d8d6..5c1a9dc4eab3ecdf7f8ea35733717a3d
if (this.passengers.size() == 1 && this.passengers.get(0) == entity) {
this.passengers = ImmutableList.of();
} else {
-@@ -4281,4 +4295,41 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, i
+@@ -4288,4 +4302,41 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, i
return ((ServerChunkCache) level.getChunkSource()).isPositionTicking(this);
}
// Paper end
@@ -3752,7 +3752,7 @@ index 195cdae3f3a9fe8ecab2895a6000f6f855e9a9b8..b72866283e92433e95f0140037a1fd31
this.targetSelector.addGoal(2, new NearestAttackableTargetGoal<>(this, Player.class, true));
}
diff --git a/src/main/java/net/minecraft/world/entity/monster/Skeleton.java b/src/main/java/net/minecraft/world/entity/monster/Skeleton.java
-index 1eeaf0cc9b00afd54f38f9cb50404ec9f9ba51f8..909a7bffcd0d7432f0714417c286fb75b6b951b9 100644
+index 3a3f3358c4bbd16bdcadc56c6a865ecfb942ad54..a8c6971cc7d004bdc61a2b49e4542a8af46e8539 100644
--- a/src/main/java/net/minecraft/world/entity/monster/Skeleton.java
+++ b/src/main/java/net/minecraft/world/entity/monster/Skeleton.java
@@ -25,6 +25,18 @@ public class Skeleton extends AbstractSkeleton {
@@ -4561,11 +4561,11 @@ index 15744949537430d8d8ae71ea72481126c9aff7bd..36417466ae30e9f7f3e953fd4ff98ed3
Projectile(EntityType extends Projectile> type, Level world) {
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java
-index 5aae88e20bc04560d6ad52cfcaa872d28bfcee8f..1ba59900ddf403453aeb4f82b097feaab3dae3ff 100644
+index 5893d2028679d23315a32433f6affa0c8d63c01c..f79cd24ce66fa7ea79308912a1696b3ca9bdffba 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java
-@@ -1287,4 +1287,27 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity {
- return !entity.valid && entity.level.addFreshEntity(entity, reason);
+@@ -1292,4 +1292,27 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity {
+ return getHandle().isInPowderSnow || getHandle().wasInPowderSnow; // depending on the location in the entity "tick" either could be needed.
}
// Paper end
+
diff --git a/patches/server/0011-AFK-API.patch b/patches/server/0011-AFK-API.patch
index 1f00d15cd..f2af616f0 100644
--- a/patches/server/0011-AFK-API.patch
+++ b/patches/server/0011-AFK-API.patch
@@ -213,7 +213,7 @@ index 6df710cecea9a5c91ccf8bdaec60bdc88a601777..6b0cee0bd6218492b184f94a84da9acf
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 cf2af2734dbf3b4f35a7e3dd79233cde6c7e728a..a26fa7bf9f2b2213b313c7762a6af7bc548a99b2 100644
+index 48fc8c707ffee15fcbfbb23c59cdb492d57ad707..2cdd8d9708fbd692bd0530ed63dc245af943ffb9 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
@@ -429,10 +429,15 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
@@ -233,7 +233,7 @@ index cf2af2734dbf3b4f35a7e3dd79233cde6c7e728a..a26fa7bf9f2b2213b313c7762a6af7bc
for (ServerPlayer player : (List) server.getHandle().players) {
if (player.getBukkitEntity().canSee(this)) {
player.connection.send(new ClientboundPlayerInfoPacket(ClientboundPlayerInfoPacket.Action.UPDATE_DISPLAY_NAME, this.getHandle()));
-@@ -2600,5 +2605,20 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
+@@ -2615,5 +2620,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 b50329d90..db37e8924 100644
--- a/patches/server/0018-Player-invulnerabilities.patch
+++ b/patches/server/0018-Player-invulnerabilities.patch
@@ -121,10 +121,10 @@ index 6ec5a8a52ec06be917f2ca682f5920ed5ae1a82c..aca10a81a90c7ef81b4167b868f3893a
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 a26fa7bf9f2b2213b313c7762a6af7bc548a99b2..508c86e6481e9a4cd68d3af5d2d7709160b3479f 100644
+index 2cdd8d9708fbd692bd0530ed63dc245af943ffb9..5d8422cc51c20837a74e1aa4425c70bf6c50c943 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
-@@ -2620,5 +2620,20 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
+@@ -2635,5 +2635,20 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
public void resetIdleTimer() {
getHandle().resetLastActionTime();
}
diff --git a/patches/server/0022-Silk-touch-spawners.patch b/patches/server/0022-Silk-touch-spawners.patch
index d81788067..f0213a777 100644
--- a/patches/server/0022-Silk-touch-spawners.patch
+++ b/patches/server/0022-Silk-touch-spawners.patch
@@ -5,17 +5,17 @@ Subject: [PATCH] Silk touch spawners
diff --git a/src/main/java/io/papermc/paper/adventure/PaperAdventure.java b/src/main/java/io/papermc/paper/adventure/PaperAdventure.java
-index f763a3ea5796737304e0c1f41349622e1d7adadf..26c5c3c6e7c51ad6ccc9bac05e2af4972658179d 100644
+index 3661ac5e3bfdebb2911cb1b118942b9fc7884140..4622d42221f75206e1a7495c8d4896c3d6f35b34 100644
--- a/src/main/java/io/papermc/paper/adventure/PaperAdventure.java
+++ b/src/main/java/io/papermc/paper/adventure/PaperAdventure.java
-@@ -91,6 +91,7 @@ public final class PaperAdventure {
+@@ -92,6 +92,7 @@ public final class PaperAdventure {
})
.build();
public static final LegacyComponentSerializer LEGACY_SECTION_UXRC = LegacyComponentSerializer.builder().flattener(FLATTENER).hexColors().useUnusualXRepeatedCharacterHexFormat().build();
+ public static final LegacyComponentSerializer LEGACY_AMPERSAND = LegacyComponentSerializer.builder().character(LegacyComponentSerializer.AMPERSAND_CHAR).hexColors().build(); // Purpur
- public static final PlainComponentSerializer PLAIN = PlainComponentSerializer.builder().flattener(FLATTENER).build();
+ public static final PlainComponentSerializer PLAIN_COMPONENT = PlainComponentSerializer.builder().flattener(FLATTENER).build();
+ public static final PlainTextComponentSerializer PLAIN = PlainTextComponentSerializer.builder().flattener(FLATTENER).build();
public static final GsonComponentSerializer GSON = GsonComponentSerializer.builder()
- .legacyHoverEventSerializer(NBTLegacyHoverEventSerializer.INSTANCE)
diff --git a/src/main/java/net/minecraft/world/item/Items.java b/src/main/java/net/minecraft/world/item/Items.java
index 20444c6887cbdd444b23bf018a6d63f22359e5e7..85329295afacad3edb6865846166aa56ebae0ed2 100644
--- a/src/main/java/net/minecraft/world/item/Items.java
@@ -139,7 +139,7 @@ index 130ffb06b12565efb35afb55b6da20b1b16f6f06..bc4646a7a72c33a3671115953a2bbd7c
// this.popExperience(worldserver, blockposition, i);
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 65d6e1b08862d4760d4fdf5838e60f8b9c755de9..d4602c11c149836974bb3722a00547f3908b0529 100644
+index f32045fa03634879dd88711c1f657a7635ce3011..4019c768748b65a0d039d3ef0a86a01b098e91c0 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -116,6 +116,38 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0062-Add-canSaveToDisk-to-Entity.patch b/patches/server/0062-Add-canSaveToDisk-to-Entity.patch
index 12e4f896b..5a6c73116 100644
--- a/patches/server/0062-Add-canSaveToDisk-to-Entity.patch
+++ b/patches/server/0062-Add-canSaveToDisk-to-Entity.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Add canSaveToDisk to Entity
diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java
-index 66906467235aa24a08eeef43bee0cb79c7bddd8f..b222b9ef83db5bd35f554bc4cefffdb6b4ca4fd3 100644
+index 359c70f3618ebd8138daaaadae88db98ee733a30..3417d7aaf858ae4759fd6b2b22f67e951769c33c 100644
--- a/src/main/java/net/minecraft/world/entity/Entity.java
+++ b/src/main/java/net/minecraft/world/entity/Entity.java
-@@ -4332,5 +4332,9 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, i
+@@ -4339,5 +4339,9 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, i
public boolean processClick(InteractionHand hand) {
return false;
}
diff --git a/patches/server/0068-Item-entity-immunities.patch b/patches/server/0068-Item-entity-immunities.patch
index 82ec4f166..62e743d85 100644
--- a/patches/server/0068-Item-entity-immunities.patch
+++ b/patches/server/0068-Item-entity-immunities.patch
@@ -31,7 +31,7 @@ index 9a6c67b614944f841813ec2892381c3342bc365c..45d2bf0e22e03db05dd954bf8c9e748b
public ServerEntity(ServerLevel worldserver, Entity entity, int i, boolean flag, Consumer> consumer, Set trackedPlayers) {
this.trackedPlayers = trackedPlayers;
diff --git a/src/main/java/net/minecraft/world/entity/item/ItemEntity.java b/src/main/java/net/minecraft/world/entity/item/ItemEntity.java
-index 0ac107d7a360a5812a43488c611498d12546eed9..c2b0add36da8ad1bfb3fbfdd180a8606f66b8478 100644
+index f09db211f6f789ced85f7bf716428cd04bb41378..67b6803b986236d20b5309cab3c7f9c95ddf5f0b 100644
--- a/src/main/java/net/minecraft/world/entity/item/ItemEntity.java
+++ b/src/main/java/net/minecraft/world/entity/item/ItemEntity.java
@@ -54,6 +54,12 @@ public class ItemEntity extends Entity {
@@ -96,10 +96,10 @@ index 0ac107d7a360a5812a43488c611498d12546eed9..c2b0add36da8ad1bfb3fbfdd180a8606
+ // Purpur end
}
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftItem.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftItem.java
-index 342345eb04d00efb58392ccf209e3c51c1064173..5f5c37fb447a4c1790714158f4b41f15793002d1 100644
+index 8d56f0ab748373e55c0166b92382c126fe8e5381..0637e074dbe4a10bc19e7bf9dd79e2d966b07b1d 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftItem.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftItem.java
-@@ -116,4 +116,46 @@ public class CraftItem extends CraftEntity implements Item {
+@@ -131,4 +131,46 @@ public class CraftItem extends CraftEntity implements Item {
public EntityType getType() {
return EntityType.DROPPED_ITEM;
}
diff --git a/patches/server/0092-Stop-squids-floating-on-top-of-water.patch b/patches/server/0092-Stop-squids-floating-on-top-of-water.patch
index 848cf89dc..3d3c2b7ca 100644
--- a/patches/server/0092-Stop-squids-floating-on-top-of-water.patch
+++ b/patches/server/0092-Stop-squids-floating-on-top-of-water.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Stop squids floating on top of water
diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java
-index b222b9ef83db5bd35f554bc4cefffdb6b4ca4fd3..857cf10a34fce177816b74bb9c29a7202c5acafd 100644
+index 3417d7aaf858ae4759fd6b2b22f67e951769c33c..55635a8abf1ee69e01ba8a7d6119e6c7fdd7ac0d 100644
--- a/src/main/java/net/minecraft/world/entity/Entity.java
+++ b/src/main/java/net/minecraft/world/entity/Entity.java
-@@ -3880,6 +3880,12 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, i
+@@ -3887,6 +3887,12 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, i
this.yRotO = this.getYRot();
}
@@ -54,7 +54,7 @@ index 68cc6f2a78a06293a29317fda72ab3ee79b3533a..cfb2e46b34b2982d6724f18214557fc8
+ // Purpur
}
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index aaae42f112940aa85ffd0106d461e291f37f5592..8de98d7c875e8b0e0ba3877a8a0937f97afa77f1 100644
+index 20847ff868c6efc44c5bd876146060a70982a973..5ddb1cc5807d97841e88f7181a2f3f4d6c66c191 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -1310,6 +1310,7 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0094-Entities-can-use-portals-configuration.patch b/patches/server/0094-Entities-can-use-portals-configuration.patch
index 941de039a..184a25454 100644
--- a/patches/server/0094-Entities-can-use-portals-configuration.patch
+++ b/patches/server/0094-Entities-can-use-portals-configuration.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] Entities can use portals configuration
diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java
-index 857cf10a34fce177816b74bb9c29a7202c5acafd..4ae2040d17f1a8c413c02996621d41c8641581f3 100644
+index 55635a8abf1ee69e01ba8a7d6119e6c7fdd7ac0d..0198b89d3ac768c826d5be22cde88004f3444d48 100644
--- a/src/main/java/net/minecraft/world/entity/Entity.java
+++ b/src/main/java/net/minecraft/world/entity/Entity.java
@@ -2716,7 +2716,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, i
@@ -17,7 +17,7 @@ index 857cf10a34fce177816b74bb9c29a7202c5acafd..4ae2040d17f1a8c413c02996621d41c8
if (!this.level.isClientSide && !pos.equals(this.portalEntrancePos)) {
this.portalEntrancePos = pos.immutable();
}
-@@ -3369,7 +3369,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, i
+@@ -3376,7 +3376,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, i
}
public boolean canChangeDimensions() {
@@ -27,7 +27,7 @@ index 857cf10a34fce177816b74bb9c29a7202c5acafd..4ae2040d17f1a8c413c02996621d41c8
public float getBlockExplosionResistance(Explosion explosion, BlockGetter world, BlockPos pos, BlockState blockState, FluidState fluidState, float max) {
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 8de98d7c875e8b0e0ba3877a8a0937f97afa77f1..c668ec20aad764a6d09c1bdd578f09dfd94000cb 100644
+index 5ddb1cc5807d97841e88f7181a2f3f4d6c66c191..1a1d7d7f436381fb61435730469550d2841beeab 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -287,6 +287,7 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0160-Config-to-disable-hostile-mob-spawn-on-ice.patch b/patches/server/0160-Config-to-disable-hostile-mob-spawn-on-ice.patch
index ebf9c6b01..cd595bb36 100644
--- a/patches/server/0160-Config-to-disable-hostile-mob-spawn-on-ice.patch
+++ b/patches/server/0160-Config-to-disable-hostile-mob-spawn-on-ice.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] Config to disable hostile mob spawn on ice
diff --git a/src/main/java/net/minecraft/world/entity/monster/Monster.java b/src/main/java/net/minecraft/world/entity/monster/Monster.java
-index 457880c9e894a83d88505cf0b7235df919eea591..9c38fdb23853ebdca7b8d904760a395869b4dd49 100644
+index 1d66588cfe94d190a34dc376b4b5bff9461a3529..d2dbb7a6832ffc0c8759f26f685428ce86d6b7c8 100644
--- a/src/main/java/net/minecraft/world/entity/monster/Monster.java
+++ b/src/main/java/net/minecraft/world/entity/monster/Monster.java
@@ -88,6 +88,12 @@ public abstract class Monster extends PathfinderMob implements Enemy {
@@ -20,9 +20,9 @@ index 457880c9e894a83d88505cf0b7235df919eea591..9c38fdb23853ebdca7b8d904760a3958
+ // Purpur end
if (world.getBrightness(LightLayer.SKY, pos) > random.nextInt(32)) {
return false;
- } else if (world.getBrightness(LightLayer.BLOCK, pos) > 0) {
+ } else if (world.getBrightness(LightLayer.BLOCK, pos) > (world.getLevel().paperConfig.maxBlockLightForMonsterSpawning >= 0 ? world.getLevel().paperConfig.maxBlockLightForMonsterSpawning : 0)) { // Paper - configurable max block light level
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index af137c18c47ecea46c9539f4ad186619196ab1d4..78c4717b6ef141f192119265d262669012f4814d 100644
+index 07dce1b9affedb5ae6888431e713accfe8871c26..5eec80e7266ffe9c5f51eb500c40d680aac53ccc 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -546,8 +546,12 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0188-API-for-any-mob-to-burn-daylight.patch b/patches/server/0188-API-for-any-mob-to-burn-daylight.patch
index 2f086461c..b6d33c301 100644
--- a/patches/server/0188-API-for-any-mob-to-burn-daylight.patch
+++ b/patches/server/0188-API-for-any-mob-to-burn-daylight.patch
@@ -6,10 +6,10 @@ Subject: [PATCH] API for any mob to burn daylight
Co-authored by: Encode42
diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java
-index 549417d7bf6953f668bb8b0ab38f8c8b877b7a90..953506523b7bd5835bd727d9d4e6759f946e2afc 100644
+index f15cce18d4cfb56d8b54bb8f50af206ad48f8cd1..2673c49e46e0acbac413feec146000d535721404 100644
--- a/src/main/java/net/minecraft/world/entity/Entity.java
+++ b/src/main/java/net/minecraft/world/entity/Entity.java
-@@ -4345,5 +4345,18 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, i
+@@ -4352,5 +4352,18 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, i
public boolean canSaveToDisk() {
return true;
}
@@ -333,7 +333,7 @@ index 493f3fe736cef11531d345b076ca240b5feb6ff2..735ecd9d768b9e579142810d5f03093d
// Paper end
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java
-index 1f76a89e179b7a4bf28a172b1ece0603f975dbcd..16b4a5a5ae6e44ea63e0882757d0849ea2f74411 100644
+index f16635e4dde9cabf905d450d39c7f84f338b70ad..1ee78cc1f46d3a3493822b19328610a1e43071cc 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java
@@ -197,6 +197,11 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity {
diff --git a/patches/server/0193-Flying-Fall-Damage-API.patch b/patches/server/0193-Flying-Fall-Damage-API.patch
index d0803bbd1..a0d07560d 100644
--- a/patches/server/0193-Flying-Fall-Damage-API.patch
+++ b/patches/server/0193-Flying-Fall-Damage-API.patch
@@ -26,10 +26,10 @@ index 4252ff0201cbfbecc7b95ca86c1763dc5d88a4d7..535bc6d57d153a62f2cbf57747586de3
} else {
if (fallDistance >= 2.0F) {
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
-index 6691abc34043b39460eccd98311c9d8efbefa8a0..2622cf83dd501b982fdd20b31d174bb0d63d1218 100644
+index 8c0eda7a974d99565d7ca55dc8e35c98103ac714..7c971f558c2d47984059e19a5db5297d7e59c2f4 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
-@@ -2645,5 +2645,14 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
+@@ -2660,5 +2660,14 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
public void setSpawnInvulnerableTicks(int spawnInvulnerableTime) {
getHandle().spawnInvulnerableTime = spawnInvulnerableTime;
}
diff --git a/patches/server/0227-Add-component-support-to-resource-pack-api.patch b/patches/server/0227-Add-component-support-to-resource-pack-api.patch
deleted file mode 100644
index 98ca6f494..000000000
--- a/patches/server/0227-Add-component-support-to-resource-pack-api.patch
+++ /dev/null
@@ -1,50 +0,0 @@
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: William Blake Galbreath
-Date: Tue, 17 Aug 2021 17:39:21 -0500
-Subject: [PATCH] Add component support to resource pack api
-
-
-diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
-index 2622cf83dd501b982fdd20b31d174bb0d63d1218..d6618a4ba0e830449f2cf6e60b1d6ff8747bc373 100644
---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
-+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
-@@ -1733,24 +1733,36 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
-
- @Override
- public void setResourcePack(String url, byte[] hash, String prompt) {
-+ // Purpur start
-+ this.setResourcePack(url, hash, io.papermc.paper.adventure.PaperAdventure.LEGACY_SECTION_UXRC.deserialize(prompt), false);
-+ }
-+
-+ @Override
-+ public void setResourcePack(String url, byte[] hash, net.kyori.adventure.text.Component prompt) {
- this.setResourcePack(url, hash, prompt, false);
- }
-
- @Override
- public void setResourcePack(String url, byte[] hash, boolean force) {
-- this.setResourcePack(url, hash, null, force);
-+ this.setResourcePack(url, hash, (net.kyori.adventure.text.Component) null, force);
- }
-
- @Override
- public void setResourcePack(String url, byte[] hash, String prompt, boolean force) {
-+ this.setResourcePack(url, hash, prompt == null ? null : io.papermc.paper.adventure.PaperAdventure.LEGACY_SECTION_UXRC.deserialize(prompt), force);
-+ }
-+
-+ @Override
-+ public void setResourcePack(String url, byte[] hash, net.kyori.adventure.text.Component prompt, boolean force) {
-+ // Purpur end
- Validate.notNull(url, "Resource pack URL cannot be null");
-
- if (hash != null) {
- Validate.isTrue(hash.length == 20, "Resource pack hash should be 20 bytes long but was " + hash.length);
-
-- this.getHandle().sendTexturePack(url, BaseEncoding.base16().lowerCase().encode(hash), force, CraftChatMessage.fromStringOrNull(prompt, true));
-+ this.getHandle().sendTexturePack(url, BaseEncoding.base16().lowerCase().encode(hash), force, io.papermc.paper.adventure.PaperAdventure.asVanilla(prompt)); // Purpur
- } else {
-- this.getHandle().sendTexturePack(url, "", force, CraftChatMessage.fromStringOrNull(prompt, true));
-+ this.getHandle().sendTexturePack(url, "", force, io.papermc.paper.adventure.PaperAdventure.asVanilla(prompt)); // Purpur
- }
- }
-
diff --git a/patches/server/0228-Shulker-change-color-with-dye.patch b/patches/server/0227-Shulker-change-color-with-dye.patch
similarity index 100%
rename from patches/server/0228-Shulker-change-color-with-dye.patch
rename to patches/server/0227-Shulker-change-color-with-dye.patch
diff --git a/patches/server/0229-Extended-OfflinePlayer-API.patch b/patches/server/0228-Extended-OfflinePlayer-API.patch
similarity index 98%
rename from patches/server/0229-Extended-OfflinePlayer-API.patch
rename to patches/server/0228-Extended-OfflinePlayer-API.patch
index 6204391de..3e64b7755 100644
--- a/patches/server/0229-Extended-OfflinePlayer-API.patch
+++ b/patches/server/0228-Extended-OfflinePlayer-API.patch
@@ -223,10 +223,10 @@ index 88bc0807e8bf66a65422f85f1112336334eb3de2..d0e822b329085b9d0a42276c3cacd6cb
+ // 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 d6618a4ba0e830449f2cf6e60b1d6ff8747bc373..eb3324f9f6ec3c90afe8cec2861feebcf0c27ee7 100644
+index 7c971f558c2d47984059e19a5db5297d7e59c2f4..f4aa60c4c55a965637cd706125fa55b243ab3ee0 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
-@@ -1920,6 +1920,28 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
+@@ -1923,6 +1923,28 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
return this.getHandle().getAbilities().walkingSpeed * 2f;
}
diff --git a/patches/server/0230-Added-the-ability-to-add-combustible-items.patch b/patches/server/0229-Added-the-ability-to-add-combustible-items.patch
similarity index 100%
rename from patches/server/0230-Added-the-ability-to-add-combustible-items.patch
rename to patches/server/0229-Added-the-ability-to-add-combustible-items.patch
diff --git a/patches/server/0231-Option-for-if-rain-and-thunder-should-stop-on-sleep.patch b/patches/server/0230-Option-for-if-rain-and-thunder-should-stop-on-sleep.patch
similarity index 100%
rename from patches/server/0231-Option-for-if-rain-and-thunder-should-stop-on-sleep.patch
rename to patches/server/0230-Option-for-if-rain-and-thunder-should-stop-on-sleep.patch
diff --git a/patches/server/0232-Chance-for-azalea-blocks-to-grow-into-trees-naturall.patch b/patches/server/0231-Chance-for-azalea-blocks-to-grow-into-trees-naturall.patch
similarity index 100%
rename from patches/server/0232-Chance-for-azalea-blocks-to-grow-into-trees-naturall.patch
rename to patches/server/0231-Chance-for-azalea-blocks-to-grow-into-trees-naturall.patch
diff --git a/patches/server/0233-Shift-right-click-to-use-exp-for-mending.patch b/patches/server/0232-Shift-right-click-to-use-exp-for-mending.patch
similarity index 100%
rename from patches/server/0233-Shift-right-click-to-use-exp-for-mending.patch
rename to patches/server/0232-Shift-right-click-to-use-exp-for-mending.patch
diff --git a/patches/server/0234-Dolphins-naturally-aggressive-to-players-chance.patch b/patches/server/0233-Dolphins-naturally-aggressive-to-players-chance.patch
similarity index 100%
rename from patches/server/0234-Dolphins-naturally-aggressive-to-players-chance.patch
rename to patches/server/0233-Dolphins-naturally-aggressive-to-players-chance.patch
diff --git a/patches/server/0235-Cows-naturally-aggressive-to-players-chance.patch b/patches/server/0234-Cows-naturally-aggressive-to-players-chance.patch
similarity index 100%
rename from patches/server/0235-Cows-naturally-aggressive-to-players-chance.patch
rename to patches/server/0234-Cows-naturally-aggressive-to-players-chance.patch
diff --git a/patches/server/0236-Option-for-beds-to-explode-on-villager-sleep.patch b/patches/server/0235-Option-for-beds-to-explode-on-villager-sleep.patch
similarity index 100%
rename from patches/server/0236-Option-for-beds-to-explode-on-villager-sleep.patch
rename to patches/server/0235-Option-for-beds-to-explode-on-villager-sleep.patch
diff --git a/patches/server/0237-Halloween-options-and-optimizations.patch b/patches/server/0236-Halloween-options-and-optimizations.patch
similarity index 100%
rename from patches/server/0237-Halloween-options-and-optimizations.patch
rename to patches/server/0236-Halloween-options-and-optimizations.patch
diff --git a/patches/server/0238-Config-for-Grindstones-ignoring-curses.patch b/patches/server/0237-Config-for-Grindstones-ignoring-curses.patch
similarity index 100%
rename from patches/server/0238-Config-for-Grindstones-ignoring-curses.patch
rename to patches/server/0237-Config-for-Grindstones-ignoring-curses.patch
diff --git a/patches/server/0239-UPnP-Port-Forwarding.patch b/patches/server/0238-UPnP-Port-Forwarding.patch
similarity index 100%
rename from patches/server/0239-UPnP-Port-Forwarding.patch
rename to patches/server/0238-UPnP-Port-Forwarding.patch
diff --git a/patches/server/0240-Campfire-option-for-lit-when-placed.patch b/patches/server/0239-Campfire-option-for-lit-when-placed.patch
similarity index 100%
rename from patches/server/0240-Campfire-option-for-lit-when-placed.patch
rename to patches/server/0239-Campfire-option-for-lit-when-placed.patch
diff --git a/patches/server/0241-options-to-extinguish-fire-blocks-with-snowballs.patch b/patches/server/0240-options-to-extinguish-fire-blocks-with-snowballs.patch
similarity index 100%
rename from patches/server/0241-options-to-extinguish-fire-blocks-with-snowballs.patch
rename to patches/server/0240-options-to-extinguish-fire-blocks-with-snowballs.patch
diff --git a/patches/server/0242-Add-option-to-disable-zombie-villagers-cure.patch b/patches/server/0241-Add-option-to-disable-zombie-villagers-cure.patch
similarity index 100%
rename from patches/server/0242-Add-option-to-disable-zombie-villagers-cure.patch
rename to patches/server/0241-Add-option-to-disable-zombie-villagers-cure.patch
diff --git a/patches/server/0243-Persistent-BlockEntity-Lore-and-DisplayName.patch b/patches/server/0242-Persistent-BlockEntity-Lore-and-DisplayName.patch
similarity index 100%
rename from patches/server/0243-Persistent-BlockEntity-Lore-and-DisplayName.patch
rename to patches/server/0242-Persistent-BlockEntity-Lore-and-DisplayName.patch
diff --git a/patches/server/0244-Signs-allow-color-codes.patch b/patches/server/0243-Signs-allow-color-codes.patch
similarity index 100%
rename from patches/server/0244-Signs-allow-color-codes.patch
rename to patches/server/0243-Signs-allow-color-codes.patch
diff --git a/patches/server/0245-Kelp-weeping-and-twisting-vines-configurable-max-gro.patch b/patches/server/0244-Kelp-weeping-and-twisting-vines-configurable-max-gro.patch
similarity index 100%
rename from patches/server/0245-Kelp-weeping-and-twisting-vines-configurable-max-gro.patch
rename to patches/server/0244-Kelp-weeping-and-twisting-vines-configurable-max-gro.patch
diff --git a/patches/server/0246-Mobs-always-drop-experience.patch b/patches/server/0245-Mobs-always-drop-experience.patch
similarity index 99%
rename from patches/server/0246-Mobs-always-drop-experience.patch
rename to patches/server/0245-Mobs-always-drop-experience.patch
index 011b36b9a..15ef7c780 100644
--- a/patches/server/0246-Mobs-always-drop-experience.patch
+++ b/patches/server/0245-Mobs-always-drop-experience.patch
@@ -869,7 +869,7 @@ index 2b77a73c0042a40fcc464dd878a3b9114138b3ff..bb23b232d6b9a950adaf87f83448059d
@Override
diff --git a/src/main/java/net/minecraft/world/entity/monster/Skeleton.java b/src/main/java/net/minecraft/world/entity/monster/Skeleton.java
-index 2cf7a67e5294099154f8acaa897f12e8d2f46e77..3c5231406ddd0ff5343f3e4da93ecefad614c895 100644
+index 9350d4dd73db4227ab65452083d1cec73fda9501..6a2340dd54d4a8b688444eb4621c58e0606e5283 100644
--- a/src/main/java/net/minecraft/world/entity/monster/Skeleton.java
+++ b/src/main/java/net/minecraft/world/entity/monster/Skeleton.java
@@ -45,6 +45,11 @@ public class Skeleton extends AbstractSkeleton {