diff --git a/build.gradle.kts b/build.gradle.kts
index 2688deff1..6ecce7edc 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -1,7 +1,7 @@
plugins {
java
- id("com.github.johnrengelman.shadow") version "7.0.0" apply false
- id("io.papermc.paperweight.patcher") version "1.1.12"
+ id("com.github.johnrengelman.shadow") version "7.1.0" apply false
+ id("io.papermc.paperweight.patcher") version "1.1.14"
}
repositories {
diff --git a/gradle.properties b/gradle.properties
index 1580a9efa..1d20de164 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -4,7 +4,7 @@ version = 1.17.1-R0.1-SNAPSHOT
mcVersion = 1.17.1
packageVersion = 1_17_R1
-paperCommit = 744dd8ce79fb3321d71ebcf88691282f39c30826
+paperCommit = cc2ecbc407e3e1b496938c2b2e66b53dba6e4d94
org.gradle.caching = true
org.gradle.parallel = true
diff --git a/patches/api/0004-Purpur-client-support.patch b/patches/api/0004-Purpur-client-support.patch
index 6f0da4a34..05495d9be 100644
--- a/patches/api/0004-Purpur-client-support.patch
+++ b/patches/api/0004-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 3e8cd3971ac8256a40d9b85cd7514998c965512c..56ffd7b4d791e5656447d11a47446a4759e775e3 100644
+index 9a6e410206852029f1fea0c4409352d5743dcf64..0e21d2cf8fd2fc4eacce20413967adbc3f29ad9a 100644
--- a/src/main/java/org/bukkit/entity/Player.java
+++ b/src/main/java/org/bukkit/entity/Player.java
-@@ -2295,4 +2295,13 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
+@@ -2291,4 +2291,13 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
@Override
Spigot spigot();
// Spigot end
diff --git a/patches/api/0006-Ridables.patch b/patches/api/0006-Ridables.patch
index 1b9ef99a6..c88e50c56 100644
--- a/patches/api/0006-Ridables.patch
+++ b/patches/api/0006-Ridables.patch
@@ -173,12 +173,12 @@ index 0000000000000000000000000000000000000000..c0ec5a130985e8da4cc9e596a6b70503
+ }
+}
diff --git a/src/main/java/org/bukkit/entity/Entity.java b/src/main/java/org/bukkit/entity/Entity.java
-index b02704b0535522c5535b560105eec2885fdd3e77..a8feed523e4fbf56679166c71e3576b2e978df8c 100644
+index 350384ba10435b1115e4386a78d8145f748b6b29..d6604c7db12a98c83ae703bf768ac370dc15c336 100644
--- a/src/main/java/org/bukkit/entity/Entity.java
+++ b/src/main/java/org/bukkit/entity/Entity.java
-@@ -761,4 +761,35 @@ public interface Entity extends Metadatable, CommandSender, Nameable, Persistent
+@@ -795,4 +795,35 @@ public interface Entity extends Metadatable, CommandSender, Nameable, Persistent
*/
- public boolean isTicking();
+ public boolean spawnAt(@NotNull Location location, @NotNull org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason reason);
// Paper end
+
+ // Purpur start
diff --git a/patches/api/0009-AFK-API.patch b/patches/api/0009-AFK-API.patch
index 8906440a3..a91be2d10 100644
--- a/patches/api/0009-AFK-API.patch
+++ b/patches/api/0009-AFK-API.patch
@@ -81,10 +81,10 @@ index 0000000000000000000000000000000000000000..0c8b3e5e4ba412624357ea5662a78862
+ }
+}
diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java
-index 56ffd7b4d791e5656447d11a47446a4759e775e3..6619d9109089d427e3eaec1f8c18dce23d6b7802 100644
+index 0e21d2cf8fd2fc4eacce20413967adbc3f29ad9a..c86ece55ea81d86412e5bb8952e1df265e325845 100644
--- a/src/main/java/org/bukkit/entity/Player.java
+++ b/src/main/java/org/bukkit/entity/Player.java
-@@ -2303,5 +2303,24 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
+@@ -2299,5 +2299,24 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
* @return True if Player uses Purpur Client
*/
public boolean usesPurpurClient();
diff --git a/patches/api/0016-Player-invulnerabilities.patch b/patches/api/0016-Player-invulnerabilities.patch
index fbdc7f086..9e8ff7b7d 100644
--- a/patches/api/0016-Player-invulnerabilities.patch
+++ b/patches/api/0016-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 6619d9109089d427e3eaec1f8c18dce23d6b7802..e6b25b745fa46393fd3ce2949c5336673e552320 100644
+index c86ece55ea81d86412e5bb8952e1df265e325845..9bc534cdb64ed772429a32468e9a1fbfda0e93c9 100644
--- a/src/main/java/org/bukkit/entity/Player.java
+++ b/src/main/java/org/bukkit/entity/Player.java
-@@ -2322,5 +2322,26 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
+@@ -2318,5 +2318,26 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
* Reset the idle timer back to 0
*/
void resetIdleTimer();
diff --git a/patches/api/0018-ItemStack-convenience-methods.patch b/patches/api/0018-ItemStack-convenience-methods.patch
index a3b1a8419..f17c8ff41 100644
--- a/patches/api/0018-ItemStack-convenience-methods.patch
+++ b/patches/api/0018-ItemStack-convenience-methods.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] ItemStack convenience methods
diff --git a/src/main/java/org/bukkit/Material.java b/src/main/java/org/bukkit/Material.java
-index ed6dfb28f8f434680fc8eacbe49a9d0b6cf9be83..a128b647367487f6ba597d9a34378085a18bd8d1 100644
+index f1ff88a5db58eed6087c3e9e6c211a95e00f35b4..bc243e68c5965b62594cc5e1e7e8050731f88765 100644
--- a/src/main/java/org/bukkit/Material.java
+++ b/src/main/java/org/bukkit/Material.java
-@@ -9826,4 +9826,40 @@ public enum Material implements Keyed, net.kyori.adventure.translation.Translata
+@@ -9836,4 +9836,40 @@ public enum Material implements Keyed, net.kyori.adventure.translation.Translata
//
}
}
diff --git a/patches/api/0028-Fix-javadoc-warnings-missing-param-and-return.patch b/patches/api/0028-Fix-javadoc-warnings-missing-param-and-return.patch
index e336c22d3..37410b577 100644
--- a/patches/api/0028-Fix-javadoc-warnings-missing-param-and-return.patch
+++ b/patches/api/0028-Fix-javadoc-warnings-missing-param-and-return.patch
@@ -503,7 +503,7 @@ index c6b478fe41dcd6017571c68f3114442f3c9f6415..cc82fdb614110d32b8efb1d3d8a33777
@NotNull
diff --git a/src/main/java/org/bukkit/UnsafeValues.java b/src/main/java/org/bukkit/UnsafeValues.java
-index 0b15fe8b5da29bf691c394098f0203a49504242e..919c76a2d95d77571572855b5688914d0f387846 100644
+index 014c9984018ad5e51a26228a137e1ba4eb3e80c8..a39c0da1663f53b828bb35e662dd81df63b9d045 100644
--- a/src/main/java/org/bukkit/UnsafeValues.java
+++ b/src/main/java/org/bukkit/UnsafeValues.java
@@ -87,6 +87,8 @@ public interface UnsafeValues {
@@ -515,7 +515,7 @@ index 0b15fe8b5da29bf691c394098f0203a49504242e..919c76a2d95d77571572855b5688914d
*/
default com.destroystokyo.paper.util.VersionFetcher getVersionFetcher() {
return new com.destroystokyo.paper.util.VersionFetcher.DummyVersionFetcher();
-@@ -105,6 +107,8 @@ public interface UnsafeValues {
+@@ -113,6 +115,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 0b15fe8b5da29bf691c394098f0203a49504242e..919c76a2d95d77571572855b5688914d
* @return the translation key
*/
String getTranslationKey(Material mat);
-@@ -112,6 +116,8 @@ public interface UnsafeValues {
+@@ -120,6 +124,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 0b15fe8b5da29bf691c394098f0203a49504242e..919c76a2d95d77571572855b5688914d
* @return the translation key
*/
String getTranslationKey(org.bukkit.block.Block block);
-@@ -120,6 +126,8 @@ public interface UnsafeValues {
+@@ -128,6 +134,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 0b15fe8b5da29bf691c394098f0203a49504242e..919c76a2d95d77571572855b5688914d
* @return the translation key
*/
String getTranslationKey(org.bukkit.entity.EntityType type);
-@@ -135,6 +143,8 @@ public interface UnsafeValues {
+@@ -143,6 +151,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.
@@ -588,7 +588,7 @@ index 14986911b4d0099ea2c91ab2196a771b7dee4c50..d1eed20ea3b27f0800a08b42b62aac40
@NotNull
public static WorldCreator ofKey(@NotNull NamespacedKey worldKey) {
diff --git a/src/main/java/org/bukkit/block/Block.java b/src/main/java/org/bukkit/block/Block.java
-index 0006a5a53dfa9fc81c608423e8740a9c820659a3..1eac84f8abf71029e9e0626a9fa93446f9d0df02 100644
+index 70caaf05be813ba390412714ba0a39981edc2475..c4729769893fd3243ad60f4ad1bb3d7563ff775f 100644
--- a/src/main/java/org/bukkit/block/Block.java
+++ b/src/main/java/org/bukkit/block/Block.java
@@ -184,6 +184,9 @@ public interface Block extends Metadatable, net.kyori.adventure.translation.Tran
@@ -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 a8feed523e4fbf56679166c71e3576b2e978df8c..6fbfddf950e0db559fc804f27ba4a9761dcaf25c 100644
+index d6604c7db12a98c83ae703bf768ac370dc15c336..5c4247dce077f4886f3c2c9a4ab7fae3d18fe99e 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
@@ -850,7 +850,7 @@ index a8feed523e4fbf56679166c71e3576b2e978df8c..6fbfddf950e0db559fc804f27ba4a976
+ * @return True if entity is ticking
*/
public boolean isTicking();
- // Paper end
+
diff --git a/src/main/java/org/bukkit/entity/EntityType.java b/src/main/java/org/bukkit/entity/EntityType.java
index 48aa290dbcf93715ce58d56d6cf3216948f2f3f2..cf5e2f8cfe425172f5c194689e2d923b109c6929 100644
--- a/src/main/java/org/bukkit/entity/EntityType.java
@@ -893,7 +893,7 @@ index 812af884d0601645e254ac29613323d2fd92a112..c1b1ac9210eaaa02dad0449aac867efb
/**
diff --git a/src/main/java/org/bukkit/entity/LightningStrike.java b/src/main/java/org/bukkit/entity/LightningStrike.java
-index 2c81a3f685588431a3c7675c84b35a28975232af..efb308c82580722e5106d5d1c7512d99c38e536a 100644
+index 6f5b6901032eb03606c4566b24459a03baac0c73..9dc1f27d3b36e112d2e79d93b3e49c3999c1bd97 100644
--- a/src/main/java/org/bukkit/entity/LightningStrike.java
+++ b/src/main/java/org/bukkit/entity/LightningStrike.java
@@ -15,6 +15,9 @@ public interface LightningStrike extends Entity {
@@ -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 e6b25b745fa46393fd3ce2949c5336673e552320..9bbb69ebd6035464da0a5ce8c742054224b53bfc 100644
+index 9bc534cdb64ed772429a32468e9a1fbfda0e93c9..8645cf0dd055b68d7ce49aaf93e4d6c680feca8a 100644
--- a/src/main/java/org/bukkit/entity/Player.java
+++ b/src/main/java/org/bukkit/entity/Player.java
-@@ -2117,6 +2117,8 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
+@@ -2121,6 +2121,8 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
void resetCooldown();
/**
@@ -933,7 +933,7 @@ index e6b25b745fa46393fd3ce2949c5336673e552320..9bbb69ebd6035464da0a5ce8c7420542
* @return the client option value of the player
*/
@NotNull
-@@ -2156,6 +2158,9 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
+@@ -2152,6 +2154,9 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
// Paper end
// Spigot start
diff --git a/patches/api/0033-Add-unsafe-Entity-serialization-API.patch b/patches/api/0033-Add-unsafe-Entity-serialization-API.patch
deleted file mode 100644
index f8b412a1f..000000000
--- a/patches/api/0033-Add-unsafe-Entity-serialization-API.patch
+++ /dev/null
@@ -1,80 +0,0 @@
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: Mariell Hoversholm
-Date: Sat, 9 Jan 2021 21:21:27 +0100
-Subject: [PATCH] Add unsafe Entity serialization API
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 3 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see .
-
-diff --git a/src/main/java/org/bukkit/UnsafeValues.java b/src/main/java/org/bukkit/UnsafeValues.java
-index 919c76a2d95d77571572855b5688914d0f387846..df8469f5a8e4262652e04bdd2eddf5fabe5277f2 100644
---- a/src/main/java/org/bukkit/UnsafeValues.java
-+++ b/src/main/java/org/bukkit/UnsafeValues.java
-@@ -211,4 +211,28 @@ public interface UnsafeValues {
- */
- @org.jetbrains.annotations.NotNull org.bukkit.attribute.Attributable getDefaultEntityAttributes(@org.jetbrains.annotations.NotNull NamespacedKey entityKey);
- // Paper end
-+
-+ // Purpur start
-+
-+ /**
-+ * Serialize entity to byte array
-+ *
-+ * @param entity entity to serialize
-+ * @return serialized entity
-+ */
-+ byte[] serializeEntity(org.bukkit.entity.Entity entity);
-+
-+ /**
-+ * Deserialize an entity from byte array
-+ *
-+ * The entity is not automatically spawned in the world. You will have to spawn
-+ * the entity yourself with {@link org.bukkit.entity.Entity#spawnAt(Location)} or
-+ * {@link org.bukkit.entity.Entity#spawnAt(Location, org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason)}
-+ *
-+ * @param data serialized entity
-+ * @param world world entity belongs in
-+ * @return deserialized entity
-+ */
-+ org.bukkit.entity.Entity deserializeEntity(byte[] data, org.bukkit.World world);
-+ // Purpur end
- }
-diff --git a/src/main/java/org/bukkit/entity/Entity.java b/src/main/java/org/bukkit/entity/Entity.java
-index 6fbfddf950e0db559fc804f27ba4a9761dcaf25c..892fc137c8c35dc111f739e4ebe66be42229c5d8 100644
---- a/src/main/java/org/bukkit/entity/Entity.java
-+++ b/src/main/java/org/bukkit/entity/Entity.java
-@@ -808,5 +808,24 @@ public interface Entity extends Metadatable, CommandSender, Nameable, Persistent
- * @return True if ridable in water
- */
- boolean isRidableInWater();
-+
-+ /**
-+ * Spawn this entity in the world at the given {@link Location} with the default spawn reason.
-+ *
-+ * @param location The location at which to spawn the entity.
-+ * @return Whether the entity was successfully spawned.
-+ */
-+ default boolean spawnAt(@NotNull Location location) {
-+ return spawnAt(location, org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.DEFAULT);
-+ }
-+
-+ /**
-+ * Spawn this entity in the world at the given {@link Location} with the reason given.
-+ *
-+ * @param location The location at which to spawn the entity.
-+ * @param spawnReason The reason for which the entity was spawned.
-+ * @return Whether the entity was successfully spawned.
-+ */
-+ boolean spawnAt(@NotNull Location location, @NotNull org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason spawnReason);
- // Purpur end
- }
diff --git a/patches/api/0034-Conflict-on-change-for-adventure-deprecations.patch b/patches/api/0033-Conflict-on-change-for-adventure-deprecations.patch
similarity index 97%
rename from patches/api/0034-Conflict-on-change-for-adventure-deprecations.patch
rename to patches/api/0033-Conflict-on-change-for-adventure-deprecations.patch
index b2554e8fc..397cd68d8 100644
--- a/patches/api/0034-Conflict-on-change-for-adventure-deprecations.patch
+++ b/patches/api/0033-Conflict-on-change-for-adventure-deprecations.patch
@@ -170,10 +170,10 @@ index c8d37184d8e882a4084a1bfef85faa330588600b..46bae5c13ce2b973b114682f6a338981
/**
diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java
-index 9bbb69ebd6035464da0a5ce8c742054224b53bfc..c1670adf70a2edcd7ceed1aed7dc223d439489f5 100644
+index 8645cf0dd055b68d7ce49aaf93e4d6c680feca8a..6bb80577801e4d37b213f7c160bd3c09f8b43db5 100644
--- a/src/main/java/org/bukkit/entity/Player.java
+++ b/src/main/java/org/bukkit/entity/Player.java
-@@ -75,7 +75,7 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
+@@ -74,7 +74,7 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
* @return the friendly name
* @deprecated in favour of {@link #displayName()}
*/
@@ -182,7 +182,7 @@ index 9bbb69ebd6035464da0a5ce8c742054224b53bfc..c1670adf70a2edcd7ceed1aed7dc223d
@NotNull
public String getDisplayName();
-@@ -89,7 +89,7 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
+@@ -88,7 +88,7 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
* @param name The new display name.
* @deprecated in favour of {@link #displayName(net.kyori.adventure.text.Component)}
*/
@@ -191,7 +191,7 @@ index 9bbb69ebd6035464da0a5ce8c742054224b53bfc..c1670adf70a2edcd7ceed1aed7dc223d
public void setDisplayName(@Nullable String name);
// Paper start
-@@ -130,7 +130,7 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
+@@ -129,7 +129,7 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
* @deprecated in favour of {@link #playerListName()}
*/
@NotNull
@@ -200,7 +200,7 @@ index 9bbb69ebd6035464da0a5ce8c742054224b53bfc..c1670adf70a2edcd7ceed1aed7dc223d
public String getPlayerListName();
/**
-@@ -141,7 +141,7 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
+@@ -140,7 +140,7 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
* @param name new player list name
* @deprecated in favour of {@link #playerListName(net.kyori.adventure.text.Component)}
*/
@@ -209,7 +209,7 @@ index 9bbb69ebd6035464da0a5ce8c742054224b53bfc..c1670adf70a2edcd7ceed1aed7dc223d
public void setPlayerListName(@Nullable String name);
/**
-@@ -150,7 +150,7 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
+@@ -149,7 +149,7 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
* @return player list header or null
* @deprecated in favour of {@link #playerListHeader()}
*/
@@ -218,7 +218,7 @@ index 9bbb69ebd6035464da0a5ce8c742054224b53bfc..c1670adf70a2edcd7ceed1aed7dc223d
@Nullable
public String getPlayerListHeader();
-@@ -160,7 +160,7 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
+@@ -159,7 +159,7 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
* @return player list header or null
* @deprecated in favour of {@link #playerListFooter()}
*/
@@ -227,7 +227,7 @@ index 9bbb69ebd6035464da0a5ce8c742054224b53bfc..c1670adf70a2edcd7ceed1aed7dc223d
@Nullable
public String getPlayerListFooter();
-@@ -170,7 +170,7 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
+@@ -169,7 +169,7 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
* @param header player list header, null for empty
* @deprecated in favour of {@link #sendPlayerListHeader(net.kyori.adventure.text.Component)}
*/
@@ -236,7 +236,7 @@ index 9bbb69ebd6035464da0a5ce8c742054224b53bfc..c1670adf70a2edcd7ceed1aed7dc223d
public void setPlayerListHeader(@Nullable String header);
/**
-@@ -179,7 +179,7 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
+@@ -178,7 +178,7 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
* @param footer player list footer, null for empty
* @deprecated in favour of {@link #sendPlayerListFooter(net.kyori.adventure.text.Component)}
*/
@@ -245,7 +245,7 @@ index 9bbb69ebd6035464da0a5ce8c742054224b53bfc..c1670adf70a2edcd7ceed1aed7dc223d
public void setPlayerListFooter(@Nullable String footer);
/**
-@@ -190,7 +190,7 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
+@@ -189,7 +189,7 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
* @param footer player list footer, null for empty
* @deprecated in favour of {@link #sendPlayerListHeaderAndFooter(net.kyori.adventure.text.Component, net.kyori.adventure.text.Component)}
*/
@@ -254,7 +254,7 @@ index 9bbb69ebd6035464da0a5ce8c742054224b53bfc..c1670adf70a2edcd7ceed1aed7dc223d
public void setPlayerListHeaderFooter(@Nullable String header, @Nullable String footer);
/**
-@@ -230,7 +230,7 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
+@@ -229,7 +229,7 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
* @param message kick message
* @deprecated in favour of {@link #kick(net.kyori.adventure.text.Component)}
*/
@@ -263,7 +263,7 @@ index 9bbb69ebd6035464da0a5ce8c742054224b53bfc..c1670adf70a2edcd7ceed1aed7dc223d
public void kickPlayer(@Nullable String message);
// Paper start
-@@ -673,7 +673,7 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
+@@ -677,7 +677,7 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
* @throws IllegalArgumentException if lines is non-null and has a length less than 4
* @deprecated in favour of {@link #sendSignChange(org.bukkit.Location, java.util.List)}
*/
@@ -272,7 +272,7 @@ index 9bbb69ebd6035464da0a5ce8c742054224b53bfc..c1670adf70a2edcd7ceed1aed7dc223d
public void sendSignChange(@NotNull Location loc, @Nullable String[] lines) throws IllegalArgumentException;
/**
-@@ -694,7 +694,7 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
+@@ -698,7 +698,7 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
* @throws IllegalArgumentException if lines is non-null and has a length less than 4
* @deprecated in favour of {@link #sendSignChange(org.bukkit.Location, java.util.List, org.bukkit.DyeColor)}
*/
@@ -281,7 +281,7 @@ index 9bbb69ebd6035464da0a5ce8c742054224b53bfc..c1670adf70a2edcd7ceed1aed7dc223d
public void sendSignChange(@NotNull Location loc, @Nullable String[] lines, @NotNull DyeColor dyeColor) throws IllegalArgumentException;
/**
-@@ -1867,7 +1867,7 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
+@@ -1871,7 +1871,7 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
* @deprecated in favour of {@link #locale()}
*/
@NotNull
@@ -335,10 +335,10 @@ index 1f79f704abf339150df08900b8ea7da4cefef258..004106913655446774f875015cb79863
adventure$lines.set(index, line != null ? org.bukkit.Bukkit.getUnsafe().legacyComponentSerializer().deserialize(line) : null); // Paper
}
diff --git a/src/main/java/org/bukkit/event/entity/PlayerDeathEvent.java b/src/main/java/org/bukkit/event/entity/PlayerDeathEvent.java
-index 3d45d2e41aad6992b40a22030f2a63baeec78757..3cecfe9f7c253ab474829c612cca2dc05fd5d111 100644
+index 8175e5329f7fb6da4c7faf695162b51492114dc3..839fea07e3b3fe486cd8f7f8fa5d2593ed54594e 100644
--- a/src/main/java/org/bukkit/event/entity/PlayerDeathEvent.java
+++ b/src/main/java/org/bukkit/event/entity/PlayerDeathEvent.java
-@@ -151,7 +151,7 @@ public class PlayerDeathEvent extends EntityDeathEvent {
+@@ -162,7 +162,7 @@ public class PlayerDeathEvent extends EntityDeathEvent {
* @param deathMessage Message to appear to other players on the server.
* @deprecated in favour of {@link #deathMessage(net.kyori.adventure.text.Component)}
*/
@@ -347,7 +347,7 @@ index 3d45d2e41aad6992b40a22030f2a63baeec78757..3cecfe9f7c253ab474829c612cca2dc0
public void setDeathMessage(@Nullable String deathMessage) {
this.deathMessage = deathMessage;
this.adventure$deathMessage = deathMessage != null ? org.bukkit.Bukkit.getUnsafe().legacyComponentSerializer().deserialize(deathMessage) : net.kyori.adventure.text.Component.empty(); // Paper
-@@ -164,7 +164,7 @@ public class PlayerDeathEvent extends EntityDeathEvent {
+@@ -175,7 +175,7 @@ public class PlayerDeathEvent extends EntityDeathEvent {
* @deprecated in favour of {@link #deathMessage()}
*/
@Nullable
diff --git a/patches/api/0035-Add-enchantment-target-for-bows-and-crossbows.patch b/patches/api/0034-Add-enchantment-target-for-bows-and-crossbows.patch
similarity index 100%
rename from patches/api/0035-Add-enchantment-target-for-bows-and-crossbows.patch
rename to patches/api/0034-Add-enchantment-target-for-bows-and-crossbows.patch
diff --git a/patches/api/0036-Iron-golem-poppy-calms-anger.patch b/patches/api/0035-Iron-golem-poppy-calms-anger.patch
similarity index 100%
rename from patches/api/0036-Iron-golem-poppy-calms-anger.patch
rename to patches/api/0035-Iron-golem-poppy-calms-anger.patch
diff --git a/patches/api/0037-API-for-any-mob-to-burn-daylight.patch b/patches/api/0036-API-for-any-mob-to-burn-daylight.patch
similarity index 82%
rename from patches/api/0037-API-for-any-mob-to-burn-daylight.patch
rename to patches/api/0036-API-for-any-mob-to-burn-daylight.patch
index 52033b3d7..88ac3cb9d 100644
--- a/patches/api/0037-API-for-any-mob-to-burn-daylight.patch
+++ b/patches/api/0036-API-for-any-mob-to-burn-daylight.patch
@@ -6,13 +6,13 @@ 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 892fc137c8c35dc111f739e4ebe66be42229c5d8..a365998c2c359fb6cd535ebf0f2d893943b87b75 100644
+index 5c4247dce077f4886f3c2c9a4ab7fae3d18fe99e..5912a2a8ccbaf4bb4a0fcb5fa87a08b1e31c276c 100644
--- a/src/main/java/org/bukkit/entity/Entity.java
+++ b/src/main/java/org/bukkit/entity/Entity.java
-@@ -827,5 +827,12 @@ public interface Entity extends Metadatable, CommandSender, Nameable, Persistent
- * @return Whether the entity was successfully spawned.
+@@ -842,5 +842,12 @@ public interface Entity extends Metadatable, CommandSender, Nameable, Persistent
+ * @return True if ridable in water
*/
- boolean spawnAt(@NotNull Location location, @NotNull org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason spawnReason);
+ boolean isRidableInWater();
+
+ /**
+ * Checks if the entity is in daylight
diff --git a/patches/api/0038-Flying-Fall-Damage-API.patch b/patches/api/0037-Flying-Fall-Damage-API.patch
similarity index 87%
rename from patches/api/0038-Flying-Fall-Damage-API.patch
rename to patches/api/0037-Flying-Fall-Damage-API.patch
index b4b22cca2..a091e4e84 100644
--- a/patches/api/0038-Flying-Fall-Damage-API.patch
+++ b/patches/api/0037-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 c1670adf70a2edcd7ceed1aed7dc223d439489f5..566c8f8b505c3bfc23044a836083a00b92cacedd 100644
+index 6bb80577801e4d37b213f7c160bd3c09f8b43db5..639b2e49ffdf9c9bc20f7af177614b35699ac539 100644
--- a/src/main/java/org/bukkit/entity/Player.java
+++ b/src/main/java/org/bukkit/entity/Player.java
-@@ -2348,5 +2348,19 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
+@@ -2344,5 +2344,19 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
* @param invulnerableTicks Invulnerable ticks remaining
*/
void setSpawnInvulnerableTicks(int invulnerableTicks);
diff --git a/patches/api/0039-Add-back-player-spawned-endermite-API.patch b/patches/api/0038-Add-back-player-spawned-endermite-API.patch
similarity index 100%
rename from patches/api/0039-Add-back-player-spawned-endermite-API.patch
rename to patches/api/0038-Add-back-player-spawned-endermite-API.patch
diff --git a/patches/api/0040-Fix-default-permission-system.patch b/patches/api/0039-Fix-default-permission-system.patch
similarity index 100%
rename from patches/api/0040-Fix-default-permission-system.patch
rename to patches/api/0039-Fix-default-permission-system.patch
diff --git a/patches/api/0041-Summoner-API.patch b/patches/api/0040-Summoner-API.patch
similarity index 100%
rename from patches/api/0041-Summoner-API.patch
rename to patches/api/0040-Summoner-API.patch
diff --git a/patches/api/0042-Clean-up-version-command-output-for-console.patch b/patches/api/0041-Clean-up-version-command-output-for-console.patch
similarity index 100%
rename from patches/api/0042-Clean-up-version-command-output-for-console.patch
rename to patches/api/0041-Clean-up-version-command-output-for-console.patch
diff --git a/patches/api/0043-Add-force-and-prompt-parameters-to-resource-pack-api.patch b/patches/api/0042-Add-force-and-prompt-parameters-to-resource-pack-api.patch
similarity index 97%
rename from patches/api/0043-Add-force-and-prompt-parameters-to-resource-pack-api.patch
rename to patches/api/0042-Add-force-and-prompt-parameters-to-resource-pack-api.patch
index bc6b7b414..29a0d8be8 100644
--- a/patches/api/0043-Add-force-and-prompt-parameters-to-resource-pack-api.patch
+++ b/patches/api/0042-Add-force-and-prompt-parameters-to-resource-pack-api.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Add force and prompt parameters 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 566c8f8b505c3bfc23044a836083a00b92cacedd..033cf450dcfb02e57d0875d0117086e6fe615c32 100644
+index 639b2e49ffdf9c9bc20f7af177614b35699ac539..2d8ade668c63a72f42ae8e4cdbece22c3686b721 100644
--- a/src/main/java/org/bukkit/entity/Player.java
+++ b/src/main/java/org/bukkit/entity/Player.java
-@@ -1490,6 +1490,88 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
+@@ -1494,6 +1494,88 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
*/
public void setResourcePack(@NotNull String url, @NotNull byte[] hash);
diff --git a/patches/api/0044-Extended-OfflinePlayer-API.patch b/patches/api/0043-Extended-OfflinePlayer-API.patch
similarity index 100%
rename from patches/api/0044-Extended-OfflinePlayer-API.patch
rename to patches/api/0043-Extended-OfflinePlayer-API.patch
diff --git a/patches/api/0045-Added-the-ability-to-add-combustible-items.patch b/patches/api/0044-Added-the-ability-to-add-combustible-items.patch
similarity index 100%
rename from patches/api/0045-Added-the-ability-to-add-combustible-items.patch
rename to patches/api/0044-Added-the-ability-to-add-combustible-items.patch
diff --git a/patches/server/0001-Airplane-Server-Changes.patch b/patches/server/0001-Airplane-Server-Changes.patch
index 4480f9231..27a4d3a2b 100644
--- a/patches/server/0001-Airplane-Server-Changes.patch
+++ b/patches/server/0001-Airplane-Server-Changes.patch
@@ -19,10 +19,10 @@ 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 13f89bdaf1ada33060b1ee4d6f2860ec194b68a4..0bd09bd56968660437a94ec078a13ee78339fa0e 100644
+index e067c69fea1dec79ef8e97cad1c74020b6a3a235..fd3528be3d90733e826bcbeae967b95cedf92dfe 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
-@@ -25,8 +25,8 @@ repositories {
+@@ -22,8 +22,8 @@ repositories {
}
dependencies {
@@ -31,10 +31,10 @@ index 13f89bdaf1ada33060b1ee4d6f2860ec194b68a4..0bd09bd56968660437a94ec078a13ee7
+ implementation(project(":Airplane-API")) // Airplane // Paper
+ implementation("io.papermc.paper:paper-mojangapi:1.17.1-R0.1-SNAPSHOT") // Airplane
// Paper start
- implementation("org.jline:jline-terminal-jansi:3.12.1")
- implementation("net.minecrell:terminalconsoleappender:1.2.0")
-@@ -61,6 +61,13 @@ dependencies {
- implementation("org.quiltmc:tiny-mappings-parser:0.3.0") // Paper - needed to read mappings for stacktrace deobfuscation
+ implementation("org.jline:jline-terminal-jansi:3.21.0")
+ implementation("net.minecrell:terminalconsoleappender:1.3.0")
+@@ -57,6 +57,13 @@ dependencies {
+ implementation("net.fabricmc:mapping-io:0.3.0") // Paper - needed to read mappings for stacktrace deobfuscation
implementation("com.velocitypowered:velocity-native:1.1.0-SNAPSHOT") // Paper
+ implementation("com.github.technove:AIR:fe3dbb4420") // Airplane - config
@@ -47,7 +47,7 @@ index 13f89bdaf1ada33060b1ee4d6f2860ec194b68a4..0bd09bd56968660437a94ec078a13ee7
testImplementation("io.github.classgraph:classgraph:4.8.47") // Paper - mob goal test
testImplementation("junit:junit:4.13.1")
testImplementation("org.hamcrest:hamcrest-library:1.3")
-@@ -79,6 +86,7 @@ tasks.jar {
+@@ -75,6 +82,7 @@ tasks.jar {
"Main-Class" to "org.bukkit.craftbukkit.Main",
"Implementation-Title" to "CraftBukkit",
"Implementation-Version" to "git-Paper-$implementationVersion",
@@ -55,7 +55,7 @@ index 13f89bdaf1ada33060b1ee4d6f2860ec194b68a4..0bd09bd56968660437a94ec078a13ee7
"Implementation-Vendor" to date, // Paper
"Specification-Title" to "Bukkit",
"Specification-Version" to project.version,
-@@ -136,6 +144,22 @@ relocation {
+@@ -133,6 +141,22 @@ relocation {
}
}
@@ -115,10 +115,10 @@ index 218f5bafeed8551b55b91c7fccaf6935c8b631ca..f5d01bce4d5547b4aeca96b7962b2090
metrics.addCustomChart(new Metrics.DrilldownPie("java_version", () -> {
Map> map = new HashMap<>();
diff --git a/src/main/java/com/destroystokyo/paper/PaperConfig.java b/src/main/java/com/destroystokyo/paper/PaperConfig.java
-index 0277627e97b51e20470ccf578cee48470e06a34b..6a30338648214c98b05feb5a628dbdc6b2683ff9 100644
+index 2509a170b8ddd812ad5be49e5345ec5a3c0cf2b8..6cda37d340bfc6f76cbb3bdaa3ffb6d3cf90da9f 100644
--- a/src/main/java/com/destroystokyo/paper/PaperConfig.java
+++ b/src/main/java/com/destroystokyo/paper/PaperConfig.java
-@@ -202,16 +202,26 @@ public class PaperConfig {
+@@ -205,16 +205,26 @@ public class PaperConfig {
public static String timingsServerName;
private static void timings() {
boolean timings = getBoolean("timings.enabled", true);
@@ -146,32 +146,6 @@ index 0277627e97b51e20470ccf578cee48470e06a34b..6a30338648214c98b05feb5a628dbdc6
int timingHistoryInterval = getInt("timings.history-interval", 300);
int timingHistoryLength = getInt("timings.history-length", 3600);
timingsServerName = getString("timings.server-name", "Unknown Server");
-diff --git a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
-index c2d8294ffeff017a6ec9e7725b50eaef8eb75dfd..6b7006829dde81840bd305ee775d26c9f1ef24f7 100644
---- a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
-+++ b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
-@@ -268,6 +268,9 @@ public class PaperWorldConfig {
-
- public int softDespawnDistance;
- public int hardDespawnDistance;
-+ // Airplane start - separate squared values
-+ public int softDespawnDistanceSq;
-+ public int hardDespawnDistanceSq;
- private void despawnDistances() {
- softDespawnDistance = getInt("despawn-ranges.soft", 32); // 32^2 = 1024, Minecraft Default
- hardDespawnDistance = getInt("despawn-ranges.hard", 128); // 128^2 = 16384, Minecraft Default
-@@ -278,8 +281,9 @@ public class PaperWorldConfig {
-
- log("Living Entity Despawn Ranges: Soft: " + softDespawnDistance + " Hard: " + hardDespawnDistance);
-
-- softDespawnDistance = softDespawnDistance*softDespawnDistance;
-- hardDespawnDistance = hardDespawnDistance*hardDespawnDistance;
-+ softDespawnDistanceSq = softDespawnDistance*softDespawnDistance;
-+ hardDespawnDistanceSq = hardDespawnDistance*hardDespawnDistance;
-+ // Airplane end
- }
-
- public boolean keepSpawnInMemory;
diff --git a/src/main/java/gg/airplane/AirplaneCommand.java b/src/main/java/gg/airplane/AirplaneCommand.java
new file mode 100644
index 0000000000000000000000000000000000000000..89c89e633f14b5820147e734b1b7ad8cadfdce80
@@ -774,10 +748,10 @@ index 0000000000000000000000000000000000000000..f9a71ff3edd7e7b6cda680e5a156373b
+}
diff --git a/src/main/java/gg/airplane/entity/CollisionCache.java b/src/main/java/gg/airplane/entity/CollisionCache.java
new file mode 100644
-index 0000000000000000000000000000000000000000..87e162cc30da9346190c7daeb19cc74049b5377e
+index 0000000000000000000000000000000000000000..f67e19ad737a7a6b29e58aad59b1367574609efe
--- /dev/null
+++ b/src/main/java/gg/airplane/entity/CollisionCache.java
-@@ -0,0 +1,258 @@
+@@ -0,0 +1,263 @@
+package gg.airplane.entity;
+
+import io.papermc.paper.util.CollisionUtil;
@@ -794,7 +768,6 @@ index 0000000000000000000000000000000000000000..87e162cc30da9346190c7daeb19cc740
+import net.minecraft.world.level.chunk.LevelChunkSection;
+import net.minecraft.world.phys.AABB;
+import net.minecraft.world.phys.shapes.CollisionContext;
-+import net.minecraft.world.phys.shapes.EntityCollisionContext;
+import net.minecraft.world.phys.shapes.Shapes;
+import net.minecraft.world.phys.shapes.VoxelShape;
+import org.bukkit.craftbukkit.util.UnsafeList;
@@ -808,7 +781,8 @@ index 0000000000000000000000000000000000000000..87e162cc30da9346190c7daeb19cc740
+
+public class CollisionCache {
+
-+ private static record BlockEntry(int x, int y, int z, BlockState state){}
++ private static record BlockEntry(int x, int y, int z, BlockState state) {
++ }
+
+ @NotNull
+ private final Entity entity;
@@ -867,11 +841,12 @@ index 0000000000000000000000000000000000000000..87e162cc30da9346190c7daeb19cc740
+ if (checkOnly) {
+ for (int i = 0, length = this.blocks.size(); i < length; i++) {
+ BlockEntry blockEntry = this.blocks.unsafeGet(i);
++ mutablePos.set(blockEntry.x, blockEntry.y, blockEntry.z);
+ VoxelShape voxelshape2 = blockEntry.state.getCollisionShape(this.entity.level, mutablePos, collisionShape);
+ if (voxelshape2 != Shapes.empty()) {
+ VoxelShape voxelshape3 = voxelshape2.move((double) blockEntry.x, (double) blockEntry.y, (double) blockEntry.z);
+
-+ if (voxelshape3.intersects(aabb) && predicate.test(blockEntry.state, mutablePos.set(blockEntry.x, blockEntry.y, blockEntry.z))) {
++ if (voxelshape3.intersects(aabb) && predicate.test(blockEntry.state, mutablePos)) {
+ return true;
+ }
+ }
@@ -879,6 +854,7 @@ index 0000000000000000000000000000000000000000..87e162cc30da9346190c7daeb19cc740
+ } else {
+ for (int i = 0, length = this.blocks.size(); i < length; i++) {
+ BlockEntry blockEntry = this.blocks.unsafeGet(i);
++ mutablePos.set(blockEntry.x, blockEntry.y, blockEntry.z);
+ VoxelShape voxelshape2 = blockEntry.state.getCollisionShape(this.entity.level, mutablePos, collisionShape);
+
+ if (voxelshape2 != Shapes.empty()) {
@@ -1011,11 +987,14 @@ index 0000000000000000000000000000000000000000..87e162cc30da9346190c7daeb19cc740
+ collisionShape = CollisionContext.of(entity);
+ }
+ VoxelShape voxelshape2 = blockData.getCollisionShape(this.entity.level, mutablePos, collisionShape);
++
++ if (voxelshape2 != Shapes.empty() || blockData.getBlock() == Blocks.MOVING_PISTON) {
++ this.blocks.add(new BlockEntry(blockX, blockY, blockZ, blockData));
++ }
++
+ if (voxelshape2 != Shapes.empty()) {
+ VoxelShape voxelshape3 = voxelshape2.move((double) blockX, (double) blockY, (double) blockZ);
+
-+ this.blocks.add(new BlockEntry(blockX, blockY, blockZ, blockData));
-+
+ ret |= CollisionUtil.addBoxesToIfIntersects(voxelshape3, aabb, into);
+ }
+ }
@@ -2241,10 +2220,10 @@ index 505546d32eea4682452dbac02311433157f6a30e..5c7b9ad379f3c272e15648dd16f4df92
public static CompletableFuture> sequenceFailFast(List extends CompletableFuture extends V>> futures) {
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
-index 7636b0ae9031e06fd8b4a0c359a45a17e6e075de..49821f441886b4de2cac5b1b13981e2161992f98 100644
+index f274e40681d47a4ca421107c0d76c527279ce682..ff6ab10a1bc11ecc2d83255e51508ea70344b455 100644
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
-@@ -1726,7 +1726,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop tag, double d0) {
@@ -2634,7 +2613,7 @@ index 2ce32495758abf64eeeeeea1cdbf4904be77b697..e4e9d7286a91155b55915b9046704b08
double d1 = 0.0D;
boolean flag = this.isPushedByFluid();
boolean flag1 = false;
-@@ -3847,14 +3876,62 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, n
+@@ -3856,14 +3885,62 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, n
int k1 = 0;
BlockPos.MutableBlockPos blockposition_mutableblockposition = new BlockPos.MutableBlockPos();
@@ -2703,7 +2682,7 @@ index 2ce32495758abf64eeeeeea1cdbf4904be77b697..e4e9d7286a91155b55915b9046704b08
if (d2 >= axisalignedbb.minY) {
flag1 = true;
-@@ -3871,9 +3948,12 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, n
+@@ -3880,9 +3957,12 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, n
}
}
}
@@ -2729,7 +2708,7 @@ index 1c446dba5de89698397041ee38a2e1a00bec8a56..03371c99c34ba4b2ffde3f6da36f171b
public final String id;
diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java
-index cbdff14b26f67b5040c13659f9d64d9ec4c7eaed..71fefe3956c1e4458dd4b441f90902a3ed0cdf24 100644
+index 465dab588e770bf4d1e645e1f451a066f388014a..df12ba04df24e1c70c43e00283ea2a78ae2ca422 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;
@@ -2774,7 +2753,7 @@ index cbdff14b26f67b5040c13659f9d64d9ec4c7eaed..71fefe3956c1e4458dd4b441f90902a3
}
diff --git a/src/main/java/net/minecraft/world/entity/Mob.java b/src/main/java/net/minecraft/world/entity/Mob.java
-index 8a864238e154e2131834d013652746b7e7a78c97..6051fd771dd989f2903b854b6564252a847a74e3 100644
+index 55d07e70a67e08bab3a7a66076c980986736e5b8..b247d9dc2b2f5b4a6e87ca35e2a08f9be4e7a7b4 100644
--- a/src/main/java/net/minecraft/world/entity/Mob.java
+++ b/src/main/java/net/minecraft/world/entity/Mob.java
@@ -207,10 +207,10 @@ public abstract class Mob extends LivingEntity {
@@ -2790,26 +2769,6 @@ index 8a864238e154e2131834d013652746b7e7a78c97..6051fd771dd989f2903b854b6564252a
this.targetSelector.tick();
}
}
-@@ -801,16 +801,16 @@ public abstract class Mob extends LivingEntity {
- int i = this.getType().getCategory().getDespawnDistance();
- int j = i * i;
-
-- if (d0 > (double) level.paperConfig.hardDespawnDistance) { // CraftBukkit - remove isTypeNotPersistent() check // Paper - custom despawn distances
-+ if (d0 > (double) level.paperConfig.hardDespawnDistanceSq) { // CraftBukkit - remove isTypeNotPersistent() check // Paper - custom despawn distances // Airplane
- this.discard();
- }
-
- int k = this.getType().getCategory().getNoDespawnDistance();
- int l = k * k;
-
-- if (this.noActionTime > 600 && this.random.nextInt(800) == 0 && d0 > level.paperConfig.softDespawnDistance) { // CraftBukkit - remove isTypeNotPersistent() check // Paper - custom despawn distances
-+ if (this.noActionTime > 600 && this.random.nextInt(800) == 0 && d0 > level.paperConfig.softDespawnDistanceSq) { // CraftBukkit - remove isTypeNotPersistent() check // Paper - custom despawn distances // Airplane
- this.discard();
-- } else if (d0 < level.paperConfig.softDespawnDistance) { // Paper - custom despawn distances
-+ } else if (d0 < level.paperConfig.softDespawnDistanceSq) { // Paper - custom despawn distances // Airplane
- this.noActionTime = 0;
- }
- }
@@ -838,9 +838,11 @@ public abstract class Mob extends LivingEntity {
this.sensing.tick();
this.level.getProfiler().pop();
@@ -3023,7 +2982,7 @@ index 2b8725087fd3bfeca7162bda2783fdacd13a8390..16adf07774d568852b289ae8507779dd
this.level.getProfiler().pop();
this.level.getProfiler().push("axolotlActivityUpdate");
diff --git a/src/main/java/net/minecraft/world/entity/animal/goat/Goat.java b/src/main/java/net/minecraft/world/entity/animal/goat/Goat.java
-index 32d0387b6c66462ca965add78a562dec3c4b95a9..82a363c5141cd00eec9b7e03e7ac6522b9b3c527 100644
+index c7e24da48aaff9fbd1a8272483231744326e3a8e..5eceec2802a14b59ed60c600622d1f76ff6a77fa 100644
--- a/src/main/java/net/minecraft/world/entity/animal/goat/Goat.java
+++ b/src/main/java/net/minecraft/world/entity/animal/goat/Goat.java
@@ -144,9 +144,11 @@ public class Goat extends Animal {
@@ -3560,7 +3519,7 @@ index f936e9f9a9fa655fa997d6862b5ed54c04169d35..24d772c18d5a448154909e4a51964ba2
}
diff --git a/src/main/java/net/minecraft/world/level/NaturalSpawner.java b/src/main/java/net/minecraft/world/level/NaturalSpawner.java
-index bacd75f67f783f49208a74501cc7e6e7485010a4..dc613142603fca4cf5c8e47c084e1439d0450424 100644
+index d63d89960839b506e240349043ab77c4d81ca71a..a0db30970adebb244ff41913e8ec1df1eb472a4d 100644
--- a/src/main/java/net/minecraft/world/level/NaturalSpawner.java
+++ b/src/main/java/net/minecraft/world/level/NaturalSpawner.java
@@ -418,12 +418,12 @@ public final class NaturalSpawner {
@@ -3944,58 +3903,6 @@ index 72e3264dc74822f746fb84fec0be400047d2d9f5..831e2dbe530daf63ac9e681a92af2740
}
});
-diff --git a/src/main/java/net/minecraft/world/level/chunk/PalettedContainer.java b/src/main/java/net/minecraft/world/level/chunk/PalettedContainer.java
-index c9e942669458668a184aaec3bc0a5509dd6ab5f0..178e56ffc87ea2beb4d84d1f278f4acf90102379 100644
---- a/src/main/java/net/minecraft/world/level/chunk/PalettedContainer.java
-+++ b/src/main/java/net/minecraft/world/level/chunk/PalettedContainer.java
-@@ -263,13 +263,17 @@ public class PalettedContainer implements PaletteResize {
-
- }
-
-+ // Airplane start - allow reusing int array
- public synchronized void write(CompoundTag nbt, String paletteKey, String dataKey) { // Paper - synchronize
-+ this.write(nbt, paletteKey, dataKey, new int[4096]);
-+ }
-+ public synchronized void write(CompoundTag nbt, String paletteKey, String dataKey, int[] is) { // Paper - synchronize // Airplane end
- try {
- this.acquire();
- HashMapPalette hashMapPalette = new HashMapPalette<>(this.registry, this.bits, this.dummyPaletteResize, this.reader, this.writer);
- T object = this.defaultValue;
- int i = hashMapPalette.idFor(this.defaultValue);
-- int[] is = new int[4096];
-+ //int[] is = new int[4096]; // Airplane
-
- for(int j = 0; j < 4096; ++j) {
- T object2 = this.get(j);
-diff --git a/src/main/java/net/minecraft/world/level/chunk/storage/ChunkSerializer.java b/src/main/java/net/minecraft/world/level/chunk/storage/ChunkSerializer.java
-index 7921ee2786d0d6a60d43786b20efc03a0f9178e3..9ea4229f58679c6c833762fc6a50471445ff0b9d 100644
---- a/src/main/java/net/minecraft/world/level/chunk/storage/ChunkSerializer.java
-+++ b/src/main/java/net/minecraft/world/level/chunk/storage/ChunkSerializer.java
-@@ -500,6 +500,7 @@ public class ChunkSerializer {
- return new AsyncSaveData(blockLight, skyLight, blockTickListSerialized, fluidTickListSerialized, blockEntitiesSerialized, world.getGameTime());
- }
-
-+ private static final ThreadLocal paletteArray = ThreadLocal.withInitial(() -> new int[4096]); // Airplane
- public static CompoundTag write(ServerLevel world, ChunkAccess chunk) {
- return saveChunk(world, chunk, null);
- }
-@@ -533,6 +534,7 @@ public class ChunkSerializer {
- ThreadedLevelLightEngine lightenginethreaded = world.getChunkSource().getLightEngine();
- boolean flag = chunk.isLightCorrect();
-
-+ int[] is = paletteArray.get(); // Airplane - use cached
- for (int i = lightenginethreaded.getMinLightSection(); i < lightenginethreaded.getMaxLightSection(); ++i) {
- int finalI = i; // CraftBukkit - decompile errors
- LevelChunkSection chunksection = (LevelChunkSection) Arrays.stream(achunksection).filter((chunksection1) -> {
-@@ -547,7 +549,7 @@ public class ChunkSerializer {
-
- nbttagcompound2.putByte("Y", (byte) (i & 255));
- if (chunksection != LevelChunk.EMPTY_SECTION) {
-- chunksection.getStates().write(nbttagcompound2, "Palette", "BlockStates");
-+ chunksection.getStates().write(nbttagcompound2, "Palette", "BlockStates", is); // Airplane - reuse array
- }
-
- // Paper start - replace light engine
diff --git a/src/main/java/net/minecraft/world/level/entity/LevelEntityGetter.java b/src/main/java/net/minecraft/world/level/entity/LevelEntityGetter.java
index da1ad0b2679e392ed81b50c15f012c63cb5c939e..81e83022421e2c311c32f6e6007cfc0c82efb822 100644
--- a/src/main/java/net/minecraft/world/level/entity/LevelEntityGetter.java
@@ -4023,10 +3930,10 @@ index 3b13f6ea36a3bfecabe09221eb5c48dddab119db..c02b9104c0cc1a7319cca29d5e32a5c2
@Override
public T get(int id) {
diff --git a/src/main/java/net/minecraft/world/level/entity/PersistentEntitySectionManager.java b/src/main/java/net/minecraft/world/level/entity/PersistentEntitySectionManager.java
-index 9681e397588a8abc4150b991e546fa79b5635c87..646385d0bef31f43a7273fa78ec696dfc761093c 100644
+index 8cb246863e06c5b95ba1442e2ec47095026c4f39..5a72ce41cc57578498c4a072a1eb04ac28958afe 100644
--- a/src/main/java/net/minecraft/world/level/entity/PersistentEntitySectionManager.java
+++ b/src/main/java/net/minecraft/world/level/entity/PersistentEntitySectionManager.java
-@@ -606,6 +606,12 @@ public class PersistentEntitySectionManager implements A
+@@ -627,6 +627,12 @@ public class PersistentEntitySectionManager implements A
PersistentEntitySectionManager.this.knownUuids.remove(this.entity.getUUID());
this.entity.setLevelCallback(PersistentEntitySectionManager.Callback.NULL);
PersistentEntitySectionManager.this.removeSectionIfEmpty(this.currentSectionKey, this.currentSection);
@@ -4251,7 +4158,7 @@ index fcb7bd9f3b6b6ada0f2e5692bce32ab76b8798a7..61c2096f2c034dbc3ad33b193b058c7d
}
}
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
-index cfbde4c1220b0d6081a3e4ad2375e0d7bfb2ef40..ae2c4388eddef529fba5d5eae354ee15c6e36c9d 100644
+index 99a94898316b0601f55b333c15a9926eae24f8a2..c3a256d0ccb9fb44a5a1f9ffa2d48542ef4e857b 100644
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
@@ -251,7 +251,7 @@ import javax.annotation.Nullable; // Paper
@@ -4325,7 +4232,7 @@ index 909b2c98e7a9117d2f737245e4661792ffafb744..9da898c6f44832b4421b8c2745e3121b
@Override
diff --git a/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java b/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java
-index dcaa189c17dd928d7a19e820ec2ff521e7243b7a..25bb190bf7e08539a3590ee35a01f1d816e48d83 100644
+index 424f3a9a645d57ad43c52932f5b388b5f146b9f0..d68872771c5d29afc19bf7cd74e970c714267b87 100644
--- a/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java
+++ b/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java
@@ -394,7 +394,7 @@ public final class CraftMagicNumbers implements UnsafeValues {
diff --git a/patches/server/0002-Change-Airplane-defaults-closer-to-vanilla.patch b/patches/server/0002-Change-Airplane-defaults-closer-to-vanilla.patch
index 12b2ec104..bec62909f 100644
--- a/patches/server/0002-Change-Airplane-defaults-closer-to-vanilla.patch
+++ b/patches/server/0002-Change-Airplane-defaults-closer-to-vanilla.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Change Airplane defaults closer to vanilla
diff --git a/src/main/java/com/destroystokyo/paper/PaperConfig.java b/src/main/java/com/destroystokyo/paper/PaperConfig.java
-index 25f1656a47037b0245cdd32e475b41e64dbad1de..c6dd2567ac88c7bfff0a23201752fa6561f2565b 100644
+index 6cda37d340bfc6f76cbb3bdaa3ffb6d3cf90da9f..3ed3f8124ca302b0527788d80fd5a4a87d206534 100644
--- a/src/main/java/com/destroystokyo/paper/PaperConfig.java
+++ b/src/main/java/com/destroystokyo/paper/PaperConfig.java
-@@ -202,7 +202,7 @@ public class PaperConfig {
+@@ -205,7 +205,7 @@ public class PaperConfig {
public static String timingsServerName;
private static void timings() {
boolean timings = getBoolean("timings.enabled", true);
@@ -17,7 +17,7 @@ index 25f1656a47037b0245cdd32e475b41e64dbad1de..c6dd2567ac88c7bfff0a23201752fa65
boolean reallyEnableTimings = getBoolean("timings.really-enabled", false);
if (timings && !reallyEnableTimings) {
Bukkit.getLogger().log(Level.WARNING, "[Airplane] To improve performance, timings have been disabled by default");
-@@ -210,7 +210,7 @@ public class PaperConfig {
+@@ -213,7 +213,7 @@ public class PaperConfig {
Bukkit.getLogger().log(Level.WARNING, "[Airplane] If you would like to disable this message, either set timings.really-enabled to true or timings.enabled to false.");
}
timings = reallyEnableTimings;
diff --git a/patches/server/0003-Rebrand.patch b/patches/server/0003-Rebrand.patch
index adf268d76..3c750fda7 100644
--- a/patches/server/0003-Rebrand.patch
+++ b/patches/server/0003-Rebrand.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Rebrand
diff --git a/build.gradle.kts b/build.gradle.kts
-index 0bd09bd56968660437a94ec078a13ee78339fa0e..dc6c416bb2145bb684e1dedda626263d423cba67 100644
+index fd3528be3d90733e826bcbeae967b95cedf92dfe..7168672c9d38f0f30ee8a683df7f60d686bada23 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
-@@ -25,7 +25,7 @@ repositories {
+@@ -22,7 +22,7 @@ repositories {
}
dependencies {
@@ -16,17 +16,17 @@ index 0bd09bd56968660437a94ec078a13ee78339fa0e..dc6c416bb2145bb684e1dedda626263d
+ implementation(project(":Purpur-API")) // Airplane // Purpur
implementation("io.papermc.paper:paper-mojangapi:1.17.1-R0.1-SNAPSHOT") // Airplane
// Paper start
- implementation("org.jline:jline-terminal-jansi:3.12.1")
-@@ -57,6 +57,8 @@ dependencies {
+ implementation("org.jline:jline-terminal-jansi:3.21.0")
+@@ -53,6 +53,8 @@ dependencies {
+ runtimeOnly("org.apache.maven.resolver:maven-resolver-transport-http:1.7.0")
- implementation("co.aikar:cleaner:1.0-SNAPSHOT") // Paper
implementation("io.netty:netty-all:4.1.65.Final") // Paper
+ implementation("cat.inspiracio:rhino-js-engine:1.7.7.1") // Purpur
+ implementation("dev.omega24:upnp4j:1.0") // Purpur
- implementation("org.quiltmc:tiny-mappings-parser:0.3.0") // Paper - needed to read mappings for stacktrace deobfuscation
+ implementation("net.fabricmc:mapping-io:0.3.0") // Paper - needed to read mappings for stacktrace deobfuscation
implementation("com.velocitypowered:velocity-native:1.1.0-SNAPSHOT") // Paper
-@@ -85,8 +87,7 @@ tasks.jar {
+@@ -81,8 +83,7 @@ tasks.jar {
attributes(
"Main-Class" to "org.bukkit.craftbukkit.Main",
"Implementation-Title" to "CraftBukkit",
@@ -36,7 +36,7 @@ index 0bd09bd56968660437a94ec078a13ee78339fa0e..dc6c416bb2145bb684e1dedda626263d
"Implementation-Vendor" to date, // Paper
"Specification-Title" to "Bukkit",
"Specification-Version" to project.version,
-@@ -228,7 +229,7 @@ tasks.test {
+@@ -225,7 +226,7 @@ tasks.test {
fun TaskContainer.registerRunTask(
name: String, block: JavaExec.() -> Unit
): TaskProvider = register(name) {
@@ -112,10 +112,10 @@ index e0b1f0671d16ddddcb6725acd25a1d1d69e42701..8c3c68465197fafc14849dc38a572e30
.completer(new ConsoleCommandCompleter(this.server))
.option(LineReader.Option.COMPLETE_IN_WORD, true);
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
-index 49821f441886b4de2cac5b1b13981e2161992f98..bb0f7c631b4889e95a87214fbc0537a0e420d87f 100644
+index ff6ab10a1bc11ecc2d83255e51508ea70344b455..0834a1247fead6600ad92b782e09a3622c2e576f 100644
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
-@@ -1726,7 +1726,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop {
Map> map = new HashMap<>();
-diff --git a/src/main/java/com/destroystokyo/paper/PaperConfig.java b/src/main/java/com/destroystokyo/paper/PaperConfig.java
-index 675d1d36ece42c1afafb497eae677e8f2546dfc2..a40bdc726fba1640a0d5e6950e964852c4206313 100644
---- a/src/main/java/com/destroystokyo/paper/PaperConfig.java
-+++ b/src/main/java/com/destroystokyo/paper/PaperConfig.java
-@@ -118,6 +118,11 @@ public class PaperConfig {
- }
- }
-
-+ // Purpur start - public save method for config migration
-+ saveConfig();
-+ }
-+ public static void saveConfig() {
-+ // Purpur end
- try {
- config.save(CONFIG_FILE);
- } catch (IOException ex) {
diff --git a/src/main/java/net/minecraft/commands/CommandSourceStack.java b/src/main/java/net/minecraft/commands/CommandSourceStack.java
index 71e29d29ed5c2d61832e2f124967bb223708406f..224669ecaad37ac2f16900700eea40ef52d938a5 100644
--- a/src/main/java/net/minecraft/commands/CommandSourceStack.java
@@ -460,7 +444,7 @@ index 0000000000000000000000000000000000000000..6e7f56fe2b78d7a09d5d130f2c88338f
+ }
+}
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
-index f8bdba7d03d93d309b687261a33bcc76287a184b..a98661c72a1b2b5ef2ff17be6639559e113176dd 100644
+index 20111504d88cd10ce68a6b9bfffe5d976b0feb33..665314f2707a6b12a5c2d932681844e6928cd233 100644
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
@@ -924,6 +924,7 @@ public final class CraftServer implements Server {
diff --git a/patches/server/0005-Purpur-client-support.patch b/patches/server/0005-Purpur-client-support.patch
index 15f9bf94a..6770717da 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 11f46c1b8f4c8414e0667d1873542c17d6e01f2a..54dc872b1d448c8895313b216d6cd1c9836a5160 100644
+index 78fda0c982810b8b881a87099f355247566e513a..88b141e2d5518e5cbe43a48e209d85d4a51319e8 100644
--- a/src/main/java/net/minecraft/server/level/ServerPlayer.java
+++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java
@@ -258,6 +258,7 @@ public class ServerPlayer extends Player {
@@ -17,7 +17,7 @@ index 11f46c1b8f4c8414e0667d1873542c17d6e01f2a..54dc872b1d448c8895313b216d6cd1c9
public double lastEntitySpawnRadiusSquared; // Paper - optimise isOutsideRange, this field is in blocks
public final com.destroystokyo.paper.util.misc.PooledLinkedHashSets.PooledObjectLinkedOpenHashSet cachedSingleHashSet; // Paper
diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
-index 029c21d9416520469548293f9a2ec0c056507d05..f6f12392e119a4742591d8043a0a51fc35a719c5 100644
+index 744f7b717f14a070d5a4be0b35e7f422694fb407..eaffd394a6207d424882e49f07fb989e201b35d7 100644
--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
@@ -3119,6 +3119,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Ser
@@ -43,10 +43,10 @@ index 029c21d9416520469548293f9a2ec0c056507d05..f6f12392e119a4742591d8043a0a51fc
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 c64911651f3d736c83cc83996de04920b091cc57..f497d54966a985d6877b3cd6e0ad5f86e20a345d 100644
+index 4ff4143f3a7cd89ef92f4b8882fa3e5addfe0f06..614efd4204eb0cb712964c71566ad7e2c609c439 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
-@@ -2585,4 +2585,11 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
+@@ -2577,4 +2577,11 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
return this.spigot;
}
// Spigot end
diff --git a/patches/server/0006-Component-related-conveniences.patch b/patches/server/0006-Component-related-conveniences.patch
index fbf58a2b6..f29ad4fc6 100644
--- a/patches/server/0006-Component-related-conveniences.patch
+++ b/patches/server/0006-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 54dc872b1d448c8895313b216d6cd1c9836a5160..c1091ab7069fa3dd934409da23d404a7747b1a11 100644
+index 88b141e2d5518e5cbe43a48e209d85d4a51319e8..6c241da9f2711aeade0f3863e4e2bab1f6b242af 100644
--- a/src/main/java/net/minecraft/server/level/ServerPlayer.java
+++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java
@@ -1678,6 +1678,26 @@ public class ServerPlayer extends Player {
@@ -103,10 +103,10 @@ index eaa005c1c9b4386bcdbe1d6eb28c3eca7635066c..b0ff18e420d064db81f4e8f3a383e1d2
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 d35cdcf2ee7568ad5caf52588db54e9c6f607d4b..7a954d7495636a27149a55b58436183e18e028dd 100644
+index b938d8d1e13a68b3895fcec3523daecbc3c6628e..7d17bfd793a53cb44e319ef980c1d9d5b711cd36 100644
--- a/src/main/java/net/minecraft/world/entity/Entity.java
+++ b/src/main/java/net/minecraft/world/entity/Entity.java
-@@ -3620,6 +3620,34 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, n
+@@ -3629,6 +3629,34 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, n
return SlotAccess.NULL;
}
diff --git a/patches/server/0007-Ridables.patch b/patches/server/0007-Ridables.patch
index 4df45173d..bcb47134b 100644
--- a/patches/server/0007-Ridables.patch
+++ b/patches/server/0007-Ridables.patch
@@ -22,10 +22,10 @@ index 0cc0242d981586413bcc349df6e6fd3bc09710f1..ae394b3d8b8a157d345e102f5997058d
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 bb0f7c631b4889e95a87214fbc0537a0e420d87f..0a076780868ed1bd15c36dd88de85a0d5de87c7a 100644
+index 0834a1247fead6600ad92b782e09a3622c2e576f..cba432eba35ab42d91eb8f498fff2adff76d11f7 100644
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
-@@ -1604,6 +1604,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop 0; // Paper
worldserver.hasEntityMoveEvent = io.papermc.paper.event.entity.EntityMoveEvent.getHandlerList().getRegisteredListeners().length > 0; // Paper
@@ -34,7 +34,7 @@ index bb0f7c631b4889e95a87214fbc0537a0e420d87f..0a076780868ed1bd15c36dd88de85a0d
this.profiler.push(() -> {
diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java
-index ce146c771b8e38eb24e9372058f238920ec88882..1f10746e79373c269a904d23046003af6c3f6352 100644
+index 1ae7a10df7460f223413c38ac6bd85dba15fb347..2a7e46b4f65dd4d90dbfa6fdf608b5496fa743c7 100644
--- a/src/main/java/net/minecraft/server/level/ServerLevel.java
+++ b/src/main/java/net/minecraft/server/level/ServerLevel.java
@@ -200,6 +200,7 @@ public class ServerLevel extends Level implements WorldGenLevel {
@@ -46,7 +46,7 @@ index ce146c771b8e38eb24e9372058f238920ec88882..1f10746e79373c269a904d23046003af
return new Throwable(entity + " Added to world at " + new java.util.Date());
}
diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java
-index c1091ab7069fa3dd934409da23d404a7747b1a11..0cd8e3b3af0dc9c8445672ea86cf5113dd51d3e8 100644
+index 6c241da9f2711aeade0f3863e4e2bab1f6b242af..6c7628bb6f7f46555650195b19318c7f338825ae 100644
--- a/src/main/java/net/minecraft/server/level/ServerPlayer.java
+++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java
@@ -664,6 +664,15 @@ public class ServerPlayer extends Player {
@@ -73,7 +73,7 @@ index c1091ab7069fa3dd934409da23d404a7747b1a11..0cd8e3b3af0dc9c8445672ea86cf5113
+
}
diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
-index f6f12392e119a4742591d8043a0a51fc35a719c5..94fa47af7f3fe98cac637190e533102c94499268 100644
+index eaffd394a6207d424882e49f07fb989e201b35d7..11c29157ec68c50ad98f502a41b442657a6f9242 100644
--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
@@ -2426,6 +2426,8 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Ser
@@ -86,7 +86,7 @@ index f6f12392e119a4742591d8043a0a51fc35a719c5..94fa47af7f3fe98cac637190e533102c
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 7a954d7495636a27149a55b58436183e18e028dd..643f0c878352fd205f928aaa083cde59c911f926 100644
+index 7d17bfd793a53cb44e319ef980c1d9d5b711cd36..141a5c6e78b33a6e99d18d98982d9f7747768263 100644
--- a/src/main/java/net/minecraft/world/entity/Entity.java
+++ b/src/main/java/net/minecraft/world/entity/Entity.java
@@ -230,7 +230,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, n
@@ -107,7 +107,7 @@ index 7a954d7495636a27149a55b58436183e18e028dd..643f0c878352fd205f928aaa083cde59
private float eyeHeight;
public boolean isInPowderSnow;
public boolean wasInPowderSnow;
-@@ -2637,6 +2637,12 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, n
+@@ -2646,6 +2646,12 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, n
this.passengers = ImmutableList.copyOf(list);
}
@@ -120,7 +120,7 @@ index 7a954d7495636a27149a55b58436183e18e028dd..643f0c878352fd205f928aaa083cde59
}
return true; // CraftBukkit
}
-@@ -2677,6 +2683,14 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, n
+@@ -2686,6 +2692,14 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, n
return false;
}
// Spigot end
@@ -135,7 +135,7 @@ index 7a954d7495636a27149a55b58436183e18e028dd..643f0c878352fd205f928aaa083cde59
if (this.passengers.size() == 1 && this.passengers.get(0) == entity) {
this.passengers = ImmutableList.of();
} else {
-@@ -4336,4 +4350,41 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, n
+@@ -4345,4 +4359,41 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, n
return ((ServerChunkCache) level.getChunkSource()).isPositionTicking(this);
}
// Paper end
@@ -201,7 +201,7 @@ index 94f7f8238c01d203d28640c56e35deab2bf17bbc..f0c30ab5e32e78850d402aa4bc7d4266
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 71fefe3956c1e4458dd4b441f90902a3ed0cdf24..15421740e66f61a818348f57f0d68db69d3577ce 100644
+index df12ba04df24e1c70c43e00283ea2a78ae2ca422..48e53c2aacb462556c5496af8155337519bde8f6 100644
--- a/src/main/java/net/minecraft/world/entity/LivingEntity.java
+++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java
@@ -219,9 +219,9 @@ public abstract class LivingEntity extends Entity {
@@ -262,7 +262,7 @@ index 71fefe3956c1e4458dd4b441f90902a3ed0cdf24..15421740e66f61a818348f57f0d68db6
// Paper end
if (!this.level.isClientSide && this.isSensitiveToWater() && this.isInWaterRainOrBubble()) {
diff --git a/src/main/java/net/minecraft/world/entity/Mob.java b/src/main/java/net/minecraft/world/entity/Mob.java
-index 6051fd771dd989f2903b854b6564252a847a74e3..6106274009fcd8b43373e2fa9080183d6f6e36b3 100644
+index b247d9dc2b2f5b4a6e87ca35e2a08f9be4e7a7b4..50363ad00da106a70a53678dd35aad6cb7ceabd2 100644
--- a/src/main/java/net/minecraft/world/entity/Mob.java
+++ b/src/main/java/net/minecraft/world/entity/Mob.java
@@ -140,6 +140,8 @@ public abstract class Mob extends LivingEntity {
@@ -1433,7 +1433,7 @@ index ae21d260b2d4673eb4aa56a82e1043d20507adb2..3950dd170edee24f4a2effc1946e17b3
this.goalSelector.addGoal(2, new SitWhenOrderedToGoal(this));
this.goalSelector.addGoal(2, new FollowOwnerGoal(this, 1.0D, 5.0F, 1.0F, true));
diff --git a/src/main/java/net/minecraft/world/entity/animal/Pig.java b/src/main/java/net/minecraft/world/entity/animal/Pig.java
-index 53eaafad559cd6413bb1e10d07374da0ab907ec6..2afacf7a5d15f821e42d98f542dae41c025386d3 100644
+index e4d811025a000f6d12ab8587de293e929c8fd970..812d188cea9059f0ce5dd25b2649f30a5dfcea85 100644
--- a/src/main/java/net/minecraft/world/entity/animal/Pig.java
+++ b/src/main/java/net/minecraft/world/entity/animal/Pig.java
@@ -65,9 +65,22 @@ public class Pig extends Animal implements ItemSteerable, Saddleable {
@@ -2075,7 +2075,7 @@ index 16adf07774d568852b289ae8507779dd78110fc3..a2e0d4653d1a1905d58c684368edf6ce
}
diff --git a/src/main/java/net/minecraft/world/entity/animal/goat/Goat.java b/src/main/java/net/minecraft/world/entity/animal/goat/Goat.java
-index 82a363c5141cd00eec9b7e03e7ac6522b9b3c527..86e022ef4e3f198e3d36c24ed7179cfe3d9e79a0 100644
+index 5eceec2802a14b59ed60c600622d1f76ff6a77fa..9e581e4df521e8fea5a438e9df79c435224c9418 100644
--- a/src/main/java/net/minecraft/world/entity/animal/goat/Goat.java
+++ b/src/main/java/net/minecraft/world/entity/animal/goat/Goat.java
@@ -72,6 +72,18 @@ public class Goat extends Animal {
@@ -2914,7 +2914,7 @@ index bbca035b89c2334e65abc46dd76234c833ac222d..9f3c6d6a33fa59cad7ffa40d63b14001
}
// Paper end
diff --git a/src/main/java/net/minecraft/world/entity/monster/Drowned.java b/src/main/java/net/minecraft/world/entity/monster/Drowned.java
-index 8a9a9bfa95db08d063a6409f2e4cf2aa26ec3b0b..071c77039371688180a189f7715f3d0b62f2287a 100644
+index 275275f4f167522126dc1dc6128716c87f71a4d9..defcc32e6b16ca7672fc01dea4738af33088c207 100644
--- a/src/main/java/net/minecraft/world/entity/monster/Drowned.java
+++ b/src/main/java/net/minecraft/world/entity/monster/Drowned.java
@@ -69,6 +69,18 @@ public class Drowned extends Zombie implements RangedAttackMob {
@@ -3716,7 +3716,7 @@ index aec7dd2df77efeaf65d9fe08adc668030dfe08e2..44d8ef55d47ff63589e6b47210f460a0
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 116709ba2b298268ac806e6e45f2e910ca600706..8bfcfbae5046e3089b85194cfb1fe1a57d285647 100644
+index 1eeaf0cc9b00afd54f38f9cb50404ec9f9ba51f8..909a7bffcd0d7432f0714417c286fb75b6b951b9 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 {
@@ -4211,7 +4211,7 @@ index 0ee254552dadd40db7b6427df8b5b34caa90379c..175ff8a67b4ac28efef112bd75508a05
this.level.getProfiler().pop();
this.updateActivity();
diff --git a/src/main/java/net/minecraft/world/entity/monster/Zombie.java b/src/main/java/net/minecraft/world/entity/monster/Zombie.java
-index 0235cf791a3a5b0e5dc515b405c0263438ffaf7e..9d911c5e217207e3030f9dec2daef64ae5d09e7f 100644
+index 8da494792786fd80be50efc4cbb56caeae18d004..e752c877bdeef46753aab92f6484c45bc3e31ed4 100644
--- a/src/main/java/net/minecraft/world/entity/monster/Zombie.java
+++ b/src/main/java/net/minecraft/world/entity/monster/Zombie.java
@@ -107,11 +107,25 @@ public class Zombie extends Monster {
@@ -5717,11 +5717,11 @@ index 0000000000000000000000000000000000000000..8eefb7b7eb33aecf48ac206d3f0139e0
+ }
+}
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java
-index 2712aa554383a3b2b742c945e2f0be7ee96eea69..f8811514c155f743f6e93c9a88721903fdb1bddd 100644
+index 0bd800e1aeda87689a6c56ee6fadda381c74a4ff..ac89af911596955ac87882069b7010b66ed05adf 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java
-@@ -1264,4 +1264,27 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity {
- return getHandle().isTicking();
+@@ -1287,4 +1287,27 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity {
+ return !entity.valid && entity.level.addEntity(entity, reason);
}
// Paper end
+
diff --git a/patches/server/0009-Timings-stuff.patch b/patches/server/0009-Timings-stuff.patch
index 6c1b56a8c..fea523ed8 100644
--- a/patches/server/0009-Timings-stuff.patch
+++ b/patches/server/0009-Timings-stuff.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] Timings stuff
diff --git a/src/main/java/co/aikar/timings/TimingsExport.java b/src/main/java/co/aikar/timings/TimingsExport.java
-index da6a5b1b2f5203a0fab8e4fccd727951df7c9c9a..bca3bc0b8687940dff181bab6a5a2a3c11423358 100644
+index 6e8001c7ff6497c9e5c274a5fe85cc204f3ba4c5..c5803537b23d44bad5f447bd2f98d54226d3e80e 100644
--- a/src/main/java/co/aikar/timings/TimingsExport.java
+++ b/src/main/java/co/aikar/timings/TimingsExport.java
@@ -226,10 +226,14 @@ public class TimingsExport extends Thread {
@@ -46,10 +46,10 @@ index da6a5b1b2f5203a0fab8e4fccd727951df7c9c9a..bca3bc0b8687940dff181bab6a5a2a3c
JSONObject object = new JSONObject();
diff --git a/src/main/java/com/destroystokyo/paper/PaperConfig.java b/src/main/java/com/destroystokyo/paper/PaperConfig.java
-index 3781e7c23347a5860c448a94bd01cb90979d9d4a..977363508e090ede5191f7dbc4c258bfb0a9c911 100644
+index 3ed3f8124ca302b0527788d80fd5a4a87d206534..f5ec3cd3823b363c7213f2c9fc3d85b324fce09d 100644
--- a/src/main/java/com/destroystokyo/paper/PaperConfig.java
+++ b/src/main/java/com/destroystokyo/paper/PaperConfig.java
-@@ -217,7 +217,7 @@ public class PaperConfig {
+@@ -215,7 +215,7 @@ public class PaperConfig {
timings = reallyEnableTimings;
// Airplane end */ // Purpur end
boolean verboseTimings = getBoolean("timings.verbose", true);
@@ -59,7 +59,7 @@ index 3781e7c23347a5860c448a94bd01cb90979d9d4a..977363508e090ede5191f7dbc4c258bf
TimingsManager.url += "/";
}
diff --git a/src/main/java/net/pl3x/purpur/PurpurConfig.java b/src/main/java/net/pl3x/purpur/PurpurConfig.java
-index 41134227b3902f6e008f1db7b0803a1f81e7fd6e..b634d1a67b741feadf3f8fda5439a501fef3d132 100644
+index f5cdf3338411650add4a2eb41e0412182b1f6fdf..8747593597ed270400ef3d3f6b141a0fb370f1b4 100644
--- a/src/main/java/net/pl3x/purpur/PurpurConfig.java
+++ b/src/main/java/net/pl3x/purpur/PurpurConfig.java
@@ -161,4 +161,17 @@ public class PurpurConfig {
diff --git a/patches/server/0012-AFK-API.patch b/patches/server/0012-AFK-API.patch
index 046e60a27..b1f591625 100644
--- a/patches/server/0012-AFK-API.patch
+++ b/patches/server/0012-AFK-API.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] AFK API
diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java
-index 0cd8e3b3af0dc9c8445672ea86cf5113dd51d3e8..a414d11f9bdf1d3432bcbecb6574f8fafd4478bb 100644
+index 6c7628bb6f7f46555650195b19318c7f338825ae..f819cc4f5e6e2d5c820a840fa76226ea381b96d6 100644
--- a/src/main/java/net/minecraft/server/level/ServerPlayer.java
+++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java
@@ -1953,8 +1953,58 @@ public class ServerPlayer extends Player {
@@ -68,7 +68,7 @@ index 0cd8e3b3af0dc9c8445672ea86cf5113dd51d3e8..a414d11f9bdf1d3432bcbecb6574f8fa
return this.stats;
}
diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
-index 94fa47af7f3fe98cac637190e533102c94499268..d12d2db33d26dc9ea582f0eaa9930f25f8c2744b 100644
+index 11c29157ec68c50ad98f502a41b442657a6f9242..46e9cb07fe046bb80a0ef96c33f1c81de989b3df 100644
--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
@@ -294,6 +294,20 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Ser
@@ -263,7 +263,7 @@ index 20215510857b8e49ea0c93d35eddfbad7cd355b0..996171e7271e62e72c0b2b213c21caf5
public boolean untamedTamablesAreRidable = true;
public boolean useNightVisionWhenRiding = false;
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
-index f497d54966a985d6877b3cd6e0ad5f86e20a345d..e28ad069f6f4aef78810171ef56448497849c6bc 100644
+index 614efd4204eb0cb712964c71566ad7e2c609c439..bd68d2509fe08955eaab08a73924d6d58064c2b7 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
@@ -424,10 +424,15 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
@@ -283,7 +283,7 @@ index f497d54966a985d6877b3cd6e0ad5f86e20a345d..e28ad069f6f4aef78810171ef5644849
for (ServerPlayer player : (List) server.getHandle().players) {
if (player.getBukkitEntity().canSee(this)) {
player.connection.send(new ClientboundPlayerInfoPacket(ClientboundPlayerInfoPacket.Action.UPDATE_DISPLAY_NAME, this.getHandle()));
-@@ -2591,5 +2596,20 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
+@@ -2583,5 +2588,20 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
public boolean usesPurpurClient() {
return getHandle().purpurClient;
}
diff --git a/patches/server/0014-Configurable-server-mod-name.patch b/patches/server/0014-Configurable-server-mod-name.patch
index db7be2490..f2b34e6fe 100644
--- a/patches/server/0014-Configurable-server-mod-name.patch
+++ b/patches/server/0014-Configurable-server-mod-name.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Configurable server mod name
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
-index 0a076780868ed1bd15c36dd88de85a0d5de87c7a..18df1cd4405f73b37c577b3b4495af06ec0de372 100644
+index cba432eba35ab42d91eb8f498fff2adff76d11f7..7c73c149574f40e8474056fb3a6604c29e84db8e 100644
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
-@@ -1727,7 +1727,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop public
- protected final boolean hasCollision;
+ public final boolean hasCollision;
protected final float explosionResistance;
protected final boolean isRandomlyTicking;
diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
diff --git a/patches/server/0055-Configurable-TPS-Catchup.patch b/patches/server/0055-Configurable-TPS-Catchup.patch
index ca0893f04..b656913ea 100644
--- a/patches/server/0055-Configurable-TPS-Catchup.patch
+++ b/patches/server/0055-Configurable-TPS-Catchup.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Configurable TPS Catchup
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
-index 819c942d3663b9486fb11c13e572285d8761f4e0..efa6043ebec5655b4a0a0e6d96bc07b75aca461a 100644
+index 1d9aa96588faff8e79c0a8fec891c5c1af27f4e9..c287e069e325ab61f251494150059ef982577d00 100644
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
-@@ -1281,7 +1281,13 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop {
diff --git a/patches/server/0069-Add-5-second-tps-average-in-tps.patch b/patches/server/0069-Add-5-second-tps-average-in-tps.patch
index a137283f1..535bc5a6f 100644
--- a/patches/server/0069-Add-5-second-tps-average-in-tps.patch
+++ b/patches/server/0069-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 efa6043ebec5655b4a0a0e6d96bc07b75aca461a..05d3cabf2ea49b378d9a2189fa7168fab9968f2a 100644
+index c287e069e325ab61f251494150059ef982577d00..67543c4a191c81e322391d36e2f51341767e9b03 100644
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
@@ -305,7 +305,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop packet) {
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
-index f2ba626bb16d3b94b28e6d5cffc257caf8875195..4c6c2f1fbbdbb950ab5ef363d0106105991afcf9 100644
+index e72e2ec797526772dc9c490739f5b45e4d135c89..303de40046ac0e5802a0061a1118ee95897b6bfc 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
-@@ -1570,7 +1570,13 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
+@@ -1577,7 +1577,13 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
@Override
public boolean canSee(Player player) {
diff --git a/patches/server/0136-Implement-TPSBar.patch b/patches/server/0136-Implement-TPSBar.patch
index 68de54f73..275c46c66 100644
--- a/patches/server/0136-Implement-TPSBar.patch
+++ b/patches/server/0136-Implement-TPSBar.patch
@@ -17,10 +17,10 @@ index 4308cf798c7f97532ee56369a11afe4dbf7a898f..d734addd622f6d429a79df08310bce56
if (environment.includeIntegrated) {
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
-index 05d3cabf2ea49b378d9a2189fa7168fab9968f2a..ed9b986a0a2e6e918406392437c354aa48a563e4 100644
+index 67543c4a191c81e322391d36e2f51341767e9b03..a1820f28dcf8f3d641b01e1e7e74b3104782ed8b 100644
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
-@@ -1139,6 +1139,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop
-Date: Sat, 9 Jan 2021 21:22:58 +0100
-Subject: [PATCH] Add unsafe Entity serialization API
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 3 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see .
-
-diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java
-index 501f9310bdc13b6d38dcdda4ad7fdfd19216d6e6..5ae88a924b2f2cfd714bd693eebc708e7c029ee8 100644
---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java
-+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java
-@@ -1290,5 +1290,12 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity {
- public boolean isRidableInWater() {
- return getHandle().rideableUnderWater();
- }
-+
-+ @Override
-+ public boolean spawnAt(Location location, org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason spawnReason) {
-+ entity.level = ((CraftWorld) location.getWorld()).getHandle();
-+ entity.absMoveTo(location.getX(), location.getY(), location.getZ(), location.getYaw(), location.getPitch());
-+ return !entity.valid && entity.level.addEntity(entity, spawnReason);
-+ }
- // Purpur end
- }
-diff --git a/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java b/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java
-index c912788886031ed2b34c1ef909a29aacfd2cd915..3a1ad1c0bd3be8ad7e7d7efb836bb18edbc7e4a6 100644
---- a/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java
-+++ b/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java
-@@ -407,9 +407,14 @@ public final class CraftMagicNumbers implements UnsafeValues {
- Preconditions.checkNotNull(item, "null cannot be serialized");
- Preconditions.checkArgument(item.getType() != Material.AIR, "air cannot be serialized");
-
-+ // Purpur start - rework NBT <-> bytes
-+ return serializeNbtToBytes(CraftItemStack.asNMSCopy(item).save(new CompoundTag()), true);
-+ }
-+
-+ public byte[] serializeNbtToBytes(CompoundTag compound, boolean addDataVersion) {
-+ if (addDataVersion) compound.putInt("DataVersion", getDataVersion());
- java.io.ByteArrayOutputStream outputStream = new java.io.ByteArrayOutputStream();
-- CompoundTag compound = (item instanceof CraftItemStack ? ((CraftItemStack) item).handle : CraftItemStack.asNMSCopy(item)).save(new CompoundTag());
-- compound.putInt("DataVersion", getDataVersion());
-+ // Purpur end
- try {
- net.minecraft.nbt.NbtIo.writeCompressed(
- compound,
-@@ -427,21 +432,52 @@ public final class CraftMagicNumbers implements UnsafeValues {
- Preconditions.checkNotNull(data, "null cannot be deserialized");
- Preconditions.checkArgument(data.length > 0, "cannot deserialize nothing");
-
-+ // Purpur start - rework NBT <-> bytes
-+ CompoundTag compound = deserializeNbtFromBytes(data, true);
-+ Dynamic converted = DataFixers.getDataFixer().update(References.ITEM_STACK, new Dynamic<>(NbtOps.INSTANCE, compound), compound.getInt("DataVersion"), getDataVersion());
-+ return net.minecraft.world.item.ItemStack.of((CompoundTag) converted.getValue()).asBukkitMirror();
-+ }
-+
-+ public CompoundTag deserializeNbtFromBytes(byte[] data, boolean verifyDataVersion) {
-+ // Purpur end
- try {
- CompoundTag compound = net.minecraft.nbt.NbtIo.readCompressed(
- new java.io.ByteArrayInputStream(data)
- );
-+ if (verifyDataVersion) { // Purpur
- int dataVersion = compound.getInt("DataVersion");
-
- Preconditions.checkArgument(dataVersion <= getDataVersion(), "Newer version! Server downgrades are not supported!");
-- Dynamic converted = DataFixers.getDataFixer().update(References.ITEM_STACK, new Dynamic(NbtOps.INSTANCE, compound), dataVersion, getDataVersion());
-- return CraftItemStack.asCraftMirror(net.minecraft.world.item.ItemStack.of((CompoundTag) converted.getValue()));
-+ } // Purpur
-+ return compound; // Purpur
- } catch (IOException ex) {
- com.destroystokyo.paper.util.SneakyThrow.sneaky(ex);
- throw new RuntimeException();
- }
- }
-
-+ // Purpur start
-+ @Override
-+ public byte[] serializeEntity(org.bukkit.entity.Entity entity) {
-+ Preconditions.checkNotNull(entity, "null cannot be serialized");
-+ Preconditions.checkArgument(entity instanceof org.bukkit.craftbukkit.entity.CraftEntity, "non-CraftEntity cannot be serialized");
-+ CompoundTag compound = new CompoundTag();
-+ compound.putString("id", ((org.bukkit.craftbukkit.entity.CraftEntity) entity).getHandle().getMinecraftKeyString());
-+ return serializeNbtToBytes(((org.bukkit.craftbukkit.entity.CraftEntity) entity).getHandle().saveWithoutId(compound), true);
-+ }
-+
-+ @Override
-+ public org.bukkit.entity.Entity deserializeEntity(byte[] data, org.bukkit.World world) {
-+ CompoundTag compound = deserializeNbtFromBytes(data, true);
-+ Dynamic converted = DataFixers.getDataFixer().update(References.ENTITY, new Dynamic<>(NbtOps.INSTANCE, compound), compound.getInt("DataVersion"), getDataVersion());
-+ compound = (CompoundTag) converted.getValue();
-+ compound.remove("UUID"); // Make the server make a new UUID for this entity; makes entities always spawnable.
-+ return net.minecraft.world.entity.EntityType.create(compound, ((org.bukkit.craftbukkit.CraftWorld) world).getHandle())
-+ .orElseThrow(() -> new IllegalArgumentException("unknown ID was found for the data; did you downgrade?"))
-+ .getBukkitEntity();
-+ }
-+ // Purpur end
-+
- @Override
- public String getTranslationKey(Material mat) {
- if (mat.isBlock()) {
diff --git a/patches/server/0152-Configs-for-if-Wither-Ender-Dragon-can-ride-vehicles.patch b/patches/server/0151-Configs-for-if-Wither-Ender-Dragon-can-ride-vehicles.patch
similarity index 100%
rename from patches/server/0152-Configs-for-if-Wither-Ender-Dragon-can-ride-vehicles.patch
rename to patches/server/0151-Configs-for-if-Wither-Ender-Dragon-can-ride-vehicles.patch
diff --git a/patches/server/0153-Dont-run-with-scissors.patch b/patches/server/0152-Dont-run-with-scissors.patch
similarity index 98%
rename from patches/server/0153-Dont-run-with-scissors.patch
rename to patches/server/0152-Dont-run-with-scissors.patch
index 09d8ac165..45e7442ea 100644
--- a/patches/server/0153-Dont-run-with-scissors.patch
+++ b/patches/server/0152-Dont-run-with-scissors.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] Dont run with scissors!
diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
-index 114d15b61928ad1b659dc36367a9cc66cb1165b8..0118796efe4ee2d89315dfb4a40ead13d2f46a44 100644
+index da9aee42243e21f8d379dfc95f9904b9a3b05805..2daf8dc51b78f4466f41136c2d99be6dc0981eb2 100644
--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
@@ -1574,6 +1574,13 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Ser
diff --git a/patches/server/0154-One-Punch-Man.patch b/patches/server/0153-One-Punch-Man.patch
similarity index 96%
rename from patches/server/0154-One-Punch-Man.patch
rename to patches/server/0153-One-Punch-Man.patch
index 287daea23..dbe397eac 100644
--- a/patches/server/0154-One-Punch-Man.patch
+++ b/patches/server/0153-One-Punch-Man.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] One Punch Man!
diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java
-index a5d69e5b87d7a22ab4aa7305099d9db8c1794a5c..140180d0be9f14a10bf7ac9f4bc16bf183ee700e 100644
+index 76d3d5d4c955f59feec825ae2107cc9257e21906..202463f4878861bc87cc18c1c152b5634b52d305 100644
--- a/src/main/java/net/minecraft/world/entity/LivingEntity.java
+++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java
@@ -2137,6 +2137,20 @@ public abstract class LivingEntity extends Entity {
diff --git a/patches/server/0155-Add-config-for-snow-on-blue-ice.patch b/patches/server/0154-Add-config-for-snow-on-blue-ice.patch
similarity index 100%
rename from patches/server/0155-Add-config-for-snow-on-blue-ice.patch
rename to patches/server/0154-Add-config-for-snow-on-blue-ice.patch
diff --git a/patches/server/0156-Configurable-Ender-Pearl-cooldown-damage-and-Endermi.patch b/patches/server/0155-Configurable-Ender-Pearl-cooldown-damage-and-Endermi.patch
similarity index 100%
rename from patches/server/0156-Configurable-Ender-Pearl-cooldown-damage-and-Endermi.patch
rename to patches/server/0155-Configurable-Ender-Pearl-cooldown-damage-and-Endermi.patch
diff --git a/patches/server/0157-Config-to-ignore-nearby-mobs-when-sleeping.patch b/patches/server/0156-Config-to-ignore-nearby-mobs-when-sleeping.patch
similarity index 96%
rename from patches/server/0157-Config-to-ignore-nearby-mobs-when-sleeping.patch
rename to patches/server/0156-Config-to-ignore-nearby-mobs-when-sleeping.patch
index ba141582c..5f20eb564 100644
--- a/patches/server/0157-Config-to-ignore-nearby-mobs-when-sleeping.patch
+++ b/patches/server/0156-Config-to-ignore-nearby-mobs-when-sleeping.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] Config to ignore nearby mobs when sleeping
diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java
-index 33e36a80edbc80f0f562842ed690dccc13cc2e94..af22f5b80fd8d7aba8d12d84196a57e8f054fec2 100644
+index 878654d5e65d4318aaad27b00a6df1662b5946de..696eddee3524a4b18caa3990b6da3ad20537627c 100644
--- a/src/main/java/net/minecraft/server/level/ServerPlayer.java
+++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java
@@ -1305,7 +1305,7 @@ public class ServerPlayer extends Player {
diff --git a/patches/server/0158-Add-back-player-spawned-endermite-API.patch b/patches/server/0157-Add-back-player-spawned-endermite-API.patch
similarity index 100%
rename from patches/server/0158-Add-back-player-spawned-endermite-API.patch
rename to patches/server/0157-Add-back-player-spawned-endermite-API.patch
diff --git a/patches/server/0159-Config-Enderman-aggressiveness-towards-Endermites.patch b/patches/server/0158-Config-Enderman-aggressiveness-towards-Endermites.patch
similarity index 100%
rename from patches/server/0159-Config-Enderman-aggressiveness-towards-Endermites.patch
rename to patches/server/0158-Config-Enderman-aggressiveness-towards-Endermites.patch
diff --git a/patches/server/0160-Config-to-ignore-Dragon-Head-wearers-and-stare-aggro.patch b/patches/server/0159-Config-to-ignore-Dragon-Head-wearers-and-stare-aggro.patch
similarity index 100%
rename from patches/server/0160-Config-to-ignore-Dragon-Head-wearers-and-stare-aggro.patch
rename to patches/server/0159-Config-to-ignore-Dragon-Head-wearers-and-stare-aggro.patch
diff --git a/patches/server/0161-Tick-fluids-config.patch b/patches/server/0160-Tick-fluids-config.patch
similarity index 100%
rename from patches/server/0161-Tick-fluids-config.patch
rename to patches/server/0160-Tick-fluids-config.patch
diff --git a/patches/server/0162-Config-to-disable-Llama-caravans.patch b/patches/server/0161-Config-to-disable-Llama-caravans.patch
similarity index 100%
rename from patches/server/0162-Config-to-disable-Llama-caravans.patch
rename to patches/server/0161-Config-to-disable-Llama-caravans.patch
diff --git a/patches/server/0163-Config-to-make-Creepers-explode-on-death.patch b/patches/server/0162-Config-to-make-Creepers-explode-on-death.patch
similarity index 100%
rename from patches/server/0163-Config-to-make-Creepers-explode-on-death.patch
rename to patches/server/0162-Config-to-make-Creepers-explode-on-death.patch
diff --git a/patches/server/0164-Configurable-ravager-griefable-blocks-list.patch b/patches/server/0163-Configurable-ravager-griefable-blocks-list.patch
similarity index 100%
rename from patches/server/0164-Configurable-ravager-griefable-blocks-list.patch
rename to patches/server/0163-Configurable-ravager-griefable-blocks-list.patch
diff --git a/patches/server/0165-Sneak-to-bulk-process-composter.patch b/patches/server/0164-Sneak-to-bulk-process-composter.patch
similarity index 100%
rename from patches/server/0165-Sneak-to-bulk-process-composter.patch
rename to patches/server/0164-Sneak-to-bulk-process-composter.patch
diff --git a/patches/server/0166-Config-for-skipping-night.patch b/patches/server/0165-Config-for-skipping-night.patch
similarity index 96%
rename from patches/server/0166-Config-for-skipping-night.patch
rename to patches/server/0165-Config-for-skipping-night.patch
index 518f0e33d..7b6967f29 100644
--- a/patches/server/0166-Config-for-skipping-night.patch
+++ b/patches/server/0165-Config-for-skipping-night.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] Config for skipping night
diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java
-index 54481445beb1f409e4ad8c5a83d210cb5119abcb..aab9dbe91b44408e5b530e32eddac4ffd6ee3b1d 100644
+index a88ad3f8d2de09221d9d039fc9d61f843a259f65..bbfca53639169d2070719cfbbc8f31079bd8a876 100644
--- a/src/main/java/net/minecraft/server/level/ServerLevel.java
+++ b/src/main/java/net/minecraft/server/level/ServerLevel.java
@@ -716,7 +716,7 @@ public class ServerLevel extends Level implements WorldGenLevel {
diff --git a/patches/server/0167-Add-config-for-villager-trading.patch b/patches/server/0166-Add-config-for-villager-trading.patch
similarity index 100%
rename from patches/server/0167-Add-config-for-villager-trading.patch
rename to patches/server/0166-Add-config-for-villager-trading.patch
diff --git a/patches/server/0168-Allow-infinity-on-crossbows.patch b/patches/server/0167-Allow-infinity-on-crossbows.patch
similarity index 100%
rename from patches/server/0168-Allow-infinity-on-crossbows.patch
rename to patches/server/0167-Allow-infinity-on-crossbows.patch
diff --git a/patches/server/0169-Drowning-Settings.patch b/patches/server/0168-Drowning-Settings.patch
similarity index 93%
rename from patches/server/0169-Drowning-Settings.patch
rename to patches/server/0168-Drowning-Settings.patch
index 9f34d443b..a54bc5fab 100644
--- a/patches/server/0169-Drowning-Settings.patch
+++ b/patches/server/0168-Drowning-Settings.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] Drowning Settings
diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java
-index 3c5347c0d4b65ced4b942504b1cdb8aab53016a5..3a010a01c6cfd5307b1856bb9d70e81cabe45a65 100644
+index 015228191d81340856bf76135adc494ccacd0f76..d2ad2c7aedc7f026c211b3115828c21a116ab0a9 100644
--- a/src/main/java/net/minecraft/world/entity/Entity.java
+++ b/src/main/java/net/minecraft/world/entity/Entity.java
@@ -525,7 +525,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, n
@@ -17,7 +17,7 @@ index 3c5347c0d4b65ced4b942504b1cdb8aab53016a5..3a010a01c6cfd5307b1856bb9d70e81c
this.entityData.define(Entity.DATA_CUSTOM_NAME_VISIBLE, false);
this.entityData.define(Entity.DATA_CUSTOM_NAME, Optional.empty());
this.entityData.define(Entity.DATA_SILENT, false);
-@@ -2968,7 +2968,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, n
+@@ -2977,7 +2977,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, n
}
public int getMaxAirSupply() {
@@ -27,7 +27,7 @@ index 3c5347c0d4b65ced4b942504b1cdb8aab53016a5..3a010a01c6cfd5307b1856bb9d70e81c
public int getAirSupply() {
diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java
-index 140180d0be9f14a10bf7ac9f4bc16bf183ee700e..c2a4a872cca89912b7cb85af790a5001a9705b99 100644
+index 202463f4878861bc87cc18c1c152b5634b52d305..e77ef361cb57841f5fafc2b528e8fe0916180438 100644
--- a/src/main/java/net/minecraft/world/entity/LivingEntity.java
+++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java
@@ -424,7 +424,7 @@ public abstract class LivingEntity extends Entity {
diff --git a/patches/server/0170-Break-individual-slabs-when-sneaking.patch b/patches/server/0169-Break-individual-slabs-when-sneaking.patch
similarity index 100%
rename from patches/server/0170-Break-individual-slabs-when-sneaking.patch
rename to patches/server/0169-Break-individual-slabs-when-sneaking.patch
diff --git a/patches/server/0171-Config-to-disable-hostile-mob-spawn-on-ice.patch b/patches/server/0170-Config-to-disable-hostile-mob-spawn-on-ice.patch
similarity index 100%
rename from patches/server/0171-Config-to-disable-hostile-mob-spawn-on-ice.patch
rename to patches/server/0170-Config-to-disable-hostile-mob-spawn-on-ice.patch
diff --git a/patches/server/0172-Config-to-show-Armor-Stand-arms-on-spawn.patch b/patches/server/0171-Config-to-show-Armor-Stand-arms-on-spawn.patch
similarity index 100%
rename from patches/server/0172-Config-to-show-Armor-Stand-arms-on-spawn.patch
rename to patches/server/0171-Config-to-show-Armor-Stand-arms-on-spawn.patch
diff --git a/patches/server/0173-Option-to-make-doors-require-redstone.patch b/patches/server/0172-Option-to-make-doors-require-redstone.patch
similarity index 100%
rename from patches/server/0173-Option-to-make-doors-require-redstone.patch
rename to patches/server/0172-Option-to-make-doors-require-redstone.patch
diff --git a/patches/server/0174-Config-to-allow-for-unsafe-enchants.patch b/patches/server/0173-Config-to-allow-for-unsafe-enchants.patch
similarity index 100%
rename from patches/server/0174-Config-to-allow-for-unsafe-enchants.patch
rename to patches/server/0173-Config-to-allow-for-unsafe-enchants.patch
diff --git a/patches/server/0175-Configurable-sponge-absorption.patch b/patches/server/0174-Configurable-sponge-absorption.patch
similarity index 100%
rename from patches/server/0175-Configurable-sponge-absorption.patch
rename to patches/server/0174-Configurable-sponge-absorption.patch
diff --git a/patches/server/0176-Projectile-offset-config.patch b/patches/server/0175-Projectile-offset-config.patch
similarity index 100%
rename from patches/server/0176-Projectile-offset-config.patch
rename to patches/server/0175-Projectile-offset-config.patch
diff --git a/patches/server/0177-Config-for-powered-rail-activation-distance.patch b/patches/server/0176-Config-for-powered-rail-activation-distance.patch
similarity index 100%
rename from patches/server/0177-Config-for-powered-rail-activation-distance.patch
rename to patches/server/0176-Config-for-powered-rail-activation-distance.patch
diff --git a/patches/server/0178-Piglin-portal-spawn-modifier.patch b/patches/server/0177-Piglin-portal-spawn-modifier.patch
similarity index 100%
rename from patches/server/0178-Piglin-portal-spawn-modifier.patch
rename to patches/server/0177-Piglin-portal-spawn-modifier.patch
diff --git a/patches/server/0179-Config-to-change-max-number-of-bees.patch b/patches/server/0178-Config-to-change-max-number-of-bees.patch
similarity index 100%
rename from patches/server/0179-Config-to-change-max-number-of-bees.patch
rename to patches/server/0178-Config-to-change-max-number-of-bees.patch
diff --git a/patches/server/0180-Configurable-damage-settings-for-magma-blocks.patch b/patches/server/0179-Configurable-damage-settings-for-magma-blocks.patch
similarity index 97%
rename from patches/server/0180-Configurable-damage-settings-for-magma-blocks.patch
rename to patches/server/0179-Configurable-damage-settings-for-magma-blocks.patch
index 3fcaf5206..1f2e6feb4 100644
--- a/patches/server/0180-Configurable-damage-settings-for-magma-blocks.patch
+++ b/patches/server/0179-Configurable-damage-settings-for-magma-blocks.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] Configurable damage settings for magma blocks
diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java
-index 3a010a01c6cfd5307b1856bb9d70e81cabe45a65..d3d6dc230674a4c6f9c388b131e1feb42660d865 100644
+index d2ad2c7aedc7f026c211b3115828c21a116ab0a9..cfcc776fce49bbdc72072eceb4968510e6fd6f36 100644
--- a/src/main/java/net/minecraft/world/entity/Entity.java
+++ b/src/main/java/net/minecraft/world/entity/Entity.java
@@ -1035,7 +1035,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, n
diff --git a/patches/server/0181-Config-for-wither-explosion-radius.patch b/patches/server/0180-Config-for-wither-explosion-radius.patch
similarity index 100%
rename from patches/server/0181-Config-for-wither-explosion-radius.patch
rename to patches/server/0180-Config-for-wither-explosion-radius.patch
diff --git a/patches/server/0182-Gamemode-extra-permissions.patch b/patches/server/0181-Gamemode-extra-permissions.patch
similarity index 100%
rename from patches/server/0182-Gamemode-extra-permissions.patch
rename to patches/server/0181-Gamemode-extra-permissions.patch
diff --git a/patches/server/0183-Config-for-changing-the-blocks-that-turn-into-dirt-p.patch b/patches/server/0182-Config-for-changing-the-blocks-that-turn-into-dirt-p.patch
similarity index 100%
rename from patches/server/0183-Config-for-changing-the-blocks-that-turn-into-dirt-p.patch
rename to patches/server/0182-Config-for-changing-the-blocks-that-turn-into-dirt-p.patch
diff --git a/patches/server/0184-Configurable-piston-push-limit.patch b/patches/server/0183-Configurable-piston-push-limit.patch
similarity index 100%
rename from patches/server/0184-Configurable-piston-push-limit.patch
rename to patches/server/0183-Configurable-piston-push-limit.patch
diff --git a/patches/server/0185-Configurable-broadcast-settings.patch b/patches/server/0184-Configurable-broadcast-settings.patch
similarity index 94%
rename from patches/server/0185-Configurable-broadcast-settings.patch
rename to patches/server/0184-Configurable-broadcast-settings.patch
index 8b7fd4012..0094565b2 100644
--- a/patches/server/0185-Configurable-broadcast-settings.patch
+++ b/patches/server/0184-Configurable-broadcast-settings.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] Configurable broadcast settings
diff --git a/src/main/java/net/minecraft/server/PlayerAdvancements.java b/src/main/java/net/minecraft/server/PlayerAdvancements.java
-index c46df052a5a39d92688f51377ee1f7b5b5b36faa..d7d2a975386cecb0d50b4f7ed37de8ad20ca9bad 100644
+index 945fb3200d52b83eaee2e62d6db5c43e088218eb..a87a532ce9e69bf4a90aac73ad51e4a88b8e141e 100644
--- a/src/main/java/net/minecraft/server/PlayerAdvancements.java
+++ b/src/main/java/net/minecraft/server/PlayerAdvancements.java
@@ -301,6 +301,7 @@ public class PlayerAdvancements {
@@ -17,7 +17,7 @@ index c46df052a5a39d92688f51377ee1f7b5b5b36faa..d7d2a975386cecb0d50b4f7ed37de8ad
// Paper end
}
diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java
-index af22f5b80fd8d7aba8d12d84196a57e8f054fec2..674c6ffbec5874d3581d3d02683d9e5c38bff269 100644
+index 696eddee3524a4b18caa3990b6da3ad20537627c..176168d37000fe439593bd0cfc0a07d29577b474 100644
--- a/src/main/java/net/minecraft/server/level/ServerPlayer.java
+++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java
@@ -881,6 +881,7 @@ public class ServerPlayer extends Player {
diff --git a/patches/server/0186-Fix-SPIGOT-6278.patch b/patches/server/0185-Fix-SPIGOT-6278.patch
similarity index 100%
rename from patches/server/0186-Fix-SPIGOT-6278.patch
rename to patches/server/0185-Fix-SPIGOT-6278.patch
diff --git a/patches/server/0187-Configurable-mob-blindness.patch b/patches/server/0186-Configurable-mob-blindness.patch
similarity index 96%
rename from patches/server/0187-Configurable-mob-blindness.patch
rename to patches/server/0186-Configurable-mob-blindness.patch
index 2582dada2..32ea5fb70 100644
--- a/patches/server/0187-Configurable-mob-blindness.patch
+++ b/patches/server/0186-Configurable-mob-blindness.patch
@@ -6,7 +6,7 @@ Subject: [PATCH] Configurable mob blindness
Ported from https://github.com/raltsmc/mobblindness
diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java
-index c2a4a872cca89912b7cb85af790a5001a9705b99..66f15b3450ccdc36451a21a91d9a6ddaec6c05ba 100644
+index e77ef361cb57841f5fafc2b528e8fe0916180438..baf1bfd19192f84499dab4eb7e263161a8d000f2 100644
--- a/src/main/java/net/minecraft/world/entity/LivingEntity.java
+++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java
@@ -991,6 +991,17 @@ public abstract class LivingEntity extends Entity {
diff --git a/patches/server/0188-Hide-hidden-players-from-entity-selector.patch b/patches/server/0187-Hide-hidden-players-from-entity-selector.patch
similarity index 100%
rename from patches/server/0188-Hide-hidden-players-from-entity-selector.patch
rename to patches/server/0187-Hide-hidden-players-from-entity-selector.patch
diff --git a/patches/server/0189-Config-for-health-to-impact-Creeper-explosion-radius.patch b/patches/server/0188-Config-for-health-to-impact-Creeper-explosion-radius.patch
similarity index 100%
rename from patches/server/0189-Config-for-health-to-impact-Creeper-explosion-radius.patch
rename to patches/server/0188-Config-for-health-to-impact-Creeper-explosion-radius.patch
diff --git a/patches/server/0190-Iron-golem-poppy-calms-anger.patch b/patches/server/0189-Iron-golem-poppy-calms-anger.patch
similarity index 100%
rename from patches/server/0190-Iron-golem-poppy-calms-anger.patch
rename to patches/server/0189-Iron-golem-poppy-calms-anger.patch
diff --git a/patches/server/0191-Breedable-parrots.patch b/patches/server/0190-Breedable-parrots.patch
similarity index 100%
rename from patches/server/0191-Breedable-parrots.patch
rename to patches/server/0190-Breedable-parrots.patch
diff --git a/patches/server/0192-Configurable-powered-rail-boost-modifier.patch b/patches/server/0191-Configurable-powered-rail-boost-modifier.patch
similarity index 100%
rename from patches/server/0192-Configurable-powered-rail-boost-modifier.patch
rename to patches/server/0191-Configurable-powered-rail-boost-modifier.patch
diff --git a/patches/server/0193-Add-config-change-multiplier-critical-damage-value.patch b/patches/server/0192-Add-config-change-multiplier-critical-damage-value.patch
similarity index 100%
rename from patches/server/0193-Add-config-change-multiplier-critical-damage-value.patch
rename to patches/server/0192-Add-config-change-multiplier-critical-damage-value.patch
diff --git a/patches/server/0194-Option-to-disable-dragon-egg-teleporting.patch b/patches/server/0193-Option-to-disable-dragon-egg-teleporting.patch
similarity index 100%
rename from patches/server/0194-Option-to-disable-dragon-egg-teleporting.patch
rename to patches/server/0193-Option-to-disable-dragon-egg-teleporting.patch
diff --git a/patches/server/0195-Config-for-unverified-username-message.patch b/patches/server/0194-Config-for-unverified-username-message.patch
similarity index 100%
rename from patches/server/0195-Config-for-unverified-username-message.patch
rename to patches/server/0194-Config-for-unverified-username-message.patch
diff --git a/patches/server/0196-Make-anvil-cumulative-cost-configurable.patch b/patches/server/0195-Make-anvil-cumulative-cost-configurable.patch
similarity index 100%
rename from patches/server/0196-Make-anvil-cumulative-cost-configurable.patch
rename to patches/server/0195-Make-anvil-cumulative-cost-configurable.patch
diff --git a/patches/server/0197-ShulkerBox-allow-oversized-stacks.patch b/patches/server/0196-ShulkerBox-allow-oversized-stacks.patch
similarity index 100%
rename from patches/server/0197-ShulkerBox-allow-oversized-stacks.patch
rename to patches/server/0196-ShulkerBox-allow-oversized-stacks.patch
diff --git a/patches/server/0198-Bee-can-work-when-raining-or-at-night.patch b/patches/server/0197-Bee-can-work-when-raining-or-at-night.patch
similarity index 100%
rename from patches/server/0198-Bee-can-work-when-raining-or-at-night.patch
rename to patches/server/0197-Bee-can-work-when-raining-or-at-night.patch
diff --git a/patches/server/0199-API-for-any-mob-to-burn-daylight.patch b/patches/server/0198-API-for-any-mob-to-burn-daylight.patch
similarity index 94%
rename from patches/server/0199-API-for-any-mob-to-burn-daylight.patch
rename to patches/server/0198-API-for-any-mob-to-burn-daylight.patch
index d38677b72..dd3c56089 100644
--- a/patches/server/0199-API-for-any-mob-to-burn-daylight.patch
+++ b/patches/server/0198-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 d3d6dc230674a4c6f9c388b131e1feb42660d865..840e60987e4ba4b49088b82e35ecc5a1ddcc29e5 100644
+index cfcc776fce49bbdc72072eceb4968510e6fd6f36..17179e00c75aa3d37d57235e068703a2eea43d91 100644
--- a/src/main/java/net/minecraft/world/entity/Entity.java
+++ b/src/main/java/net/minecraft/world/entity/Entity.java
-@@ -4400,5 +4400,18 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, n
+@@ -4409,5 +4409,18 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, n
public boolean canSaveToDisk() {
return true;
}
@@ -29,7 +29,7 @@ index d3d6dc230674a4c6f9c388b131e1feb42660d865..840e60987e4ba4b49088b82e35ecc5a1
// Purpur end
}
diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java
-index 66f15b3450ccdc36451a21a91d9a6ddaec6c05ba..47d9560f4f092e999488a735f6ef9987d4bab0c0 100644
+index baf1bfd19192f84499dab4eb7e263161a8d000f2..8feff873c7bcce3530814b19f01719bab7837fa8 100644
--- a/src/main/java/net/minecraft/world/entity/LivingEntity.java
+++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java
@@ -264,6 +264,7 @@ public abstract class LivingEntity extends Entity {
@@ -89,7 +89,7 @@ index 66f15b3450ccdc36451a21a91d9a6ddaec6c05ba..47d9560f4f092e999488a735f6ef9987
public boolean isSensitiveToWater() {
diff --git a/src/main/java/net/minecraft/world/entity/Mob.java b/src/main/java/net/minecraft/world/entity/Mob.java
-index 91081d8aa571f54a2f56b4dd341e9559f0a2e27a..02a227e1239ca3a1d54d746ea14b6ae7b12d1cd0 100644
+index 5500560f8b0b7de0a00f3528032fcab9f91726b7..d3807e4e75f20cd8c7afc17ce0d1e66abe404e90 100644
--- a/src/main/java/net/minecraft/world/entity/Mob.java
+++ b/src/main/java/net/minecraft/world/entity/Mob.java
@@ -1643,17 +1643,7 @@ public abstract class Mob extends LivingEntity {
@@ -257,7 +257,7 @@ index 59548f2a7683d4990c8fff668b462d7a1cdf969a..7706dbc824b6ff8a00f72f5890cc95ec
public void setShouldBurnInDay(boolean shouldBurnInDay) { this.shouldBurnInDay = shouldBurnInDay; }
// Paper end
diff --git a/src/main/java/net/minecraft/world/entity/monster/Zombie.java b/src/main/java/net/minecraft/world/entity/monster/Zombie.java
-index d0023f76e0c4b5d9db261416192ba7f0b1dca772..4ccc743cba68f9af2d1663a28bfe94d48e478c97 100644
+index 673e6e91290b3e7840d00d06c15906a014d72b42..6c253894866b870e79e110efd7eaf306aa5d7af5 100644
--- a/src/main/java/net/minecraft/world/entity/monster/Zombie.java
+++ b/src/main/java/net/minecraft/world/entity/monster/Zombie.java
@@ -96,11 +96,12 @@ public class Zombie extends Monster {
@@ -333,25 +333,26 @@ index d0023f76e0c4b5d9db261416192ba7f0b1dca772..4ccc743cba68f9af2d1663a28bfe94d4
// 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 5ae88a924b2f2cfd714bd693eebc708e7c029ee8..b75661886bafcfa340c5ac388401aa3c1cda78a9 100644
+index b8fb34df77ffd1f4ef2db63717e3acf2ab592fb6..47554042c83127f1f37e9b0881ef7c7796edd35a 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java
-@@ -1297,5 +1297,10 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity {
- entity.absMoveTo(location.getX(), location.getY(), location.getZ(), location.getYaw(), location.getPitch());
- return !entity.valid && entity.level.addEntity(entity, spawnReason);
+@@ -197,6 +197,11 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity {
+ this.entity = entity;
}
-+
+
+ @Override
+ public boolean isInDaylight() {
+ return getHandle().isSunBurnTick();
+ }
- // Purpur end
- }
++
+ public static CraftEntity getEntity(CraftServer server, Entity entity) {
+ /*
+ * Order is *EXTREMELY* important -- keep it right! =D
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java
-index 7a888d9c464f080297fa27e39837734a06b013a9..9ecf1ef7e876418d2b454d6cd8ac8739194acfaa 100644
+index be1f7cf667b5c9b2e691397bfc2e316b7ba84251..a59d71769db5452f9e16c514928dce20d1b99408 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java
-@@ -933,5 +933,15 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity {
+@@ -937,5 +937,15 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity {
if (slot == null) return;
getHandle().broadcastBreakEvent(org.bukkit.craftbukkit.CraftEquipmentSlot.getNMS(slot));
}
diff --git a/patches/server/0200-Fix-advancement-triggers-on-entity-death.patch b/patches/server/0199-Fix-advancement-triggers-on-entity-death.patch
similarity index 97%
rename from patches/server/0200-Fix-advancement-triggers-on-entity-death.patch
rename to patches/server/0199-Fix-advancement-triggers-on-entity-death.patch
index fbf99dcfa..bd3980419 100644
--- a/patches/server/0200-Fix-advancement-triggers-on-entity-death.patch
+++ b/patches/server/0199-Fix-advancement-triggers-on-entity-death.patch
@@ -16,7 +16,7 @@ restoring it back to the entity just before the criterion triggers run and
then finally clearing the equipment again right after the criterion is done.
diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java
-index 47d9560f4f092e999488a735f6ef9987d4bab0c0..51b6c005db04ba60a3766bc6072ef311eab53992 100644
+index 8feff873c7bcce3530814b19f01719bab7837fa8..597a99e30741eeae339043240c4e80e4818399ca 100644
--- a/src/main/java/net/minecraft/world/entity/LivingEntity.java
+++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java
@@ -1661,10 +1661,13 @@ public abstract class LivingEntity extends Entity {
@@ -47,7 +47,7 @@ index 47d9560f4f092e999488a735f6ef9987d4bab0c0..51b6c005db04ba60a3766bc6072ef311
CompoundTag nbttagcompound = stack.getTag();
diff --git a/src/main/java/net/minecraft/world/entity/Mob.java b/src/main/java/net/minecraft/world/entity/Mob.java
-index 02a227e1239ca3a1d54d746ea14b6ae7b12d1cd0..74e73e52139445dd2090cfd3abdbf22497a7b4da 100644
+index d3807e4e75f20cd8c7afc17ce0d1e66abe404e90..50526fd30e84f8812454c264afd79f11c2190a35 100644
--- a/src/main/java/net/minecraft/world/entity/Mob.java
+++ b/src/main/java/net/minecraft/world/entity/Mob.java
@@ -1026,6 +1026,41 @@ public abstract class Mob extends LivingEntity {
diff --git a/patches/server/0201-Config-MobEffect-by-world.patch b/patches/server/0200-Config-MobEffect-by-world.patch
similarity index 100%
rename from patches/server/0201-Config-MobEffect-by-world.patch
rename to patches/server/0200-Config-MobEffect-by-world.patch
diff --git a/patches/server/0202-Beacon-Activation-Range-Configurable.patch b/patches/server/0201-Beacon-Activation-Range-Configurable.patch
similarity index 100%
rename from patches/server/0202-Beacon-Activation-Range-Configurable.patch
rename to patches/server/0201-Beacon-Activation-Range-Configurable.patch
diff --git a/patches/server/0203-Add-toggle-for-sand-duping-fix.patch b/patches/server/0202-Add-toggle-for-sand-duping-fix.patch
similarity index 100%
rename from patches/server/0203-Add-toggle-for-sand-duping-fix.patch
rename to patches/server/0202-Add-toggle-for-sand-duping-fix.patch
diff --git a/patches/server/0204-Add-toggle-for-end-portal-safe-teleporting.patch b/patches/server/0203-Add-toggle-for-end-portal-safe-teleporting.patch
similarity index 95%
rename from patches/server/0204-Add-toggle-for-end-portal-safe-teleporting.patch
rename to patches/server/0203-Add-toggle-for-end-portal-safe-teleporting.patch
index dc8b70d2d..c51d03d3e 100644
--- a/patches/server/0204-Add-toggle-for-end-portal-safe-teleporting.patch
+++ b/patches/server/0203-Add-toggle-for-end-portal-safe-teleporting.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Add toggle for end portal safe teleporting
diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java
-index 840e60987e4ba4b49088b82e35ecc5a1ddcc29e5..e0f61b7515d4d6b8ca4b1be29923a268a1c4e6d3 100644
+index 17179e00c75aa3d37d57235e068703a2eea43d91..eb68e107654b04f257b01bfe722bf75b17775b84 100644
--- a/src/main/java/net/minecraft/world/entity/Entity.java
+++ b/src/main/java/net/minecraft/world/entity/Entity.java
-@@ -2785,7 +2785,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, n
+@@ -2794,7 +2794,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, n
}
this.processPortalCooldown();
diff --git a/patches/server/0205-Flying-Fall-Damage-API.patch b/patches/server/0204-Flying-Fall-Damage-API.patch
similarity index 92%
rename from patches/server/0205-Flying-Fall-Damage-API.patch
rename to patches/server/0204-Flying-Fall-Damage-API.patch
index 32d7c3146..4bfabba05 100644
--- a/patches/server/0205-Flying-Fall-Damage-API.patch
+++ b/patches/server/0204-Flying-Fall-Damage-API.patch
@@ -26,10 +26,10 @@ index 0c0d4ec5893f082a8b4071a627a64c7b88fd0067..3b5c1bf87268dc10719c3f8e3e8c105f
} 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 3368b953b364faf2cde8e242d59fa8c6febc105f..2ab44b6524b9fb9f415092659ea3750b57b4c0c4 100644
+index 2fe84d9d7b0a829baefdb9fad7ba02d336ba5254..f93887579837a9cfc6699c0b481ac60f16a31770 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
-@@ -2636,5 +2636,14 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
+@@ -2628,5 +2628,14 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
public void setSpawnInvulnerableTicks(int spawnInvulnerableTime) {
getHandle().spawnInvulnerableTime = spawnInvulnerableTime;
}
diff --git a/patches/server/0206-Make-lightning-rod-range-configurable.patch b/patches/server/0205-Make-lightning-rod-range-configurable.patch
similarity index 96%
rename from patches/server/0206-Make-lightning-rod-range-configurable.patch
rename to patches/server/0205-Make-lightning-rod-range-configurable.patch
index 4ef03238d..e85474454 100644
--- a/patches/server/0206-Make-lightning-rod-range-configurable.patch
+++ b/patches/server/0205-Make-lightning-rod-range-configurable.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] Make lightning rod range configurable
diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java
-index aab9dbe91b44408e5b530e32eddac4ffd6ee3b1d..05a52fd9540e725b1b6feb2c472ae38a9da0ec1a 100644
+index bbfca53639169d2070719cfbbc8f31079bd8a876..91fe92f895d565fc743f834bbf2a42630914125d 100644
--- a/src/main/java/net/minecraft/server/level/ServerLevel.java
+++ b/src/main/java/net/minecraft/server/level/ServerLevel.java
@@ -1012,7 +1012,7 @@ public class ServerLevel extends Level implements WorldGenLevel {
diff --git a/patches/server/0207-Burp-after-eating-food-fills-hunger-bar-completely.patch b/patches/server/0206-Burp-after-eating-food-fills-hunger-bar-completely.patch
similarity index 100%
rename from patches/server/0207-Burp-after-eating-food-fills-hunger-bar-completely.patch
rename to patches/server/0206-Burp-after-eating-food-fills-hunger-bar-completely.patch
diff --git a/patches/server/0208-Allow-player-join-full-server-by-permission.patch b/patches/server/0207-Allow-player-join-full-server-by-permission.patch
similarity index 100%
rename from patches/server/0208-Allow-player-join-full-server-by-permission.patch
rename to patches/server/0207-Allow-player-join-full-server-by-permission.patch
diff --git a/patches/server/0209-Add-permission-bypass-for-portal-waiting.patch b/patches/server/0208-Add-permission-bypass-for-portal-waiting.patch
similarity index 100%
rename from patches/server/0209-Add-permission-bypass-for-portal-waiting.patch
rename to patches/server/0208-Add-permission-bypass-for-portal-waiting.patch
diff --git a/patches/server/0210-Shulker-spawn-from-bullet-options.patch b/patches/server/0209-Shulker-spawn-from-bullet-options.patch
similarity index 100%
rename from patches/server/0210-Shulker-spawn-from-bullet-options.patch
rename to patches/server/0209-Shulker-spawn-from-bullet-options.patch
diff --git a/patches/server/0211-Eating-glow-berries-adds-glow-effect.patch b/patches/server/0210-Eating-glow-berries-adds-glow-effect.patch
similarity index 100%
rename from patches/server/0211-Eating-glow-berries-adds-glow-effect.patch
rename to patches/server/0210-Eating-glow-berries-adds-glow-effect.patch
diff --git a/patches/server/0212-Option-to-make-drowned-break-doors.patch b/patches/server/0211-Option-to-make-drowned-break-doors.patch
similarity index 95%
rename from patches/server/0212-Option-to-make-drowned-break-doors.patch
rename to patches/server/0211-Option-to-make-drowned-break-doors.patch
index 6a818c5d5..392d199f9 100644
--- a/patches/server/0212-Option-to-make-drowned-break-doors.patch
+++ b/patches/server/0211-Option-to-make-drowned-break-doors.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] Option to make drowned break doors
diff --git a/src/main/java/net/minecraft/world/entity/monster/Drowned.java b/src/main/java/net/minecraft/world/entity/monster/Drowned.java
-index 766dd7d70ea20c892ee9f084f2eb14c1c7b63451..30117b2b0e5d4c34c9fd1bbeccbd252bfce3cf85 100644
+index 729b4a414918b1f74c225e15b5c41dc0db2a9f5b..c69cf2d2778d73f6834208d20e5e0b1502a905c8 100644
--- a/src/main/java/net/minecraft/world/entity/monster/Drowned.java
+++ b/src/main/java/net/minecraft/world/entity/monster/Drowned.java
@@ -30,6 +30,7 @@ import net.minecraft.world.entity.ai.goal.MoveToBlockGoal;
@@ -27,7 +27,7 @@ index 766dd7d70ea20c892ee9f084f2eb14c1c7b63451..30117b2b0e5d4c34c9fd1bbeccbd252b
@@ -166,7 +168,7 @@ public class Drowned extends Zombie implements RangedAttackMob {
@Override
- protected boolean supportsBreakDoorGoal() {
+ public boolean supportsBreakDoorGoal() {
- return false;
+ return level.purpurConfig.drownedBreakDoors ? true : false;
}
diff --git a/patches/server/0213-Configurable-hunger-starvation-damage.patch b/patches/server/0212-Configurable-hunger-starvation-damage.patch
similarity index 100%
rename from patches/server/0213-Configurable-hunger-starvation-damage.patch
rename to patches/server/0212-Configurable-hunger-starvation-damage.patch
diff --git a/patches/server/0214-Redirect-System.out-calls-to-plugin-loggers.patch b/patches/server/0213-Redirect-System.out-calls-to-plugin-loggers.patch
similarity index 98%
rename from patches/server/0214-Redirect-System.out-calls-to-plugin-loggers.patch
rename to patches/server/0213-Redirect-System.out-calls-to-plugin-loggers.patch
index f076cd298..08a9f025d 100644
--- a/patches/server/0214-Redirect-System.out-calls-to-plugin-loggers.patch
+++ b/patches/server/0213-Redirect-System.out-calls-to-plugin-loggers.patch
@@ -91,7 +91,7 @@ index 0000000000000000000000000000000000000000..f88da0b86a683b25d429ceea4a36d6dd
+ }
+}
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
-index f38fe2e10dd6893dc4dbce9647d59e1f39e94d11..b5dead20f18087c8ebbd564aa25a17c60c549107 100644
+index 9ad49a1cf4daa0a3c7f4a7360120d55be09a326b..47464536adb99db48f1e5d2c28ba371a11646812 100644
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
@@ -291,7 +291,7 @@ public final class CraftServer implements Server {
diff --git a/patches/server/0215-Armor-click-equip-options.patch b/patches/server/0214-Armor-click-equip-options.patch
similarity index 100%
rename from patches/server/0215-Armor-click-equip-options.patch
rename to patches/server/0214-Armor-click-equip-options.patch
diff --git a/patches/server/0216-Add-uptime-command.patch b/patches/server/0215-Add-uptime-command.patch
similarity index 98%
rename from patches/server/0216-Add-uptime-command.patch
rename to patches/server/0215-Add-uptime-command.patch
index 953fc9350..a77ea2d9e 100644
--- a/patches/server/0216-Add-uptime-command.patch
+++ b/patches/server/0215-Add-uptime-command.patch
@@ -17,7 +17,7 @@ index d734addd622f6d429a79df08310bce562db3425e..d298e70100741808d466d7113eb268fb
}
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
-index ed9b986a0a2e6e918406392437c354aa48a563e4..80e81d4482f4e4451150d3d3cc8fe244be35d6e9 100644
+index a1820f28dcf8f3d641b01e1e7e74b3104782ed8b..d71b5595dc2795f48007c07ce59bb5b19a80ff52 100644
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
@@ -295,6 +295,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop 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 b5dead20f18087c8ebbd564aa25a17c60c549107..bb9aff9f3067b6249447287f5d9f9c6fe86c88d5 100644
+index 47464536adb99db48f1e5d2c28ba371a11646812..171207e4ba1a21143ea1db8b1d3646df50256484 100644
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
@@ -1418,6 +1418,19 @@ public final class CraftServer implements Server {
diff --git a/patches/server/0244-Option-for-if-rain-and-thunder-should-stop-on-sleep.patch b/patches/server/0243-Option-for-if-rain-and-thunder-should-stop-on-sleep.patch
similarity index 97%
rename from patches/server/0244-Option-for-if-rain-and-thunder-should-stop-on-sleep.patch
rename to patches/server/0243-Option-for-if-rain-and-thunder-should-stop-on-sleep.patch
index 93dd0a704..cbe2902f0 100644
--- a/patches/server/0244-Option-for-if-rain-and-thunder-should-stop-on-sleep.patch
+++ b/patches/server/0243-Option-for-if-rain-and-thunder-should-stop-on-sleep.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] Option for if rain and thunder should stop on sleep
diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java
-index 54c80d7ebb67598cc1b77d259f3b3fcaa35eca7e..87875413ba3781d3e100bd735afaa16ccf686027 100644
+index 1203129171a5a3da9ef67f6a1b94ea8622cbfbb4..5787558d17d8fbb912b317f90e1a45f3c75678f5 100644
--- a/src/main/java/net/minecraft/server/level/ServerLevel.java
+++ b/src/main/java/net/minecraft/server/level/ServerLevel.java
@@ -1113,6 +1113,7 @@ public class ServerLevel extends Level implements WorldGenLevel {
diff --git a/patches/server/0245-Chance-for-azalea-blocks-to-grow-into-trees-naturall.patch b/patches/server/0244-Chance-for-azalea-blocks-to-grow-into-trees-naturall.patch
similarity index 100%
rename from patches/server/0245-Chance-for-azalea-blocks-to-grow-into-trees-naturall.patch
rename to patches/server/0244-Chance-for-azalea-blocks-to-grow-into-trees-naturall.patch
diff --git a/patches/server/0246-Shift-right-click-to-use-exp-for-mending.patch b/patches/server/0245-Shift-right-click-to-use-exp-for-mending.patch
similarity index 98%
rename from patches/server/0246-Shift-right-click-to-use-exp-for-mending.patch
rename to patches/server/0245-Shift-right-click-to-use-exp-for-mending.patch
index 949cec637..8ce9be83c 100644
--- a/patches/server/0246-Shift-right-click-to-use-exp-for-mending.patch
+++ b/patches/server/0245-Shift-right-click-to-use-exp-for-mending.patch
@@ -36,7 +36,7 @@ index a61c0ca02b085d1ab2587d54c9fcdc76a726cc4e..a11a7deefb7fdf7ca9b23f85f5ae5f7c
+ // Purpur end
}
diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
-index 0118796efe4ee2d89315dfb4a40ead13d2f46a44..54b837d3a70862622a3e6d2a5f900eff4ead9103 100644
+index 2daf8dc51b78f4466f41136c2d99be6dc0981eb2..2696abd88be8e4c0e5789c2c1364cc37c6eab484 100644
--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
@@ -1936,6 +1936,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Ser
diff --git a/patches/server/0247-Dolphins-naturally-aggressive-to-players-chance.patch b/patches/server/0246-Dolphins-naturally-aggressive-to-players-chance.patch
similarity index 100%
rename from patches/server/0247-Dolphins-naturally-aggressive-to-players-chance.patch
rename to patches/server/0246-Dolphins-naturally-aggressive-to-players-chance.patch
diff --git a/patches/server/0248-Cows-naturally-aggressive-to-players-chance.patch b/patches/server/0247-Cows-naturally-aggressive-to-players-chance.patch
similarity index 100%
rename from patches/server/0248-Cows-naturally-aggressive-to-players-chance.patch
rename to patches/server/0247-Cows-naturally-aggressive-to-players-chance.patch
diff --git a/patches/server/0249-Option-for-beds-to-explode-on-villager-sleep.patch b/patches/server/0248-Option-for-beds-to-explode-on-villager-sleep.patch
similarity index 100%
rename from patches/server/0249-Option-for-beds-to-explode-on-villager-sleep.patch
rename to patches/server/0248-Option-for-beds-to-explode-on-villager-sleep.patch
diff --git a/patches/server/0250-horses-tempted-by-gold-config.patch b/patches/server/0249-horses-tempted-by-gold-config.patch
similarity index 100%
rename from patches/server/0250-horses-tempted-by-gold-config.patch
rename to patches/server/0249-horses-tempted-by-gold-config.patch
diff --git a/patches/server/0251-llama-tempted-by-hay-config.patch b/patches/server/0250-llama-tempted-by-hay-config.patch
similarity index 100%
rename from patches/server/0251-llama-tempted-by-hay-config.patch
rename to patches/server/0250-llama-tempted-by-hay-config.patch
diff --git a/patches/server/0252-Halloween-options-and-optimizations.patch b/patches/server/0251-Halloween-options-and-optimizations.patch
similarity index 98%
rename from patches/server/0252-Halloween-options-and-optimizations.patch
rename to patches/server/0251-Halloween-options-and-optimizations.patch
index 0d16f88cc..ef70d4875 100644
--- a/patches/server/0252-Halloween-options-and-optimizations.patch
+++ b/patches/server/0251-Halloween-options-and-optimizations.patch
@@ -43,7 +43,7 @@ index 5b19d8db09867791782c899d41d314c511f6c8a2..3d8b1b8d49af74babf628231345ac1c1
this.armorDropChances[EquipmentSlot.HEAD.getIndex()] = 0.0F;
}
diff --git a/src/main/java/net/minecraft/world/entity/monster/Zombie.java b/src/main/java/net/minecraft/world/entity/monster/Zombie.java
-index 4ccc743cba68f9af2d1663a28bfe94d48e478c97..52820c4f09e5e6f542c8835ea5be7cfb962a5df4 100644
+index 6c253894866b870e79e110efd7eaf306aa5d7af5..d5ecaf051ec86b5dd9d1fde6af5bf6cd445dccc0 100644
--- a/src/main/java/net/minecraft/world/entity/monster/Zombie.java
+++ b/src/main/java/net/minecraft/world/entity/monster/Zombie.java
@@ -568,11 +568,7 @@ public class Zombie extends Monster {
diff --git a/patches/server/0253-Config-for-Grindstones-ignoring-curses.patch b/patches/server/0252-Config-for-Grindstones-ignoring-curses.patch
similarity index 100%
rename from patches/server/0253-Config-for-Grindstones-ignoring-curses.patch
rename to patches/server/0252-Config-for-Grindstones-ignoring-curses.patch
diff --git a/patches/server/0254-UPnP-Port-Forwarding.patch b/patches/server/0253-UPnP-Port-Forwarding.patch
similarity index 96%
rename from patches/server/0254-UPnP-Port-Forwarding.patch
rename to patches/server/0253-UPnP-Port-Forwarding.patch
index b5309e526..03ed7b006 100644
--- a/patches/server/0254-UPnP-Port-Forwarding.patch
+++ b/patches/server/0253-UPnP-Port-Forwarding.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] UPnP Port Forwarding
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
-index 80e81d4482f4e4451150d3d3cc8fe244be35d6e9..f415108a98fdb0c4e1c569452e387c3defa4211f 100644
+index d71b5595dc2795f48007c07ce59bb5b19a80ff52..bf747e14837699cbd95819bc2a98cdf4057f0137 100644
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
@@ -311,6 +311,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop