diff --git a/patches/api/0004-Add-FastUtil-to-Bukkit.patch b/patches/api/0004-Add-FastUtil-to-Bukkit.patch
index e8baa9e798..69ee473cac 100644
--- a/patches/api/0004-Add-FastUtil-to-Bukkit.patch
+++ b/patches/api/0004-Add-FastUtil-to-Bukkit.patch
@@ -6,7 +6,7 @@ Subject: [PATCH] Add FastUtil to Bukkit
Doesn't expose to plugins, just allows Paper-API to use it for optimization
diff --git a/build.gradle.kts b/build.gradle.kts
-index b38a9f4d628fa639e5d2b7dcd5a63f0bf6b8330b..19720f73cb8454d6ddd8d75e7d08556d61436505 100644
+index bb8dcc075bf69cda47ddd138ee36ab9ac59a2d50..808817bad1a175e61eb80f3624ab86547ce30a6b 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -22,6 +22,7 @@ dependencies {
diff --git a/patches/api/0007-Use-ASM-for-event-executors.patch b/patches/api/0007-Use-ASM-for-event-executors.patch
index 1ba536fbbb..38b3d18c6d 100644
--- a/patches/api/0007-Use-ASM-for-event-executors.patch
+++ b/patches/api/0007-Use-ASM-for-event-executors.patch
@@ -6,7 +6,7 @@ Subject: [PATCH] Use ASM for event executors.
Uses method handles for private or static methods.
diff --git a/build.gradle.kts b/build.gradle.kts
-index cbab63d2f3b045f6193f5a3422ae4b5509d3003b..ba6f0a70ba2442dbe60ed6cc92e4fb91a48d9f3b 100644
+index 9507e05242212f71637f5f2138e4ea8cf2f1d7f8..12e9f88b1cd8a6d7a333aebcb514cf6dced7af17 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -42,6 +42,9 @@ dependencies {
diff --git a/patches/api/0008-Paper-Plugins.patch b/patches/api/0008-Paper-Plugins.patch
index 436222ecde..b8ca5f871c 100644
--- a/patches/api/0008-Paper-Plugins.patch
+++ b/patches/api/0008-Paper-Plugins.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] Paper Plugins
diff --git a/build.gradle.kts b/build.gradle.kts
-index 9c24107008c7fb7a00b8317cc62592af3620dcbe..4cd5514efa238828427ade4fd90ae72b24d7afe2 100644
+index 12e9f88b1cd8a6d7a333aebcb514cf6dced7af17..edb6312978c58f45cb6b8db7ac475e26896d709f 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -47,7 +47,7 @@ dependencies {
diff --git a/patches/api/0011-Add-command-line-option-to-load-extra-plugin-jars-no.patch b/patches/api/0011-Add-command-line-option-to-load-extra-plugin-jars-no.patch
index d0a062d1ff..e80ab59f2c 100644
--- a/patches/api/0011-Add-command-line-option-to-load-extra-plugin-jars-no.patch
+++ b/patches/api/0011-Add-command-line-option-to-load-extra-plugin-jars-no.patch
@@ -7,7 +7,7 @@ Subject: [PATCH] Add command line option to load extra plugin jars not in the
ex: java -jar paperclip.jar nogui -add-plugin=/path/to/plugin.jar -add-plugin=/path/to/another/plugin_jar.jar
diff --git a/src/main/java/org/bukkit/Bukkit.java b/src/main/java/org/bukkit/Bukkit.java
-index 45f9ac35874c67c24718f6891b95df1ff4f0b93f..7717f5346aa784df4a0f6e43a5a74a66f279bc8a 100644
+index 8d101352f72fc7fa21e0ba68039c79ce2fb92eb9..b5bdefc93d8614b5efbfd6e4c975275b9b53868c 100644
--- a/src/main/java/org/bukkit/Bukkit.java
+++ b/src/main/java/org/bukkit/Bukkit.java
@@ -78,6 +78,20 @@ public final class Bukkit {
@@ -32,7 +32,7 @@ index 45f9ac35874c67c24718f6891b95df1ff4f0b93f..7717f5346aa784df4a0f6e43a5a74a66
* Attempts to set the {@link Server} singleton.
*
diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java
-index 087da3cd2cafd8255ed70e5e632b270a33e37eaf..0f990d33ab07249e4cf2d2269920b4cbeed27d39 100644
+index 3e642d8a0294f7290c3d4310813e6e8a467810e7..d4d87ce99ad757733a0f2dd1a02eb79f4ee7972f 100644
--- a/src/main/java/org/bukkit/Server.java
+++ b/src/main/java/org/bukkit/Server.java
@@ -63,6 +63,18 @@ import org.jetbrains.annotations.Nullable;
diff --git a/patches/api/0013-Add-getTPS-method.patch b/patches/api/0013-Add-getTPS-method.patch
index 7c2ca86cfc..75ce246bd3 100644
--- a/patches/api/0013-Add-getTPS-method.patch
+++ b/patches/api/0013-Add-getTPS-method.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] Add getTPS method
diff --git a/src/main/java/org/bukkit/Bukkit.java b/src/main/java/org/bukkit/Bukkit.java
-index 7717f5346aa784df4a0f6e43a5a74a66f279bc8a..fba3e617a8847a3e9282e6a1a389132b2ad5511c 100644
+index b5bdefc93d8614b5efbfd6e4c975275b9b53868c..67ef3471a5ded760950459db5e65d20ca18af967 100644
--- a/src/main/java/org/bukkit/Bukkit.java
+++ b/src/main/java/org/bukkit/Bukkit.java
@@ -1964,6 +1964,17 @@ public final class Bukkit {
@@ -27,7 +27,7 @@ index 7717f5346aa784df4a0f6e43a5a74a66f279bc8a..fba3e617a8847a3e9282e6a1a389132b
* Get the advancement specified by this key.
*
diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java
-index 0f990d33ab07249e4cf2d2269920b4cbeed27d39..c8cf66e64a3163c2bdf781f3ce52059546969b9b 100644
+index d4d87ce99ad757733a0f2dd1a02eb79f4ee7972f..3b273e3ef2160ea3e436cabdfc4b33f605ab82c6 100644
--- a/src/main/java/org/bukkit/Server.java
+++ b/src/main/java/org/bukkit/Server.java
@@ -1672,6 +1672,16 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi
diff --git a/patches/api/0020-Expose-server-CommandMap.patch b/patches/api/0020-Expose-server-CommandMap.patch
index d335e297f9..5705e18894 100644
--- a/patches/api/0020-Expose-server-CommandMap.patch
+++ b/patches/api/0020-Expose-server-CommandMap.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] Expose server CommandMap
diff --git a/src/main/java/org/bukkit/Bukkit.java b/src/main/java/org/bukkit/Bukkit.java
-index fba3e617a8847a3e9282e6a1a389132b2ad5511c..acb34296923fb27cfc28c130cf0b5405cfe340f6 100644
+index 67ef3471a5ded760950459db5e65d20ca18af967..b53e94d79862d66165bbcd2a79b82770398a7f3e 100644
--- a/src/main/java/org/bukkit/Bukkit.java
+++ b/src/main/java/org/bukkit/Bukkit.java
@@ -2165,6 +2165,19 @@ public final class Bukkit {
@@ -29,7 +29,7 @@ index fba3e617a8847a3e9282e6a1a389132b2ad5511c..acb34296923fb27cfc28c130cf0b5405
public static Server.Spigot spigot() {
return server.spigot();
diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java
-index c8cf66e64a3163c2bdf781f3ce52059546969b9b..5b3c34b01038849b1463870ccf657b11db82cd09 100644
+index 3b273e3ef2160ea3e436cabdfc4b33f605ab82c6..124e88e512d24b6ff7ace3cf7d5a6adf4c2bb40d 100644
--- a/src/main/java/org/bukkit/Server.java
+++ b/src/main/java/org/bukkit/Server.java
@@ -1682,6 +1682,15 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi
diff --git a/patches/api/0021-Graduate-bungeecord-chat-API-from-spigot-subclasses.patch b/patches/api/0021-Graduate-bungeecord-chat-API-from-spigot-subclasses.patch
index 28f44055a3..a6dae18ce6 100644
--- a/patches/api/0021-Graduate-bungeecord-chat-API-from-spigot-subclasses.patch
+++ b/patches/api/0021-Graduate-bungeecord-chat-API-from-spigot-subclasses.patch
@@ -76,7 +76,7 @@ index 124e88e512d24b6ff7ace3cf7d5a6adf4c2bb40d..ccc825a2ea43bb84a5a08dff00c4d8ec
* Gets the name of the update folder. The update folder is used to safely
* update plugins at the right moment on a plugin load.
diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java
-index f8e45f70fe23cf73c8677b5d24cefcd3aae5e24e..f52e7d4e5b8399d04d77384f8fe5315086acd776 100644
+index c8347316f6c54916e07a6f7086b99775c4d2c802..ad516f99f7f5345c567acbb9dfa54bad0896f4a0 100644
--- a/src/main/java/org/bukkit/entity/Player.java
+++ b/src/main/java/org/bukkit/entity/Player.java
@@ -1041,6 +1041,42 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
diff --git a/patches/api/0023-Add-BaseComponent-sendMessage-methods-to-CommandSend.patch b/patches/api/0023-Add-BaseComponent-sendMessage-methods-to-CommandSend.patch
index 4e0810d49b..02e7138c10 100644
--- a/patches/api/0023-Add-BaseComponent-sendMessage-methods-to-CommandSend.patch
+++ b/patches/api/0023-Add-BaseComponent-sendMessage-methods-to-CommandSend.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] Add BaseComponent sendMessage methods to CommandSender
diff --git a/src/main/java/org/bukkit/command/CommandSender.java b/src/main/java/org/bukkit/command/CommandSender.java
-index 0f2b85e4979c478fbcc20bd67446e6ac8c8696d7..5c8ae3e0a927f2f2924d719b03499d936cf4d951 100644
+index 70fec73328227725f519af845ecbdce8be2fa4e2..04e7cd0e4e2d0eb38fb2862ce6688a4470f30d6b 100644
--- a/src/main/java/org/bukkit/command/CommandSender.java
+++ b/src/main/java/org/bukkit/command/CommandSender.java
@@ -1,6 +1,9 @@
diff --git a/patches/api/0025-Player-Tab-List-and-Title-APIs.patch b/patches/api/0025-Player-Tab-List-and-Title-APIs.patch
index fe2c52a402..017a0f21dc 100644
--- a/patches/api/0025-Player-Tab-List-and-Title-APIs.patch
+++ b/patches/api/0025-Player-Tab-List-and-Title-APIs.patch
@@ -432,7 +432,7 @@ index 0000000000000000000000000000000000000000..9e90c3df567a65b48a0b9341f784eb90
+ }
+}
diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java
-index f52e7d4e5b8399d04d77384f8fe5315086acd776..3650fb2b79368ad39278062f215d25cc99637cac 100644
+index ad516f99f7f5345c567acbb9dfa54bad0896f4a0..02febdfdd45ee79b659fed23a54886371feded0f 100644
--- a/src/main/java/org/bukkit/entity/Player.java
+++ b/src/main/java/org/bukkit/entity/Player.java
@@ -1075,6 +1075,131 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
diff --git a/patches/api/0030-Add-command-to-reload-permissions.yml-and-require-co.patch b/patches/api/0030-Add-command-to-reload-permissions.yml-and-require-co.patch
index 6f09311d3f..8d83e324a5 100644
--- a/patches/api/0030-Add-command-to-reload-permissions.yml-and-require-co.patch
+++ b/patches/api/0030-Add-command-to-reload-permissions.yml-and-require-co.patch
@@ -6,7 +6,7 @@ Subject: [PATCH] Add command to reload permissions.yml and require confirm to
diff --git a/src/main/java/org/bukkit/Bukkit.java b/src/main/java/org/bukkit/Bukkit.java
-index 88cbb61a855d77fe6840be48140261032c5a38b8..540c57e82247eaad2cae1ab0199caf2a6cabcab1 100644
+index 9417030074fccdd9113bf75eb8f17f74b9a9118b..9003a603b6bf82a7b6f04fa027cdc889cf7c274f 100644
--- a/src/main/java/org/bukkit/Bukkit.java
+++ b/src/main/java/org/bukkit/Bukkit.java
@@ -2200,6 +2200,13 @@ public final class Bukkit {
@@ -24,7 +24,7 @@ index 88cbb61a855d77fe6840be48140261032c5a38b8..540c57e82247eaad2cae1ab0199caf2a
@NotNull
diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java
-index 7edaadd0a99fd8bbe3c683a126efd29993ed596c..f3452f65e6b69e8a2f0942c7a6afb9837a6d88fd 100644
+index ccc825a2ea43bb84a5a08dff00c4d8ec27e4e95a..45e628f6c47945ce008d8436e3b13325bb5084d8 100644
--- a/src/main/java/org/bukkit/Server.java
+++ b/src/main/java/org/bukkit/Server.java
@@ -1943,4 +1943,6 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi
diff --git a/patches/api/0043-Allow-Reloading-of-Command-Aliases.patch b/patches/api/0043-Allow-Reloading-of-Command-Aliases.patch
index 58204dcd0a..8ca2b8993d 100644
--- a/patches/api/0043-Allow-Reloading-of-Command-Aliases.patch
+++ b/patches/api/0043-Allow-Reloading-of-Command-Aliases.patch
@@ -6,7 +6,7 @@ Subject: [PATCH] Allow Reloading of Command Aliases
Reload the aliases stored in commands.yml
diff --git a/src/main/java/org/bukkit/Bukkit.java b/src/main/java/org/bukkit/Bukkit.java
-index 540c57e82247eaad2cae1ab0199caf2a6cabcab1..abbafce790d30bab81b40c6c973d21f09d3d24ef 100644
+index 9003a603b6bf82a7b6f04fa027cdc889cf7c274f..297f7befdac5c45efb1c9f432c49696814f513ab 100644
--- a/src/main/java/org/bukkit/Bukkit.java
+++ b/src/main/java/org/bukkit/Bukkit.java
@@ -2207,6 +2207,15 @@ public final class Bukkit {
@@ -26,7 +26,7 @@ index 540c57e82247eaad2cae1ab0199caf2a6cabcab1..abbafce790d30bab81b40c6c973d21f0
@NotNull
diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java
-index f3452f65e6b69e8a2f0942c7a6afb9837a6d88fd..925e3e32bf971efc08fd39d1e10d83bb0c6e8634 100644
+index 45e628f6c47945ce008d8436e3b13325bb5084d8..d80e9a6770c565c2cdb6bea6ad14969a6a6d0dad 100644
--- a/src/main/java/org/bukkit/Server.java
+++ b/src/main/java/org/bukkit/Server.java
@@ -1945,4 +1945,6 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi
diff --git a/patches/api/0046-Add-String-based-Action-Bar-API.patch b/patches/api/0046-Add-String-based-Action-Bar-API.patch
index 8a43bbc9c0..2c1e50fcd0 100644
--- a/patches/api/0046-Add-String-based-Action-Bar-API.patch
+++ b/patches/api/0046-Add-String-based-Action-Bar-API.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] Add String based Action Bar API
diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java
-index 967ea421aed7f9d4c8edd366c00cf3ceca723b2f..87b67723cb9dcead110eb88dd741d3348eb9ec1b 100644
+index a63a4053c8a17284cd302db1fb6b6b673310ae44..f9ff1d74d58e50a8e46698e4704fe3c32390af8a 100644
--- a/src/main/java/org/bukkit/entity/Player.java
+++ b/src/main/java/org/bukkit/entity/Player.java
@@ -1042,6 +1042,39 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
diff --git a/patches/api/0054-Add-configuration-option-to-prevent-player-names-fro.patch b/patches/api/0054-Add-configuration-option-to-prevent-player-names-fro.patch
index 976eca824f..dd9d692387 100644
--- a/patches/api/0054-Add-configuration-option-to-prevent-player-names-fro.patch
+++ b/patches/api/0054-Add-configuration-option-to-prevent-player-names-fro.patch
@@ -6,7 +6,7 @@ Subject: [PATCH] Add configuration option to prevent player names from being
diff --git a/src/main/java/org/bukkit/Bukkit.java b/src/main/java/org/bukkit/Bukkit.java
-index abbafce790d30bab81b40c6c973d21f09d3d24ef..4665d42f167d587ec3edaf6432eef0a5a883401f 100644
+index 297f7befdac5c45efb1c9f432c49696814f513ab..add298a1a0b6f6dbd72fe9e8f87794d193760fb7 100644
--- a/src/main/java/org/bukkit/Bukkit.java
+++ b/src/main/java/org/bukkit/Bukkit.java
@@ -2216,6 +2216,16 @@ public final class Bukkit {
@@ -27,7 +27,7 @@ index abbafce790d30bab81b40c6c973d21f09d3d24ef..4665d42f167d587ec3edaf6432eef0a5
@NotNull
diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java
-index 925e3e32bf971efc08fd39d1e10d83bb0c6e8634..7b95c1049ec365b8a1c20e5e18f6a79d4042fa38 100644
+index d80e9a6770c565c2cdb6bea6ad14969a6a6d0dad..22d508a6c80d7e19352bceb57009fdbcb16bc723 100644
--- a/src/main/java/org/bukkit/Server.java
+++ b/src/main/java/org/bukkit/Server.java
@@ -1947,4 +1947,14 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi
diff --git a/patches/api/0055-Fix-upstream-javadocs.patch b/patches/api/0055-Fix-upstream-javadocs.patch
index f5dfd1b744..3d53b389c4 100644
--- a/patches/api/0055-Fix-upstream-javadocs.patch
+++ b/patches/api/0055-Fix-upstream-javadocs.patch
@@ -405,7 +405,7 @@ index ae9eaaa8e38e1d9dfc459926c7fc51ddb89de84a..b2ec535bb1b0ce0c114ddd7638b90218
@Override
public int getConversionTime();
diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java
-index 87b67723cb9dcead110eb88dd741d3348eb9ec1b..266e89b48d4991f6099290cf9d44fa06b43ffa2c 100644
+index f9ff1d74d58e50a8e46698e4704fe3c32390af8a..7c97450f9fe2eebe03a1c30eb080d3d3624eefb8 100644
--- a/src/main/java/org/bukkit/entity/Player.java
+++ b/src/main/java/org/bukkit/entity/Player.java
@@ -431,15 +431,15 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
diff --git a/patches/api/0059-Basic-PlayerProfile-API.patch b/patches/api/0059-Basic-PlayerProfile-API.patch
index d4887664bc..a145986a49 100644
--- a/patches/api/0059-Basic-PlayerProfile-API.patch
+++ b/patches/api/0059-Basic-PlayerProfile-API.patch
@@ -321,7 +321,7 @@ index 0000000000000000000000000000000000000000..7b3b6ef533d32169fbeca389bd61cfc6
+ }
+}
diff --git a/src/main/java/org/bukkit/Bukkit.java b/src/main/java/org/bukkit/Bukkit.java
-index ae017e210a54e78ecd14117ac939e1bb3da4497a..047676a7ea94bf26c8dd0552c72760bcc264218f 100644
+index b21f90f291a087b6282cd7b55e0075a01729f0ba..dcd539220e5a2bda41f27101ea4c0ece146e1d0d 100644
--- a/src/main/java/org/bukkit/Bukkit.java
+++ b/src/main/java/org/bukkit/Bukkit.java
@@ -2228,6 +2228,83 @@ public final class Bukkit {
@@ -409,7 +409,7 @@ index ae017e210a54e78ecd14117ac939e1bb3da4497a..047676a7ea94bf26c8dd0552c72760bc
@NotNull
diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java
-index e1211bb9c3186ffb1c5c7b858b8bab50bf87df9f..94192cfe9bb15c0083cf28761bc3f0f6bb19aa8d 100644
+index 3c1862b9a9293155f756615b5bd23cc810a6df5e..016cee903c7179baf711984503d1d0793d40c5c5 100644
--- a/src/main/java/org/bukkit/Server.java
+++ b/src/main/java/org/bukkit/Server.java
@@ -1955,5 +1955,74 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi
diff --git a/patches/api/0067-LivingEntity-setKiller.patch b/patches/api/0067-LivingEntity-setKiller.patch
index b73c828ca5..632b924756 100644
--- a/patches/api/0067-LivingEntity-setKiller.patch
+++ b/patches/api/0067-LivingEntity-setKiller.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] LivingEntity#setKiller
diff --git a/src/main/java/org/bukkit/entity/LivingEntity.java b/src/main/java/org/bukkit/entity/LivingEntity.java
-index c094070f8399586af7e02fe4ed489c82080f3678..ae201851aa00d47da37cca087ec9f8c03738a94a 100644
+index 390bb294d09389877937ee2c6c3f346e65dfb178..6a9df4ec0eee205bcd37de9c4d04a6c67eb21644 100644
--- a/src/main/java/org/bukkit/entity/LivingEntity.java
+++ b/src/main/java/org/bukkit/entity/LivingEntity.java
@@ -319,6 +319,15 @@ public interface LivingEntity extends Attributable, Damageable, ProjectileSource
diff --git a/patches/api/0069-Allow-plugins-to-use-SLF4J-for-logging.patch b/patches/api/0069-Allow-plugins-to-use-SLF4J-for-logging.patch
index 4058544148..d3f8572c36 100644
--- a/patches/api/0069-Allow-plugins-to-use-SLF4J-for-logging.patch
+++ b/patches/api/0069-Allow-plugins-to-use-SLF4J-for-logging.patch
@@ -14,7 +14,7 @@ it without having to shade it in the plugin and going through
several layers of logging abstraction.
diff --git a/build.gradle.kts b/build.gradle.kts
-index 713f5d73743007d47eca70167058f207626d2298..460bd4029b5a01e39b2322e69aecc128a073ee3a 100644
+index edb6312978c58f45cb6b8db7ac475e26896d709f..0b9530ae4542c55c77294185a61d1d739d0eaac2 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -11,6 +11,8 @@ java {
diff --git a/patches/api/0076-Expose-client-protocol-version-and-virtual-host.patch b/patches/api/0076-Expose-client-protocol-version-and-virtual-host.patch
index dd1f98147d..292c3441ac 100644
--- a/patches/api/0076-Expose-client-protocol-version-and-virtual-host.patch
+++ b/patches/api/0076-Expose-client-protocol-version-and-virtual-host.patch
@@ -57,7 +57,7 @@ index 0000000000000000000000000000000000000000..7b2af1bd72dfbcf4e962a982940fc49b
+
+}
diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java
-index bb9f28d1a0290c5951412de1d2de8c2e6e354369..c1c2e8d9d6ff39ca6cdabb0744076cc540f86681 100644
+index 7c97450f9fe2eebe03a1c30eb080d3d3624eefb8..f69d918381f706c21a55e2604564714cb74cba54 100644
--- a/src/main/java/org/bukkit/entity/Player.java
+++ b/src/main/java/org/bukkit/entity/Player.java
@@ -51,7 +51,7 @@ import org.jetbrains.annotations.Nullable;
diff --git a/patches/api/0080-Ability-to-apply-mending-to-XP-API.patch b/patches/api/0080-Ability-to-apply-mending-to-XP-API.patch
index 16583a8716..03d373a706 100644
--- a/patches/api/0080-Ability-to-apply-mending-to-XP-API.patch
+++ b/patches/api/0080-Ability-to-apply-mending-to-XP-API.patch
@@ -10,7 +10,7 @@ of giving the player experience points.
Both an API To standalone mend, and apply mending logic to .giveExp has been added.
diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java
-index 6586262b6dfcb0b022d78096b7d4ec339c0b396c..2257a1808d19775607e60c155d9e5508e7825811 100644
+index f69d918381f706c21a55e2604564714cb74cba54..90e7a703934697875edc3c3ca892cc51c598fac1 100644
--- a/src/main/java/org/bukkit/entity/Player.java
+++ b/src/main/java/org/bukkit/entity/Player.java
@@ -1368,6 +1368,15 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
diff --git a/patches/api/0092-getPlayerUniqueId-API.patch b/patches/api/0092-getPlayerUniqueId-API.patch
index 24f46585be..7c703e645d 100644
--- a/patches/api/0092-getPlayerUniqueId-API.patch
+++ b/patches/api/0092-getPlayerUniqueId-API.patch
@@ -9,7 +9,7 @@ In Offline Mode, will return an Offline UUID
This is a more performant way to obtain a UUID for a name than loading an OfflinePlayer
diff --git a/src/main/java/org/bukkit/Bukkit.java b/src/main/java/org/bukkit/Bukkit.java
-index 5b9d04de045a83e786df4bf9bfe2fc50835247bb..67c92e10b38af2ac45c1d9b6374695247bf1e7c3 100644
+index f5358612884aae8d0686f3ff98ccee567a746f16..a6f9336f27cb4a7aed0c01cde417d2287e393929 100644
--- a/src/main/java/org/bukkit/Bukkit.java
+++ b/src/main/java/org/bukkit/Bukkit.java
@@ -688,6 +688,20 @@ public final class Bukkit {
@@ -34,7 +34,7 @@ index 5b9d04de045a83e786df4bf9bfe2fc50835247bb..67c92e10b38af2ac45c1d9b637469524
* Gets the plugin manager for interfacing with plugins.
*
diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java
-index 9865238afb71f19b5c1cc7c414ea3a637f9fc00c..88b93ac279f2bd23ca853788c409549fe2afe041 100644
+index 064edd612885b2ea4b35001a864503b568c53987..dfbccef8dd67195d588112989a9ffecb712a9fe9 100644
--- a/src/main/java/org/bukkit/Server.java
+++ b/src/main/java/org/bukkit/Server.java
@@ -592,6 +592,18 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi
diff --git a/patches/api/0095-Add-Ban-Methods-to-Player-Objects.patch b/patches/api/0095-Add-Ban-Methods-to-Player-Objects.patch
index a2ee71d3c7..384b98675c 100644
--- a/patches/api/0095-Add-Ban-Methods-to-Player-Objects.patch
+++ b/patches/api/0095-Add-Ban-Methods-to-Player-Objects.patch
@@ -74,7 +74,7 @@ index 12349910297a75c00e64f6ccc7981aeeeb43ecd3..8f2f3e0ac5266f571b62a754921422bb
/**
* Adds this user to the {@link ProfileBanList}. If a previous ban exists, this will
diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java
-index 8e7482df076c41ae12813e64153206851e020764..6cbb64d4555a3741d0f4938c1850f64d055a3ac4 100644
+index a8213398be954a6cebef8658e62600e0fffe1759..01555373317beafc506f1c7559f7107cd738ac4f 100644
--- a/src/main/java/org/bukkit/entity/Player.java
+++ b/src/main/java/org/bukkit/entity/Player.java
@@ -1042,6 +1042,162 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
diff --git a/patches/api/0119-InventoryCloseEvent-Reason-API.patch b/patches/api/0119-InventoryCloseEvent-Reason-API.patch
index e02998791d..e8d8154e21 100644
--- a/patches/api/0119-InventoryCloseEvent-Reason-API.patch
+++ b/patches/api/0119-InventoryCloseEvent-Reason-API.patch
@@ -27,7 +27,7 @@ index 9e012c3c0671e5d0e55c243fdb4e14057038c153..d44c5a3fda0b159dc541246cb2fca842
* Returns the ItemStack currently in your hand, can be empty.
*
diff --git a/src/main/java/org/bukkit/event/inventory/InventoryCloseEvent.java b/src/main/java/org/bukkit/event/inventory/InventoryCloseEvent.java
-index 3cf2e2e87b8021f4c5e046b22ed89798b4172ae7..d527e3d7ba8d5b8c044e5a04ebdb9a2c117f22c7 100644
+index c0cc82d98348e8aae3cb56bafb2fcb590b03094f..4db0a07db156c61867644f50c185e63b695e2462 100644
--- a/src/main/java/org/bukkit/event/inventory/InventoryCloseEvent.java
+++ b/src/main/java/org/bukkit/event/inventory/InventoryCloseEvent.java
@@ -30,9 +30,60 @@ import org.jetbrains.annotations.NotNull;
diff --git a/patches/api/0128-Expand-Location-Manipulation-API.patch b/patches/api/0128-Expand-Location-Manipulation-API.patch
index 3820295c2e..05fe72fd36 100644
--- a/patches/api/0128-Expand-Location-Manipulation-API.patch
+++ b/patches/api/0128-Expand-Location-Manipulation-API.patch
@@ -6,7 +6,7 @@ Subject: [PATCH] Expand Location Manipulation API
Adds set(x, y, z), add(base, x, y, z), subtract(base, x, y, z);
diff --git a/src/main/java/org/bukkit/Location.java b/src/main/java/org/bukkit/Location.java
-index 5a6b33c6d9a68affdbd02c13fdb0854e011e327d..943c3364f6b931fe11f9a6099504590b2da34657 100644
+index b7ff09ffdd3aecc1843d175bc76fe5fae1f48dde..aa6821aa33d3c579a139bd7c0378253c43b3754a 100644
--- a/src/main/java/org/bukkit/Location.java
+++ b/src/main/java/org/bukkit/Location.java
@@ -546,6 +546,54 @@ public class Location implements Cloneable, ConfigurationSerializable, io.paperm
diff --git a/patches/api/0135-Allow-Blocks-to-be-accessed-via-a-long-key.patch b/patches/api/0135-Allow-Blocks-to-be-accessed-via-a-long-key.patch
index 7a00e59951..404eb3b27c 100644
--- a/patches/api/0135-Allow-Blocks-to-be-accessed-via-a-long-key.patch
+++ b/patches/api/0135-Allow-Blocks-to-be-accessed-via-a-long-key.patch
@@ -18,7 +18,7 @@ Y range: [0, 1023]
X, Z range: [-67 108 864, 67 108 863]
diff --git a/src/main/java/org/bukkit/Location.java b/src/main/java/org/bukkit/Location.java
-index 943c3364f6b931fe11f9a6099504590b2da34657..16a604b6315daff228c827fe02b1234cca3e884d 100644
+index aa6821aa33d3c579a139bd7c0378253c43b3754a..6e6e65c40813ccce618fa7a3df2c0030aa0a3bbe 100644
--- a/src/main/java/org/bukkit/Location.java
+++ b/src/main/java/org/bukkit/Location.java
@@ -15,7 +15,6 @@ import org.jetbrains.annotations.Nullable;
diff --git a/patches/api/0140-isChunkGenerated-API.patch b/patches/api/0140-isChunkGenerated-API.patch
index 89db698163..8a28a246dd 100644
--- a/patches/api/0140-isChunkGenerated-API.patch
+++ b/patches/api/0140-isChunkGenerated-API.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] isChunkGenerated API
diff --git a/src/main/java/org/bukkit/Location.java b/src/main/java/org/bukkit/Location.java
-index 16a604b6315daff228c827fe02b1234cca3e884d..20978b269a7757a561d6b872cc77898b44bbd272 100644
+index 6e6e65c40813ccce618fa7a3df2c0030aa0a3bbe..8508aa2c6fb7c9f41f3d185f5228c86dd3b8b627 100644
--- a/src/main/java/org/bukkit/Location.java
+++ b/src/main/java/org/bukkit/Location.java
@@ -3,6 +3,7 @@ package org.bukkit;
diff --git a/patches/api/0143-Add-ray-tracing-methods-to-LivingEntity.patch b/patches/api/0143-Add-ray-tracing-methods-to-LivingEntity.patch
index b2299ab712..53018a8cb6 100644
--- a/patches/api/0143-Add-ray-tracing-methods-to-LivingEntity.patch
+++ b/patches/api/0143-Add-ray-tracing-methods-to-LivingEntity.patch
@@ -78,7 +78,7 @@ index 0000000000000000000000000000000000000000..c896d172519a8552a132031cb956378d
+ }
+}
diff --git a/src/main/java/org/bukkit/entity/LivingEntity.java b/src/main/java/org/bukkit/entity/LivingEntity.java
-index 17e5d2e2acdae23d8ea3b3b1a89f62e8be7b81a8..8cccec99cdb028e86b71b3984f4f94201fd9a390 100644
+index 97d0f82041a229e85217a7e575bf003eddc31b70..8a18f269ee1767d57367160cb0e3513a4e2969fb 100644
--- a/src/main/java/org/bukkit/entity/LivingEntity.java
+++ b/src/main/java/org/bukkit/entity/LivingEntity.java
@@ -83,6 +83,98 @@ public interface LivingEntity extends Attributable, Damageable, ProjectileSource
diff --git a/patches/api/0146-Add-Git-information-to-version-command-on-startup.patch b/patches/api/0146-Add-Git-information-to-version-command-on-startup.patch
index 619c4aab36..cafefadff8 100644
--- a/patches/api/0146-Add-Git-information-to-version-command-on-startup.patch
+++ b/patches/api/0146-Add-Git-information-to-version-command-on-startup.patch
@@ -48,7 +48,7 @@ index 0000000000000000000000000000000000000000..909617079db61b675cc7b60b44ef96b3
+ }
+}
diff --git a/src/main/java/org/bukkit/Bukkit.java b/src/main/java/org/bukkit/Bukkit.java
-index 67c92e10b38af2ac45c1d9b6374695247bf1e7c3..627c04f5e71ad032760296092a65596b08807a55 100644
+index a6f9336f27cb4a7aed0c01cde417d2287e393929..67dc67343fc149c21ae234a338f08e2f1fa13867 100644
--- a/src/main/java/org/bukkit/Bukkit.java
+++ b/src/main/java/org/bukkit/Bukkit.java
@@ -56,6 +56,7 @@ import org.bukkit.util.CachedServerIcon;
diff --git a/patches/api/0153-Add-Material-Tags.patch b/patches/api/0153-Add-Material-Tags.patch
index b0d5cd09ee..247dc10ec6 100644
--- a/patches/api/0153-Add-Material-Tags.patch
+++ b/patches/api/0153-Add-Material-Tags.patch
@@ -1118,7 +1118,7 @@ index 0000000000000000000000000000000000000000..d7eb49a05c3f0cacf285f8995433c5d5
+ .ensureSize("WATER_BASED", 11).lock();
+}
diff --git a/src/main/java/org/bukkit/Tag.java b/src/main/java/org/bukkit/Tag.java
-index 1504dca4ec3e8d21189b7534bb009521799ffdf7..82d34e9aae42dfafd900dc0e610bf1dc82a5a6f3 100644
+index 02f75db7ac55f792e84a08138e89657a3e226ff5..69462a0679c255acee2adb84f590523d3fc3c9aa 100644
--- a/src/main/java/org/bukkit/Tag.java
+++ b/src/main/java/org/bukkit/Tag.java
@@ -11,6 +11,10 @@ import org.jetbrains.annotations.NotNull;
diff --git a/patches/api/0155-Add-LivingEntity-getTargetEntity.patch b/patches/api/0155-Add-LivingEntity-getTargetEntity.patch
index 323e4aa5ca..d23917ea2f 100644
--- a/patches/api/0155-Add-LivingEntity-getTargetEntity.patch
+++ b/patches/api/0155-Add-LivingEntity-getTargetEntity.patch
@@ -51,7 +51,7 @@ index 0000000000000000000000000000000000000000..af8765b213390cf75fe02a6eb68aecf7
+ }
+}
diff --git a/src/main/java/org/bukkit/entity/LivingEntity.java b/src/main/java/org/bukkit/entity/LivingEntity.java
-index 8cccec99cdb028e86b71b3984f4f94201fd9a390..94fad96f8fd57314c571b6396f44cd9d91254cfc 100644
+index 8a18f269ee1767d57367160cb0e3513a4e2969fb..79fdb183887cb8153254f6ac84a981a7ffcb561c 100644
--- a/src/main/java/org/bukkit/entity/LivingEntity.java
+++ b/src/main/java/org/bukkit/entity/LivingEntity.java
@@ -173,6 +173,77 @@ public interface LivingEntity extends Attributable, Damageable, ProjectileSource
diff --git a/patches/api/0160-Make-the-default-permission-message-configurable.patch b/patches/api/0160-Make-the-default-permission-message-configurable.patch
index b2373cd4b4..66ab79c085 100644
--- a/patches/api/0160-Make-the-default-permission-message-configurable.patch
+++ b/patches/api/0160-Make-the-default-permission-message-configurable.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] Make the default permission message configurable
diff --git a/src/main/java/org/bukkit/Bukkit.java b/src/main/java/org/bukkit/Bukkit.java
-index 627c04f5e71ad032760296092a65596b08807a55..213b76f4ba50e882b6c7349d980701e0b6323e7c 100644
+index 67dc67343fc149c21ae234a338f08e2f1fa13867..3ad64a11c1e67cce5e49c34d389888060bf2a962 100644
--- a/src/main/java/org/bukkit/Bukkit.java
+++ b/src/main/java/org/bukkit/Bukkit.java
@@ -2268,6 +2268,28 @@ public final class Bukkit {
@@ -38,7 +38,7 @@ index 627c04f5e71ad032760296092a65596b08807a55..213b76f4ba50e882b6c7349d980701e0
* Creates a PlayerProfile for the specified uuid, with name as null.
*
diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java
-index 88b93ac279f2bd23ca853788c409549fe2afe041..281c1e511e46a31a1c3ee9380d60888628af87c3 100644
+index dfbccef8dd67195d588112989a9ffecb712a9fe9..3c09a5e08c2641502b7171f27d28d92d02ed39d0 100644
--- a/src/main/java/org/bukkit/Server.java
+++ b/src/main/java/org/bukkit/Server.java
@@ -1974,6 +1974,23 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi
diff --git a/patches/api/0175-Add-Heightmap-API.patch b/patches/api/0175-Add-Heightmap-API.patch
index f6bae3c2d8..ef71c8c2fe 100644
--- a/patches/api/0175-Add-Heightmap-API.patch
+++ b/patches/api/0175-Add-Heightmap-API.patch
@@ -102,7 +102,7 @@ index f7564581c18425c903e54f949728dd3742ca7bf2..1bfe465b9aaeea7d3c871140145b7de1
/**
* Creates explosion at this location with given power
diff --git a/src/main/java/org/bukkit/World.java b/src/main/java/org/bukkit/World.java
-index 31fc272b0e82e4eef6d9bf01dd25d39513d354b3..0c5ce79c04e8193db248a221f519d80a944ef6ba 100644
+index fe8f167871563e594cd48892e4d8768ebca92958..06cdbbeabf1f1630a2d2e008fa82e72b0745cdd8 100644
--- a/src/main/java/org/bukkit/World.java
+++ b/src/main/java/org/bukkit/World.java
@@ -150,6 +150,87 @@ public interface World extends RegionAccessor, WorldInfo, PluginMessageRecipient
diff --git a/patches/api/0180-Expose-the-internal-current-tick.patch b/patches/api/0180-Expose-the-internal-current-tick.patch
index 6a2097718b..d36d5140f3 100644
--- a/patches/api/0180-Expose-the-internal-current-tick.patch
+++ b/patches/api/0180-Expose-the-internal-current-tick.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] Expose the internal current tick
diff --git a/src/main/java/org/bukkit/Bukkit.java b/src/main/java/org/bukkit/Bukkit.java
-index f377b0d6bfdc88be2af2a8b059aac04421c4f378..93c83d1513745ada3c1ea9b5cc88905f1957d3c4 100644
+index cb0ad65e4e30c3604d655bb75c7b26a7bf4227d7..6ae9a923d85f76bf5e6a41fb0a499196be05473e 100644
--- a/src/main/java/org/bukkit/Bukkit.java
+++ b/src/main/java/org/bukkit/Bukkit.java
@@ -2363,6 +2363,10 @@ public final class Bukkit {
@@ -20,7 +20,7 @@ index f377b0d6bfdc88be2af2a8b059aac04421c4f378..93c83d1513745ada3c1ea9b5cc88905f
@NotNull
diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java
-index bb90413c0170d3d37bc67565a6bd6f8795b2f6bd..3b3cd9994b84770dc9b3c7a0531461bdc3d4b16a 100644
+index 49877944a385b22e5de66b4e33056ee3f592fcd7..86e89976618a7083d3cd5b81669c99788bc72d05 100644
--- a/src/main/java/org/bukkit/Server.java
+++ b/src/main/java/org/bukkit/Server.java
@@ -2056,5 +2056,12 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi
diff --git a/patches/api/0186-Add-tick-times-API.patch b/patches/api/0186-Add-tick-times-API.patch
index 1ea7ad7d0b..08817a18ef 100644
--- a/patches/api/0186-Add-tick-times-API.patch
+++ b/patches/api/0186-Add-tick-times-API.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] Add tick times API
diff --git a/src/main/java/org/bukkit/Bukkit.java b/src/main/java/org/bukkit/Bukkit.java
-index 93c83d1513745ada3c1ea9b5cc88905f1957d3c4..d715a069a8cfc8704471f254f421bb7baeb498f4 100644
+index 6ae9a923d85f76bf5e6a41fb0a499196be05473e..8961bd08163a2e42e1d0628335fa44bac575a6a4 100644
--- a/src/main/java/org/bukkit/Bukkit.java
+++ b/src/main/java/org/bukkit/Bukkit.java
@@ -2035,6 +2035,25 @@ public final class Bukkit {
@@ -35,7 +35,7 @@ index 93c83d1513745ada3c1ea9b5cc88905f1957d3c4..d715a069a8cfc8704471f254f421bb7b
/**
diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java
-index 3b3cd9994b84770dc9b3c7a0531461bdc3d4b16a..e00d4860ba9ac19014995e85fccea659793f67e7 100644
+index 86e89976618a7083d3cd5b81669c99788bc72d05..201fb920b2facdd56651b62b873aaeb7946e88de 100644
--- a/src/main/java/org/bukkit/Server.java
+++ b/src/main/java/org/bukkit/Server.java
@@ -1718,6 +1718,21 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi
diff --git a/patches/api/0187-Expose-MinecraftServer-isRunning.patch b/patches/api/0187-Expose-MinecraftServer-isRunning.patch
index 5d7168be3c..e5fe4cea33 100644
--- a/patches/api/0187-Expose-MinecraftServer-isRunning.patch
+++ b/patches/api/0187-Expose-MinecraftServer-isRunning.patch
@@ -6,7 +6,7 @@ Subject: [PATCH] Expose MinecraftServer#isRunning
This allows for plugins to detect if the server is actually turning off in onDisable rather than just plugins reloading.
diff --git a/src/main/java/org/bukkit/Bukkit.java b/src/main/java/org/bukkit/Bukkit.java
-index d715a069a8cfc8704471f254f421bb7baeb498f4..e54ba870293676f16fabac5b91ffd7202d3a17e0 100644
+index 8961bd08163a2e42e1d0628335fa44bac575a6a4..f444294c96f6ab7362eacad47805c6b0f4afdc3a 100644
--- a/src/main/java/org/bukkit/Bukkit.java
+++ b/src/main/java/org/bukkit/Bukkit.java
@@ -2386,6 +2386,15 @@ public final class Bukkit {
@@ -26,7 +26,7 @@ index d715a069a8cfc8704471f254f421bb7baeb498f4..e54ba870293676f16fabac5b91ffd720
@NotNull
diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java
-index e00d4860ba9ac19014995e85fccea659793f67e7..e4d7c0a3c36a34ef5bdb728d52cf0c4f2aa3ef77 100644
+index 201fb920b2facdd56651b62b873aaeb7946e88de..12d338b6751a04b626162f91c35cddaa49cdead1 100644
--- a/src/main/java/org/bukkit/Server.java
+++ b/src/main/java/org/bukkit/Server.java
@@ -2078,5 +2078,12 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi
diff --git a/patches/api/0194-Expose-game-version.patch b/patches/api/0194-Expose-game-version.patch
index 9c40467c3f..e2ee9d471f 100644
--- a/patches/api/0194-Expose-game-version.patch
+++ b/patches/api/0194-Expose-game-version.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] Expose game version
diff --git a/src/main/java/org/bukkit/Bukkit.java b/src/main/java/org/bukkit/Bukkit.java
-index e54ba870293676f16fabac5b91ffd7202d3a17e0..eb1e5e87d003e5cd7fbf4a01265ef30bb87abd47 100644
+index f444294c96f6ab7362eacad47805c6b0f4afdc3a..1c0a7bba8cbab86382598e20b7b73f0fd2dabcae 100644
--- a/src/main/java/org/bukkit/Bukkit.java
+++ b/src/main/java/org/bukkit/Bukkit.java
@@ -157,6 +157,18 @@ public final class Bukkit {
@@ -28,7 +28,7 @@ index e54ba870293676f16fabac5b91ffd7202d3a17e0..eb1e5e87d003e5cd7fbf4a01265ef30b
* Gets a view of all currently logged in players. This {@linkplain
* Collections#unmodifiableCollection(Collection) view} is a reused
diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java
-index e4d7c0a3c36a34ef5bdb728d52cf0c4f2aa3ef77..4ec70d58f4341e9fe9467f2b3a65b9808a3d81a4 100644
+index 12d338b6751a04b626162f91c35cddaa49cdead1..62716a5a5e6936430f50bf725c061ef39952b96c 100644
--- a/src/main/java/org/bukkit/Server.java
+++ b/src/main/java/org/bukkit/Server.java
@@ -115,6 +115,16 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi
diff --git a/patches/api/0195-Add-Mob-Goal-API.patch b/patches/api/0195-Add-Mob-Goal-API.patch
index 53d9aaa672..afa67df309 100644
--- a/patches/api/0195-Add-Mob-Goal-API.patch
+++ b/patches/api/0195-Add-Mob-Goal-API.patch
@@ -525,7 +525,7 @@ index 0000000000000000000000000000000000000000..c9837c7c47314b5bdf6c7973e6bc962d
+ @Deprecated(forRemoval = true) @ApiStatus.ScheduledForRemoval(inVersion = "1.21") GoalKey UNIVERSAL_ANGER_RESET = GoalKey.of(Mob.class, NamespacedKey.minecraft("universal_anger_reset"));
+}
diff --git a/src/main/java/org/bukkit/Bukkit.java b/src/main/java/org/bukkit/Bukkit.java
-index eb1e5e87d003e5cd7fbf4a01265ef30bb87abd47..520cfd6b8568fb05b3a732ffa641b0231ec936eb 100644
+index 1c0a7bba8cbab86382598e20b7b73f0fd2dabcae..ae9f2213ba39b0f61cf670bc876bf265f47ce6df 100644
--- a/src/main/java/org/bukkit/Bukkit.java
+++ b/src/main/java/org/bukkit/Bukkit.java
@@ -2407,6 +2407,16 @@ public final class Bukkit {
@@ -546,7 +546,7 @@ index eb1e5e87d003e5cd7fbf4a01265ef30bb87abd47..520cfd6b8568fb05b3a732ffa641b023
@NotNull
diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java
-index 4ec70d58f4341e9fe9467f2b3a65b9808a3d81a4..83c9d688666095ff50bf8fdf4e7510a622128ab4 100644
+index 62716a5a5e6936430f50bf725c061ef39952b96c..b9a31fa710434351f058c50a402be6c89cee9080 100644
--- a/src/main/java/org/bukkit/Server.java
+++ b/src/main/java/org/bukkit/Server.java
@@ -2095,5 +2095,13 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi
diff --git a/patches/api/0218-Add-getOfflinePlayerIfCached-String.patch b/patches/api/0218-Add-getOfflinePlayerIfCached-String.patch
index 5ea2eff63b..d3837fd8a3 100644
--- a/patches/api/0218-Add-getOfflinePlayerIfCached-String.patch
+++ b/patches/api/0218-Add-getOfflinePlayerIfCached-String.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] Add getOfflinePlayerIfCached(String)
diff --git a/src/main/java/org/bukkit/Bukkit.java b/src/main/java/org/bukkit/Bukkit.java
-index 520cfd6b8568fb05b3a732ffa641b0231ec936eb..68e39ed5a80d6d2d26366122d8d09395d38434dd 100644
+index ae9f2213ba39b0f61cf670bc876bf265f47ce6df..2acb1e1e7a865596d0a0535717bc9d5dd49669c3 100644
--- a/src/main/java/org/bukkit/Bukkit.java
+++ b/src/main/java/org/bukkit/Bukkit.java
@@ -1249,6 +1249,27 @@ public final class Bukkit {
@@ -37,7 +37,7 @@ index 520cfd6b8568fb05b3a732ffa641b0231ec936eb..68e39ed5a80d6d2d26366122d8d09395
* Gets the player by the given UUID, regardless if they are offline or
* online.
diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java
-index 83c9d688666095ff50bf8fdf4e7510a622128ab4..87c617edb7259932de48606c4931ec69086d2bee 100644
+index b9a31fa710434351f058c50a402be6c89cee9080..c8a312bf6cef6ba62114d4f46555f517f53c7576 100644
--- a/src/main/java/org/bukkit/Server.java
+++ b/src/main/java/org/bukkit/Server.java
@@ -1048,6 +1048,25 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi
diff --git a/patches/api/0233-Additional-Block-Material-API-s.patch b/patches/api/0233-Additional-Block-Material-API-s.patch
index 91196a2442..f6fd2d67e9 100644
--- a/patches/api/0233-Additional-Block-Material-API-s.patch
+++ b/patches/api/0233-Additional-Block-Material-API-s.patch
@@ -9,7 +9,7 @@ process to do this in the Bukkit API
Adds API for buildable, replaceable, burnable too.
diff --git a/src/main/java/org/bukkit/block/Block.java b/src/main/java/org/bukkit/block/Block.java
-index 546c6709383edb0007b9a8a560af0b64f498dadd..6c0249863601e8f0fc06828574315a9f0af66e5b 100644
+index 89bd97153d874c2710304d163f7c46062d8c8bab..de3daacb3080200986a4e406c1465dfe6c695f22 100644
--- a/src/main/java/org/bukkit/block/Block.java
+++ b/src/main/java/org/bukkit/block/Block.java
@@ -439,6 +439,42 @@ public interface Block extends Metadatable, Translatable, net.kyori.adventure.tr
diff --git a/patches/api/0263-Add-Block-isValidTool.patch b/patches/api/0263-Add-Block-isValidTool.patch
index 182e364647..18f46e340e 100644
--- a/patches/api/0263-Add-Block-isValidTool.patch
+++ b/patches/api/0263-Add-Block-isValidTool.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] Add Block#isValidTool
diff --git a/src/main/java/org/bukkit/block/Block.java b/src/main/java/org/bukkit/block/Block.java
-index 6c0249863601e8f0fc06828574315a9f0af66e5b..93b9b57c95a0d24e885a205cd9d9e05a5631806a 100644
+index de3daacb3080200986a4e406c1465dfe6c695f22..0f0eee8a03ef301c1ab6a408ff718411d3d64e82 100644
--- a/src/main/java/org/bukkit/block/Block.java
+++ b/src/main/java/org/bukkit/block/Block.java
@@ -230,6 +230,15 @@ public interface Block extends Metadatable, Translatable, net.kyori.adventure.tr
diff --git a/patches/api/0264-Expand-world-key-API.patch b/patches/api/0264-Expand-world-key-API.patch
index 90d750db0c..917573761a 100644
--- a/patches/api/0264-Expand-world-key-API.patch
+++ b/patches/api/0264-Expand-world-key-API.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] Expand world key API
diff --git a/src/main/java/org/bukkit/Bukkit.java b/src/main/java/org/bukkit/Bukkit.java
-index 68e39ed5a80d6d2d26366122d8d09395d38434dd..4521a0142f2d824d57d753cd41512a3264764a0d 100644
+index 2acb1e1e7a865596d0a0535717bc9d5dd49669c3..369fc041f3203da7d367423ac74cb3eba88becc9 100644
--- a/src/main/java/org/bukkit/Bukkit.java
+++ b/src/main/java/org/bukkit/Bukkit.java
@@ -831,6 +831,18 @@ public final class Bukkit {
@@ -56,7 +56,7 @@ index 501dd5a26c27294420821b3d75f8938596afb1a8..71ef9b479888aa83455757560b607455
// Paper end
}
diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java
-index 87c617edb7259932de48606c4931ec69086d2bee..37a73fb1c275bae05f53746a608e76e23839e729 100644
+index c8a312bf6cef6ba62114d4f46555f517f53c7576..2bfb1cfb4d669f4bb5a4ef540683bcee409fc49e 100644
--- a/src/main/java/org/bukkit/Server.java
+++ b/src/main/java/org/bukkit/Server.java
@@ -695,6 +695,17 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi
diff --git a/patches/api/0271-More-World-API.patch b/patches/api/0271-More-World-API.patch
index 5567e22dc7..b57e26992a 100644
--- a/patches/api/0271-More-World-API.patch
+++ b/patches/api/0271-More-World-API.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] More World API
diff --git a/src/main/java/org/bukkit/World.java b/src/main/java/org/bukkit/World.java
-index 0c5ce79c04e8193db248a221f519d80a944ef6ba..fff4d89e978bd0050a298ab8f43401b6c600e5a2 100644
+index 06cdbbeabf1f1630a2d2e008fa82e72b0745cdd8..e6978b0257744ad13fce1291b4793334132f79e1 100644
--- a/src/main/java/org/bukkit/World.java
+++ b/src/main/java/org/bukkit/World.java
@@ -3716,6 +3716,114 @@ public interface World extends RegionAccessor, WorldInfo, PluginMessageRecipient
diff --git a/patches/api/0282-Add-basic-Datapack-API.patch b/patches/api/0282-Add-basic-Datapack-API.patch
index 10d343ddf5..805a5fd293 100644
--- a/patches/api/0282-Add-basic-Datapack-API.patch
+++ b/patches/api/0282-Add-basic-Datapack-API.patch
@@ -70,7 +70,7 @@ index 0000000000000000000000000000000000000000..58f78d5e91beacaf710f62461cf869f7
+
+}
diff --git a/src/main/java/org/bukkit/Bukkit.java b/src/main/java/org/bukkit/Bukkit.java
-index 4521a0142f2d824d57d753cd41512a3264764a0d..b21d1e8a53e4c51fa7742ee6211b4aedcd460a95 100644
+index 369fc041f3203da7d367423ac74cb3eba88becc9..256b98750ac5c48526b6b8d5cb4894b8bb6665be 100644
--- a/src/main/java/org/bukkit/Bukkit.java
+++ b/src/main/java/org/bukkit/Bukkit.java
@@ -317,9 +317,11 @@ public final class Bukkit {
@@ -101,7 +101,7 @@ index 4521a0142f2d824d57d753cd41512a3264764a0d..b21d1e8a53e4c51fa7742ee6211b4aed
@NotNull
diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java
-index 37a73fb1c275bae05f53746a608e76e23839e729..92db34d3ff29a84b29701de6b64a70413a440ce9 100644
+index 2bfb1cfb4d669f4bb5a4ef540683bcee409fc49e..156f014f94ed100d4d352a4ee5d0a2dc2bff518f 100644
--- a/src/main/java/org/bukkit/Server.java
+++ b/src/main/java/org/bukkit/Server.java
@@ -255,9 +255,11 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi
@@ -129,7 +129,7 @@ index 37a73fb1c275bae05f53746a608e76e23839e729..92db34d3ff29a84b29701de6b64a7041
// Paper end
}
diff --git a/src/main/java/org/bukkit/packs/DataPack.java b/src/main/java/org/bukkit/packs/DataPack.java
-index 744d8c055b0e643e2e0d12218af4ef856f56340f..2ac72913e2a5b70eb98a4f25f865855b48b01ed3 100644
+index e424680e54fb18e836f580d199e527532345380c..61b50774b4965e55efeb49143d86300c1c260a17 100644
--- a/src/main/java/org/bukkit/packs/DataPack.java
+++ b/src/main/java/org/bukkit/packs/DataPack.java
@@ -8,8 +8,10 @@ import org.jetbrains.annotations.NotNull;
diff --git a/patches/api/0292-Add-PlayerKickEvent-causes.patch b/patches/api/0292-Add-PlayerKickEvent-causes.patch
index 8b52af1af9..f2612640d7 100644
--- a/patches/api/0292-Add-PlayerKickEvent-causes.patch
+++ b/patches/api/0292-Add-PlayerKickEvent-causes.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] Add PlayerKickEvent causes
diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java
-index b28f13c51bce8bedb1fcbe63f89aa7b6262a5676..4ffdb81f5b5f2f1a13b2b8111e836af7aead1a41 100644
+index 156a3887628a51e099976842bc1f8ea81d7e2d9f..32b4c674e13aed411a9529bbf601c4aee0b68f12 100644
--- a/src/main/java/org/bukkit/entity/Player.java
+++ b/src/main/java/org/bukkit/entity/Player.java
@@ -274,6 +274,14 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
diff --git a/patches/api/0296-Add-more-line-of-sight-methods.patch b/patches/api/0296-Add-more-line-of-sight-methods.patch
index 6d8c8334f5..8bcc72f6a5 100644
--- a/patches/api/0296-Add-more-line-of-sight-methods.patch
+++ b/patches/api/0296-Add-more-line-of-sight-methods.patch
@@ -23,7 +23,7 @@ index 71ef9b479888aa83455757560b60745572c7196d..cd83348de3f82b3fddcf2d4bb9187ec8
// Paper end
}
diff --git a/src/main/java/org/bukkit/entity/LivingEntity.java b/src/main/java/org/bukkit/entity/LivingEntity.java
-index 8e39aebdc41150b45c241f435ce4e5f1f84d3814..7d505bf501c2b3985417441a543cee405648ec0b 100644
+index 9763cf4720e1278061e3ba139b824147e9540945..b665b99ca6de3a35c3296a500db1527a8513a711 100644
--- a/src/main/java/org/bukkit/entity/LivingEntity.java
+++ b/src/main/java/org/bukkit/entity/LivingEntity.java
@@ -570,6 +570,19 @@ public interface LivingEntity extends Attributable, Damageable, ProjectileSource
diff --git a/patches/api/0303-Stinger-API.patch b/patches/api/0303-Stinger-API.patch
index 4011649092..ae1f19d18d 100644
--- a/patches/api/0303-Stinger-API.patch
+++ b/patches/api/0303-Stinger-API.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] Stinger API
diff --git a/src/main/java/org/bukkit/entity/LivingEntity.java b/src/main/java/org/bukkit/entity/LivingEntity.java
-index 626eb1796d5a19d110855e2fb95cb4c761ecc544..08167783b6e4e7d393779c92500793518ee346a6 100644
+index b665b99ca6de3a35c3296a500db1527a8513a711..26f12a6e4b2aff8ec052342939435f1ae4c02e2d 100644
--- a/src/main/java/org/bukkit/entity/LivingEntity.java
+++ b/src/main/java/org/bukkit/entity/LivingEntity.java
@@ -399,6 +399,36 @@ public interface LivingEntity extends Attributable, Damageable, ProjectileSource
diff --git a/patches/api/0315-Add-methods-to-find-targets-for-lightning-strikes.patch b/patches/api/0315-Add-methods-to-find-targets-for-lightning-strikes.patch
index e41c5429b7..bac14a0f54 100644
--- a/patches/api/0315-Add-methods-to-find-targets-for-lightning-strikes.patch
+++ b/patches/api/0315-Add-methods-to-find-targets-for-lightning-strikes.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] Add methods to find targets for lightning strikes
diff --git a/src/main/java/org/bukkit/World.java b/src/main/java/org/bukkit/World.java
-index fff4d89e978bd0050a298ab8f43401b6c600e5a2..a78563a52ea1a1f05927f10b90f7a94cb28f126f 100644
+index e6978b0257744ad13fce1291b4793334132f79e1..d0c125c6120c2cefb5a3004a60bfd4a353c05e32 100644
--- a/src/main/java/org/bukkit/World.java
+++ b/src/main/java/org/bukkit/World.java
@@ -734,6 +734,37 @@ public interface World extends RegionAccessor, WorldInfo, PluginMessageRecipient
diff --git a/patches/api/0321-Add-isCollidable-methods-to-various-places.patch b/patches/api/0321-Add-isCollidable-methods-to-various-places.patch
index 62fba2ca0e..2ab6b106da 100644
--- a/patches/api/0321-Add-isCollidable-methods-to-various-places.patch
+++ b/patches/api/0321-Add-isCollidable-methods-to-various-places.patch
@@ -45,7 +45,7 @@ index c2b042ced0f32b0dafc13a2933c2bd9b18db774a..820c7e8f28d7276e4d4b31a81746720a
// Paper end
}
diff --git a/src/main/java/org/bukkit/block/Block.java b/src/main/java/org/bukkit/block/Block.java
-index 93b9b57c95a0d24e885a205cd9d9e05a5631806a..cb0dcbbfb77158c3b17bd7994a9bbcef8060941a 100644
+index 0f0eee8a03ef301c1ab6a408ff718411d3d64e82..c5670b40880fa124c7615f9b1d379b75d7110f05 100644
--- a/src/main/java/org/bukkit/block/Block.java
+++ b/src/main/java/org/bukkit/block/Block.java
@@ -482,6 +482,13 @@ public interface Block extends Metadatable, Translatable, net.kyori.adventure.tr
diff --git a/patches/api/0329-Improve-scoreboard-entries.patch b/patches/api/0329-Improve-scoreboard-entries.patch
index dbaa948bbf..c75501cbe2 100644
--- a/patches/api/0329-Improve-scoreboard-entries.patch
+++ b/patches/api/0329-Improve-scoreboard-entries.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] Improve scoreboard entries
diff --git a/src/main/java/org/bukkit/scoreboard/Objective.java b/src/main/java/org/bukkit/scoreboard/Objective.java
-index be3b2e5d9364abde50716c35cabd5938fe2c5e4d..0e4d7a8b3a100e1e770275063f654c2c5683179e 100644
+index a625bcab8e77b05b3341a52c708fae1542b7e3d5..a193ffabb05160b462dee1ba8f687fdbc84405b6 100644
--- a/src/main/java/org/bukkit/scoreboard/Objective.java
+++ b/src/main/java/org/bukkit/scoreboard/Objective.java
@@ -148,9 +148,8 @@ public interface Objective {
@@ -37,7 +37,7 @@ index be3b2e5d9364abde50716c35cabd5938fe2c5e4d..0e4d7a8b3a100e1e770275063f654c2c
+ // Paper end - improve scoreboard entries
}
diff --git a/src/main/java/org/bukkit/scoreboard/Scoreboard.java b/src/main/java/org/bukkit/scoreboard/Scoreboard.java
-index 7f5afbf87396ecf489566e6924bb196621386b57..97571ad990d3a44f589f01cff2810f16a5f2ff9c 100644
+index d5723e977d9a25701a4f387f1b26d2414e0fffb8..30e2b9484cdf4c8efd02e2cda97739e3047958bc 100644
--- a/src/main/java/org/bukkit/scoreboard/Scoreboard.java
+++ b/src/main/java/org/bukkit/scoreboard/Scoreboard.java
@@ -215,9 +215,8 @@ public interface Scoreboard {
@@ -110,7 +110,7 @@ index 7f5afbf87396ecf489566e6924bb196621386b57..97571ad990d3a44f589f01cff2810f16
+ // Paper end - improve scoreboard entries
}
diff --git a/src/main/java/org/bukkit/scoreboard/Team.java b/src/main/java/org/bukkit/scoreboard/Team.java
-index 5416386c89a4019a2c123374dd5cb6d4f12744f0..4a963cb67151287ff6645dcd1c9edddd162dff1a 100644
+index 1bd8ba3232398d3b07c9e00cf5b36851e9a28b58..bb60f49a48282fdeae1f7b797ed6ad98b68b1e14 100644
--- a/src/main/java/org/bukkit/scoreboard/Team.java
+++ b/src/main/java/org/bukkit/scoreboard/Team.java
@@ -295,9 +295,8 @@ public interface Team {
diff --git a/patches/api/0337-Multiple-Entries-with-Scoreboards.patch b/patches/api/0337-Multiple-Entries-with-Scoreboards.patch
index 40407d71ea..3e9e8a9cda 100644
--- a/patches/api/0337-Multiple-Entries-with-Scoreboards.patch
+++ b/patches/api/0337-Multiple-Entries-with-Scoreboards.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] Multiple Entries with Scoreboards
diff --git a/src/main/java/org/bukkit/scoreboard/Team.java b/src/main/java/org/bukkit/scoreboard/Team.java
-index 4a963cb67151287ff6645dcd1c9edddd162dff1a..2cf3e30eaec539092dc5cd864ec429eebe9d2be6 100644
+index bb60f49a48282fdeae1f7b797ed6ad98b68b1e14..8424fdac153f6dea76acce89f4726408d9726c41 100644
--- a/src/main/java/org/bukkit/scoreboard/Team.java
+++ b/src/main/java/org/bukkit/scoreboard/Team.java
@@ -309,6 +309,60 @@ public interface Team {
diff --git a/patches/api/0340-Multi-Block-Change-API.patch b/patches/api/0340-Multi-Block-Change-API.patch
index f9dd8d1c58..07ef3133af 100644
--- a/patches/api/0340-Multi-Block-Change-API.patch
+++ b/patches/api/0340-Multi-Block-Change-API.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] Multi Block Change API
diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java
-index 4ffdb81f5b5f2f1a13b2b8111e836af7aead1a41..60bae5b28ed69f85e04013d6faaf199cb9ab13fe 100644
+index 32b4c674e13aed411a9529bbf601c4aee0b68f12..a53805af92dab72c8e43c1e215893fb96b2150f6 100644
--- a/src/main/java/org/bukkit/entity/Player.java
+++ b/src/main/java/org/bukkit/entity/Player.java
@@ -790,6 +790,29 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
diff --git a/patches/api/0344-More-PotionEffectType-API.patch b/patches/api/0344-More-PotionEffectType-API.patch
index edaf9804a8..fed80e1cab 100644
--- a/patches/api/0344-More-PotionEffectType-API.patch
+++ b/patches/api/0344-More-PotionEffectType-API.patch
@@ -111,7 +111,7 @@ index 5f3aa6fd18d57055a6d8494938dff149d51b2803..84fd181ad897f620e450750246d9ea41
+ // Paper end
}
diff --git a/src/main/java/org/bukkit/potion/PotionEffectTypeWrapper.java b/src/main/java/org/bukkit/potion/PotionEffectTypeWrapper.java
-index c3a86bb1910158a8d13a675dfa7236dd6a3f397c..a7653806c0fa76f4b3342ea199fe892c514a4c27 100644
+index 6994981bdeccc4b059ae0075d0c8a26b6471d7b3..eb27b9d2d888dcd1b9e21d748d6cc990e879a4bd 100644
--- a/src/main/java/org/bukkit/potion/PotionEffectTypeWrapper.java
+++ b/src/main/java/org/bukkit/potion/PotionEffectTypeWrapper.java
@@ -40,4 +40,30 @@ public class PotionEffectTypeWrapper extends PotionEffectType {
diff --git a/patches/api/0346-Implement-regenerateChunk.patch b/patches/api/0346-Implement-regenerateChunk.patch
index 721528d5a2..ab1b374a27 100644
--- a/patches/api/0346-Implement-regenerateChunk.patch
+++ b/patches/api/0346-Implement-regenerateChunk.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] Implement regenerateChunk
diff --git a/src/main/java/org/bukkit/World.java b/src/main/java/org/bukkit/World.java
-index a78563a52ea1a1f05927f10b90f7a94cb28f126f..6917931966377c51db88a3364997a110dd987970 100644
+index d0c125c6120c2cefb5a3004a60bfd4a353c05e32..b8b97df069b28fa3cf32f1ad1f01f586a0cfbc78 100644
--- a/src/main/java/org/bukkit/World.java
+++ b/src/main/java/org/bukkit/World.java
@@ -483,8 +483,8 @@ public interface World extends RegionAccessor, WorldInfo, PluginMessageRecipient
diff --git a/patches/api/0354-Add-getComputedBiome-API.patch b/patches/api/0354-Add-getComputedBiome-API.patch
index a1ec54fe08..57f92d79f7 100644
--- a/patches/api/0354-Add-getComputedBiome-API.patch
+++ b/patches/api/0354-Add-getComputedBiome-API.patch
@@ -51,7 +51,7 @@ index cd83348de3f82b3fddcf2d4bb9187ec8173b0e40..8f50eb9b902236f5e039f5d26f3ca9a0
* Sets the {@link Biome} at the given {@link Location}.
*
diff --git a/src/main/java/org/bukkit/block/Block.java b/src/main/java/org/bukkit/block/Block.java
-index cb0dcbbfb77158c3b17bd7994a9bbcef8060941a..921864e748407291b7fa153381e7d9701e1c4608 100644
+index c5670b40880fa124c7615f9b1d379b75d7110f05..5e42a4c3aa872d9755f8cd5ce3f4ee36bcc71fb9 100644
--- a/src/main/java/org/bukkit/block/Block.java
+++ b/src/main/java/org/bukkit/block/Block.java
@@ -371,10 +371,22 @@ public interface Block extends Metadatable, Translatable, net.kyori.adventure.tr
diff --git a/patches/api/0373-Block-Ticking-API.patch b/patches/api/0373-Block-Ticking-API.patch
index b64dd3fde1..9521d8b924 100644
--- a/patches/api/0373-Block-Ticking-API.patch
+++ b/patches/api/0373-Block-Ticking-API.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] Block Ticking API
diff --git a/src/main/java/org/bukkit/block/Block.java b/src/main/java/org/bukkit/block/Block.java
-index 49fd2f54d2051553bd2df1c53f6b229ffa64892e..0b2a927b3500be5e6583a6d1ae90fe68473ff786 100644
+index 5e42a4c3aa872d9755f8cd5ce3f4ee36bcc71fb9..41b7310a514bf4d42c501e4bffe04008bda2541f 100644
--- a/src/main/java/org/bukkit/block/Block.java
+++ b/src/main/java/org/bukkit/block/Block.java
@@ -589,6 +589,21 @@ public interface Block extends Metadatable, Translatable, net.kyori.adventure.tr
diff --git a/patches/api/0397-fix-Instruments.patch b/patches/api/0397-fix-Instruments.patch
index 1c2722264d..24fa6c979c 100644
--- a/patches/api/0397-fix-Instruments.patch
+++ b/patches/api/0397-fix-Instruments.patch
@@ -98,7 +98,7 @@ index de976be7132d05506fde7a839cac3954b0dd8da4..642feb8b4578e6dbd2bf78d859283d20
public static Instrument getByType(final byte type) {
return BY_DATA.get(type);
diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java
-index 3cea1b5e29025cb5f9ccafb2eaf0895ab81409a9..e308cafa28648b09571caae8dc492870b902919d 100644
+index 8a7171f0b05d1a9c583ea9cef107c2c0e67aad67..1e53491b82e465d08acf02529f73e2e83ece7d96 100644
--- a/src/main/java/org/bukkit/entity/Player.java
+++ b/src/main/java/org/bukkit/entity/Player.java
@@ -511,9 +511,7 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
diff --git a/patches/api/0399-Add-Sneaking-API-for-Entities.patch b/patches/api/0399-Add-Sneaking-API-for-Entities.patch
index 46751f5a5f..44756f1959 100644
--- a/patches/api/0399-Add-Sneaking-API-for-Entities.patch
+++ b/patches/api/0399-Add-Sneaking-API-for-Entities.patch
@@ -35,7 +35,7 @@ index 3f3ea5bb6b3ea6f55b5cd699f1c01ac159619add..a2a423d4e4c2702ba5967223cab0432d
* Get the category of spawn to which this entity belongs.
*
diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java
-index e308cafa28648b09571caae8dc492870b902919d..f758e5e3a141733b3046fce7468391534116b34d 100644
+index 1e53491b82e465d08acf02529f73e2e83ece7d96..4c52aa04487e7d9b6bf5ae7e87d40d14fab9f25d 100644
--- a/src/main/java/org/bukkit/entity/Player.java
+++ b/src/main/java/org/bukkit/entity/Player.java
@@ -414,6 +414,7 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
diff --git a/patches/api/0402-Flying-Fall-Damage-API.patch b/patches/api/0402-Flying-Fall-Damage-API.patch
index c37f4b3e6f..865e94b4aa 100644
--- a/patches/api/0402-Flying-Fall-Damage-API.patch
+++ b/patches/api/0402-Flying-Fall-Damage-API.patch
@@ -5,7 +5,7 @@ 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 37f781384989962d4930b33dc6a7878dac999797..63070eadd28dbd0d77a58904db751c1bea4bcf5c 100644
+index 4c52aa04487e7d9b6bf5ae7e87d40d14fab9f25d..ce6e913b7bec56d2c64d50fc2848be748f023de5 100644
--- a/src/main/java/org/bukkit/entity/Player.java
+++ b/src/main/java/org/bukkit/entity/Player.java
@@ -1705,6 +1705,23 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
diff --git a/patches/api/0405-Win-Screen-API.patch b/patches/api/0405-Win-Screen-API.patch
index 0711516cbb..9b70b0da1b 100644
--- a/patches/api/0405-Win-Screen-API.patch
+++ b/patches/api/0405-Win-Screen-API.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] Win Screen API
diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java
-index 63070eadd28dbd0d77a58904db751c1bea4bcf5c..bcab0d70158d5843fc555a8ad532b6376a400749 100644
+index ce6e913b7bec56d2c64d50fc2848be748f023de5..41e900329090706f2999ae2f67e763b03190acdf 100644
--- a/src/main/java/org/bukkit/entity/Player.java
+++ b/src/main/java/org/bukkit/entity/Player.java
@@ -1072,6 +1072,47 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
diff --git a/patches/api/0415-Properly-remove-the-experimental-smithing-inventory-.patch b/patches/api/0415-Properly-remove-the-experimental-smithing-inventory-.patch
index 268785a112..adf74b3f77 100644
--- a/patches/api/0415-Properly-remove-the-experimental-smithing-inventory-.patch
+++ b/patches/api/0415-Properly-remove-the-experimental-smithing-inventory-.patch
@@ -18,7 +18,7 @@ index 19ba2d948ad83baab2a14ae6f7b3ce43c3d4971f..cbce826add9dc2b3187c7bea00c27b78
;
diff --git a/src/main/java/org/bukkit/inventory/InventoryView.java b/src/main/java/org/bukkit/inventory/InventoryView.java
-index 002acfbdce1db10f7ba1b6a013e678f504ac6e69..77a0cd901038405ed0e267f0432f13deccae3ab5 100644
+index aac9180fa3bcbdb0c17dcf96c86647b54ccc28c3..ae2abcb63ac10c20c5bf5c2497806faf380dd2da 100644
--- a/src/main/java/org/bukkit/inventory/InventoryView.java
+++ b/src/main/java/org/bukkit/inventory/InventoryView.java
@@ -370,7 +370,6 @@ public abstract class InventoryView {
diff --git a/patches/api/0420-Fix-BanList-API.patch b/patches/api/0420-Fix-BanList-API.patch
index f0ff82bd87..39837fa256 100644
--- a/patches/api/0420-Fix-BanList-API.patch
+++ b/patches/api/0420-Fix-BanList-API.patch
@@ -130,7 +130,7 @@ index e805e629cede1c4c0674282c930cb67852718c3e..5248cf08ef83c7304dd76c42a2f646bb
+ // Paper end
}
diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java
-index 1c25bdb3479da2d6e43782503c48e8ebda275e96..920424ba408730e63c0e42d24e327fb02c82c61c 100644
+index 41e900329090706f2999ae2f67e763b03190acdf..621cb3d41a2ff403ad33fc4bcb9f5e547dc1c46a 100644
--- a/src/main/java/org/bukkit/entity/Player.java
+++ b/src/main/java/org/bukkit/entity/Player.java
@@ -298,7 +298,7 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
diff --git a/patches/api/0428-Add-Listing-API-for-Player.patch b/patches/api/0428-Add-Listing-API-for-Player.patch
index bd55a69942..93257994e9 100644
--- a/patches/api/0428-Add-Listing-API-for-Player.patch
+++ b/patches/api/0428-Add-Listing-API-for-Player.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] Add Listing API for Player
diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java
-index e3a6c9fc63b36663d33c6a1513e7dc1522790d85..f9dd00210c1762a40259f823aeb8d8a5ddc78e3e 100644
+index 621cb3d41a2ff403ad33fc4bcb9f5e547dc1c46a..f59cbc92334c7b7b20e593a58232fb3c4434f12b 100644
--- a/src/main/java/org/bukkit/entity/Player.java
+++ b/src/main/java/org/bukkit/entity/Player.java
@@ -1841,6 +1841,32 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
diff --git a/patches/server/0009-MC-Utils.patch b/patches/server/0009-MC-Utils.patch
index c03d31609e..704ad6dada 100644
--- a/patches/server/0009-MC-Utils.patch
+++ b/patches/server/0009-MC-Utils.patch
@@ -5589,7 +5589,7 @@ index 124fad1031d6125bca233541e2d5f256da70ca44..2a7c614df7b9c9405a5dd23e6a888ede
} catch (Throwable throwable) {
// Spigot Start
diff --git a/src/main/java/net/minecraft/server/level/ChunkHolder.java b/src/main/java/net/minecraft/server/level/ChunkHolder.java
-index 1641bdf8725df778ba91bf5cd22c1ebbb3745058..facfdbb87e89f4db33ce13233c2ba4366d35c15b 100644
+index dcbbbf1d59a60abfc731d9e422c9569e8460d985..5250bf5029825524c239854db7999883459f1a8a 100644
--- a/src/main/java/net/minecraft/server/level/ChunkHolder.java
+++ b/src/main/java/net/minecraft/server/level/ChunkHolder.java
@@ -50,9 +50,9 @@ public class ChunkHolder {
@@ -5832,7 +5832,7 @@ index 1641bdf8725df778ba91bf5cd22c1ebbb3745058..facfdbb87e89f4db33ce13233c2ba436
+ // Paper end
}
diff --git a/src/main/java/net/minecraft/server/level/ChunkMap.java b/src/main/java/net/minecraft/server/level/ChunkMap.java
-index e9cf8686b59c232816b2fde92fc6616f77979a64..a7c18ca224c536b7b97d5889af321f23e637b420 100644
+index 6dc7999e0cc08efdbffafd80437f31ed590189a9..f2e5f3170a4a54e99a1dab40eb8a5c99ce548adc 100644
--- a/src/main/java/net/minecraft/server/level/ChunkMap.java
+++ b/src/main/java/net/minecraft/server/level/ChunkMap.java
@@ -167,6 +167,56 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider
diff --git a/patches/server/0014-Timings-v2.patch b/patches/server/0014-Timings-v2.patch
index cfa69f4ba8..c560cac9d3 100644
--- a/patches/server/0014-Timings-v2.patch
+++ b/patches/server/0014-Timings-v2.patch
@@ -1010,7 +1010,7 @@ index ff3f00cf1d5180f83b16acac5676aa22cd967c8a..5aa21689e308842fe5b64689265ba45a
// CraftBukkit end
}
diff --git a/src/main/java/net/minecraft/server/level/ChunkMap.java b/src/main/java/net/minecraft/server/level/ChunkMap.java
-index a7c18ca224c536b7b97d5889af321f23e637b420..092e443aa04757fea6d5f5c7b1d11899663c2eb0 100644
+index f2e5f3170a4a54e99a1dab40eb8a5c99ce548adc..c4215430a06983fbedfd21a568d79381b95696c3 100644
--- a/src/main/java/net/minecraft/server/level/ChunkMap.java
+++ b/src/main/java/net/minecraft/server/level/ChunkMap.java
@@ -1,8 +1,10 @@
diff --git a/patches/unapplied/server/0015-Rewrite-dataconverter-system.patch b/patches/server/0015-Rewrite-dataconverter-system.patch
similarity index 95%
rename from patches/unapplied/server/0015-Rewrite-dataconverter-system.patch
rename to patches/server/0015-Rewrite-dataconverter-system.patch
index 5fc3ac9a0a..9a8a5f5444 100644
--- a/patches/unapplied/server/0015-Rewrite-dataconverter-system.patch
+++ b/patches/server/0015-Rewrite-dataconverter-system.patch
@@ -196,10 +196,10 @@ index 0000000000000000000000000000000000000000..dde9d36bf6212196caa18f3c9c535aec
+}
diff --git a/src/main/java/ca/spottedleaf/dataconverter/minecraft/MCVersionRegistry.java b/src/main/java/ca/spottedleaf/dataconverter/minecraft/MCVersionRegistry.java
new file mode 100644
-index 0000000000000000000000000000000000000000..9ab4cb833c65d086122fc835217ce4708eebe039
+index 0000000000000000000000000000000000000000..127da265fe98f9f15476c589b5ecd950ccdbdfb8
--- /dev/null
+++ b/src/main/java/ca/spottedleaf/dataconverter/minecraft/MCVersionRegistry.java
-@@ -0,0 +1,380 @@
+@@ -0,0 +1,384 @@
+package ca.spottedleaf.dataconverter.minecraft;
+
+import ca.spottedleaf.dataconverter.converters.DataConverter;
@@ -417,8 +417,12 @@ index 0000000000000000000000000000000000000000..9ab4cb833c65d086122fc835217ce470
+ 3448,
+ 3450,
+ 3451,
-+ 3459
-+ // All up to 1.20-rc1
++ 3459,
++ 3564,
++ 3565,
++ 3566,
++ 3568
++ // All up to 1.20.2
+ };
+ Arrays.sort(converterVersions);
+
@@ -582,10 +586,10 @@ index 0000000000000000000000000000000000000000..9ab4cb833c65d086122fc835217ce470
+}
diff --git a/src/main/java/ca/spottedleaf/dataconverter/minecraft/MCVersions.java b/src/main/java/ca/spottedleaf/dataconverter/minecraft/MCVersions.java
new file mode 100644
-index 0000000000000000000000000000000000000000..2737b29fc872c64cd273182034eb22797ef4f900
+index 0000000000000000000000000000000000000000..3444afdbadd117a6726c411b3739f5abc788622a
--- /dev/null
+++ b/src/main/java/ca/spottedleaf/dataconverter/minecraft/MCVersions.java
-@@ -0,0 +1,474 @@
+@@ -0,0 +1,479 @@
+package ca.spottedleaf.dataconverter.minecraft;
+
+@SuppressWarnings("unused")
@@ -1058,6 +1062,11 @@ index 0000000000000000000000000000000000000000..2737b29fc872c64cd273182034eb2279
+ public static final int V1_20 = 3463;
+ public static final int V1_20_1_RC1 = 3464;
+ public static final int V1_20_1 = 3465;
++ public static final int V23W31A = 3567;
++ public static final int V23W32A = 3569;
++ public static final int V23W33A = 3570;
++ public static final int V23W35A = 3571;
++ public static final int V1_20_2_PRE1 = 3572;
+
+}
diff --git a/src/main/java/ca/spottedleaf/dataconverter/minecraft/converters/advancements/ConverterAbstractAdvancementsRename.java b/src/main/java/ca/spottedleaf/dataconverter/minecraft/converters/advancements/ConverterAbstractAdvancementsRename.java
@@ -2934,10 +2943,10 @@ index 0000000000000000000000000000000000000000..bc79670f47aaa413ea3e96ef6a32e140
+}
diff --git a/src/main/java/ca/spottedleaf/dataconverter/minecraft/converters/helpers/HelperBlockFlatteningV1450.java b/src/main/java/ca/spottedleaf/dataconverter/minecraft/converters/helpers/HelperBlockFlatteningV1450.java
new file mode 100644
-index 0000000000000000000000000000000000000000..02ee521dc0f61f3f01d443c46c1066d1ecbeea7f
+index 0000000000000000000000000000000000000000..4f4f4cb6037c2a46ffcf427f5812164bbb98b8b7
--- /dev/null
+++ b/src/main/java/ca/spottedleaf/dataconverter/minecraft/converters/helpers/HelperBlockFlatteningV1450.java
-@@ -0,0 +1,1830 @@
+@@ -0,0 +1,1829 @@
+package ca.spottedleaf.dataconverter.minecraft.converters.helpers;
+
+import ca.spottedleaf.dataconverter.types.MapType;
@@ -4766,14 +4775,13 @@ index 0000000000000000000000000000000000000000..02ee521dc0f61f3f01d443c46c1066d1
+ register(4083, "{Name:'minecraft:structure_block',Properties:{mode:'data'}}", "{Name:'minecraft:structure_block',Properties:{mode:'data'}}");
+ finalizeMaps();
+ }
-+
+}
diff --git a/src/main/java/ca/spottedleaf/dataconverter/minecraft/converters/helpers/HelperItemNameV102.java b/src/main/java/ca/spottedleaf/dataconverter/minecraft/converters/helpers/HelperItemNameV102.java
new file mode 100644
-index 0000000000000000000000000000000000000000..7ce9cf645ccb2dc796b87858915dba1c3efc3d5b
+index 0000000000000000000000000000000000000000..86f6aa3e3fa886976809f350fc5eb16f6a026ed9
--- /dev/null
+++ b/src/main/java/ca/spottedleaf/dataconverter/minecraft/converters/helpers/HelperItemNameV102.java
-@@ -0,0 +1,566 @@
+@@ -0,0 +1,533 @@
+package ca.spottedleaf.dataconverter.minecraft.converters.helpers;
+
+import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;
@@ -5164,39 +5172,6 @@ index 0000000000000000000000000000000000000000..7ce9cf645ccb2dc796b87858915dba1c
+ ITEM_NAMES.put(i, extra[i]);
+ }
+ }
-+
-+ // Add block ids into conversion as well
-+ // Very old versions of the game handled them, but it seems 1.8.8 did not parse them at all, so no conversion
-+ // was written.
-+ // block ids are only skipped (set to AIR) if there is no 1-1 replacement item.
-+ ITEM_NAMES.put(26, "minecraft:bed"); // bed block
-+ ITEM_NAMES.put(34, ITEM_NAMES.get(0)); // skip (piston head block)
-+ ITEM_NAMES.put(55, "minecraft:redstone"); // redstone wire block
-+ ITEM_NAMES.put(59, ITEM_NAMES.get(0)); // skip (wheat crop block)
-+ ITEM_NAMES.put(63, "minecraft:sign"); // standing sign
-+ ITEM_NAMES.put(64, "minecraft:wooden_door"); // wooden door block
-+ ITEM_NAMES.put(68, "minecraft:sign"); // wall sign
-+ ITEM_NAMES.put(71, "minecraft:iron_door"); // iron door block
-+ ITEM_NAMES.put(74, "minecraft:redstone_ore"); // lit redstone ore block
-+ ITEM_NAMES.put(75, "minecraft:redstone_torch"); // unlit redstone torch
-+ ITEM_NAMES.put(83, "minecraft:reeds"); // sugar cane block
-+ ITEM_NAMES.put(92, "minecraft:cake"); // cake block
-+ ITEM_NAMES.put(93, "minecraft:repeater"); // unpowered repeater block
-+ ITEM_NAMES.put(94, "minecraft:repeater"); // powered repeater block
-+ ITEM_NAMES.put(104, ITEM_NAMES.get(0)); // skip (pumpkin stem)
-+ ITEM_NAMES.put(105, ITEM_NAMES.get(0)); // skip (melon stem)
-+ ITEM_NAMES.put(115, "minecraft:nether_wart"); // nether wart block
-+ ITEM_NAMES.put(117, "minecraft:brewing_stand"); // brewing stand block
-+ ITEM_NAMES.put(118, "minecraft:cauldron"); // cauldron block
-+ ITEM_NAMES.put(124, "minecraft:redstone_lamp"); // lit redstone lamp block
-+ ITEM_NAMES.put(132, ITEM_NAMES.get(0)); // skip (tripwire wire block)
-+ ITEM_NAMES.put(140, "minecraft:flower_pot"); // flower pot block
-+ ITEM_NAMES.put(144, "minecraft:skull"); // skull block
-+ ITEM_NAMES.put(149, "minecraft:comparator"); // unpowered comparator block
-+ ITEM_NAMES.put(150, "minecraft:comparator"); // powered comparator block
-+ // there are technically more, but at some point even older versions pre id -> name conversion didn't even load them.
-+ // (all I know is 1.7.10 does not load them)
-+ // and so given even the vanilla game wouldn't load them, there's no conversion path for them - they were never valid.
+ }
+
+ private static final String[] POTION_NAMES = new String[128];
@@ -6405,35 +6380,216 @@ index 0000000000000000000000000000000000000000..a1985c85aa9193699d7d20e6f4f11b6e
+}
diff --git a/src/main/java/ca/spottedleaf/dataconverter/minecraft/converters/stats/ConverterFlattenStats.java b/src/main/java/ca/spottedleaf/dataconverter/minecraft/converters/stats/ConverterFlattenStats.java
new file mode 100644
-index 0000000000000000000000000000000000000000..99d2c2c84820295be1f8bb0b43784e58f51a46dd
+index 0000000000000000000000000000000000000000..9c1c6627733839d62bc552c158cb556303c5d1bb
--- /dev/null
+++ b/src/main/java/ca/spottedleaf/dataconverter/minecraft/converters/stats/ConverterFlattenStats.java
-@@ -0,0 +1,94 @@
+@@ -0,0 +1,309 @@
+package ca.spottedleaf.dataconverter.minecraft.converters.stats;
+
+import ca.spottedleaf.dataconverter.converters.DataConverter;
+import ca.spottedleaf.dataconverter.minecraft.MCVersions;
+import ca.spottedleaf.dataconverter.minecraft.converters.helpers.HelperBlockFlatteningV1450;
+import ca.spottedleaf.dataconverter.minecraft.converters.itemstack.ConverterFlattenItemStack;
++import ca.spottedleaf.dataconverter.minecraft.versions.V1451;
+import ca.spottedleaf.dataconverter.types.MapType;
+import ca.spottedleaf.dataconverter.types.Types;
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.ImmutableSet;
+import org.apache.commons.lang3.StringUtils;
++import java.util.HashMap;
++import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+
-+public final class ConverterFlattenStats extends DataConverter, MapType> {
++public final class ConverterFlattenStats {
+
-+ private static final Set SKIP = ImmutableSet.builder().add("stat.craftItem.minecraft.spawn_egg").add("stat.useItem.minecraft.spawn_egg").add("stat.breakItem.minecraft.spawn_egg").add("stat.pickup.minecraft.spawn_egg").add("stat.drop.minecraft.spawn_egg").build();
-+ private static final Map CUSTOM_MAP = ImmutableMap.builder().put("stat.leaveGame", "minecraft:leave_game").put("stat.playOneMinute", "minecraft:play_one_minute").put("stat.timeSinceDeath", "minecraft:time_since_death").put("stat.sneakTime", "minecraft:sneak_time").put("stat.walkOneCm", "minecraft:walk_one_cm").put("stat.crouchOneCm", "minecraft:crouch_one_cm").put("stat.sprintOneCm", "minecraft:sprint_one_cm").put("stat.swimOneCm", "minecraft:swim_one_cm").put("stat.fallOneCm", "minecraft:fall_one_cm").put("stat.climbOneCm", "minecraft:climb_one_cm").put("stat.flyOneCm", "minecraft:fly_one_cm").put("stat.diveOneCm", "minecraft:dive_one_cm").put("stat.minecartOneCm", "minecraft:minecart_one_cm").put("stat.boatOneCm", "minecraft:boat_one_cm").put("stat.pigOneCm", "minecraft:pig_one_cm").put("stat.horseOneCm", "minecraft:horse_one_cm").put("stat.aviateOneCm", "minecraft:aviate_one_cm").put("stat.jump", "minecraft:jump").put("stat.drop", "minecraft:drop").put("stat.damageDealt", "minecraft:damage_dealt").put("stat.damageTaken", "minecraft:damage_taken").put("stat.deaths", "minecraft:deaths").put("stat.mobKills", "minecraft:mob_kills").put("stat.animalsBred", "minecraft:animals_bred").put("stat.playerKills", "minecraft:player_kills").put("stat.fishCaught", "minecraft:fish_caught").put("stat.talkedToVillager", "minecraft:talked_to_villager").put("stat.tradedWithVillager", "minecraft:traded_with_villager").put("stat.cakeSlicesEaten", "minecraft:eat_cake_slice").put("stat.cauldronFilled", "minecraft:fill_cauldron").put("stat.cauldronUsed", "minecraft:use_cauldron").put("stat.armorCleaned", "minecraft:clean_armor").put("stat.bannerCleaned", "minecraft:clean_banner").put("stat.brewingstandInteraction", "minecraft:interact_with_brewingstand").put("stat.beaconInteraction", "minecraft:interact_with_beacon").put("stat.dropperInspected", "minecraft:inspect_dropper").put("stat.hopperInspected", "minecraft:inspect_hopper").put("stat.dispenserInspected", "minecraft:inspect_dispenser").put("stat.noteblockPlayed", "minecraft:play_noteblock").put("stat.noteblockTuned", "minecraft:tune_noteblock").put("stat.flowerPotted", "minecraft:pot_flower").put("stat.trappedChestTriggered", "minecraft:trigger_trapped_chest").put("stat.enderchestOpened", "minecraft:open_enderchest").put("stat.itemEnchanted", "minecraft:enchant_item").put("stat.recordPlayed", "minecraft:play_record").put("stat.furnaceInteraction", "minecraft:interact_with_furnace").put("stat.craftingTableInteraction", "minecraft:interact_with_crafting_table").put("stat.chestOpened", "minecraft:open_chest").put("stat.sleepInBed", "minecraft:sleep_in_bed").put("stat.shulkerBoxOpened", "minecraft:open_shulker_box").build();
-+ private static final Map ITEM_KEYS = ImmutableMap.builder().put("stat.craftItem", "minecraft:crafted").put("stat.useItem", "minecraft:used").put("stat.breakItem", "minecraft:broken").put("stat.pickup", "minecraft:picked_up").put("stat.drop", "minecraft:dropped").build();
-+ private static final Map ENTITY_KEYS = ImmutableMap.builder().put("stat.entityKilledBy", "minecraft:killed_by").put("stat.killEntity", "minecraft:killed").build();
-+ private static final Map ENTITIES = ImmutableMap.builder().put("Bat", "minecraft:bat").put("Blaze", "minecraft:blaze").put("CaveSpider", "minecraft:cave_spider").put("Chicken", "minecraft:chicken").put("Cow", "minecraft:cow").put("Creeper", "minecraft:creeper").put("Donkey", "minecraft:donkey").put("ElderGuardian", "minecraft:elder_guardian").put("Enderman", "minecraft:enderman").put("Endermite", "minecraft:endermite").put("EvocationIllager", "minecraft:evocation_illager").put("Ghast", "minecraft:ghast").put("Guardian", "minecraft:guardian").put("Horse", "minecraft:horse").put("Husk", "minecraft:husk").put("Llama", "minecraft:llama").put("LavaSlime", "minecraft:magma_cube").put("MushroomCow", "minecraft:mooshroom").put("Mule", "minecraft:mule").put("Ozelot", "minecraft:ocelot").put("Parrot", "minecraft:parrot").put("Pig", "minecraft:pig").put("PolarBear", "minecraft:polar_bear").put("Rabbit", "minecraft:rabbit").put("Sheep", "minecraft:sheep").put("Shulker", "minecraft:shulker").put("Silverfish", "minecraft:silverfish").put("SkeletonHorse", "minecraft:skeleton_horse").put("Skeleton", "minecraft:skeleton").put("Slime", "minecraft:slime").put("Spider", "minecraft:spider").put("Squid", "minecraft:squid").put("Stray", "minecraft:stray").put("Vex", "minecraft:vex").put("Villager", "minecraft:villager").put("VindicationIllager", "minecraft:vindication_illager").put("Witch", "minecraft:witch").put("WitherSkeleton", "minecraft:wither_skeleton").put("Wolf", "minecraft:wolf").put("ZombieHorse", "minecraft:zombie_horse").put("PigZombie", "minecraft:zombie_pigman").put("ZombieVillager", "minecraft:zombie_villager").put("Zombie", "minecraft:zombie").build();
++ private static final int VERSION = MCVersions.V17W47A;
++ private static final int VERSION_STEP = 6;
+
-+ public ConverterFlattenStats() {
-+ super(MCVersions.V17W47A, 6);
-+ }
++ private static final Set SPECIAL_OBJECTIVE_CRITERIA = new HashSet<>(
++ Set.of(
++ "dummy",
++ "trigger",
++ "deathCount",
++ "playerKillCount",
++ "totalKillCount",
++ "health",
++ "food",
++ "air",
++ "armor",
++ "xp",
++ "level",
++ "killedByTeam.aqua",
++ "killedByTeam.black",
++ "killedByTeam.blue",
++ "killedByTeam.dark_aqua",
++ "killedByTeam.dark_blue",
++ "killedByTeam.dark_gray",
++ "killedByTeam.dark_green",
++ "killedByTeam.dark_purple",
++ "killedByTeam.dark_red",
++ "killedByTeam.gold",
++ "killedByTeam.gray",
++ "killedByTeam.green",
++ "killedByTeam.light_purple",
++ "killedByTeam.red",
++ "killedByTeam.white",
++ "killedByTeam.yellow",
++ "teamkill.aqua",
++ "teamkill.black",
++ "teamkill.blue",
++ "teamkill.dark_aqua",
++ "teamkill.dark_blue",
++ "teamkill.dark_gray",
++ "teamkill.dark_green",
++ "teamkill.dark_purple",
++ "teamkill.dark_red",
++ "teamkill.gold",
++ "teamkill.gray",
++ "teamkill.green",
++ "teamkill.light_purple",
++ "teamkill.red",
++ "teamkill.white",
++ "teamkill.yellow"
++ )
++ );
++
++ private static final Set SKIP = new HashSet<>(
++ ImmutableSet.builder()
++ .add("stat.craftItem.minecraft.spawn_egg")
++ .add("stat.useItem.minecraft.spawn_egg")
++ .add("stat.breakItem.minecraft.spawn_egg")
++ .add("stat.pickup.minecraft.spawn_egg")
++ .add("stat.drop.minecraft.spawn_egg")
++ .build()
++ );
++
++ private static final Map CUSTOM_MAP = new HashMap<>(
++ ImmutableMap.builder()
++ .put("stat.leaveGame", "minecraft:leave_game")
++ .put("stat.playOneMinute", "minecraft:play_one_minute")
++ .put("stat.timeSinceDeath", "minecraft:time_since_death")
++ .put("stat.sneakTime", "minecraft:sneak_time")
++ .put("stat.walkOneCm", "minecraft:walk_one_cm")
++ .put("stat.crouchOneCm", "minecraft:crouch_one_cm")
++ .put("stat.sprintOneCm", "minecraft:sprint_one_cm")
++ .put("stat.swimOneCm", "minecraft:swim_one_cm")
++ .put("stat.fallOneCm", "minecraft:fall_one_cm")
++ .put("stat.climbOneCm", "minecraft:climb_one_cm")
++ .put("stat.flyOneCm", "minecraft:fly_one_cm")
++ .put("stat.diveOneCm", "minecraft:dive_one_cm")
++ .put("stat.minecartOneCm", "minecraft:minecart_one_cm")
++ .put("stat.boatOneCm", "minecraft:boat_one_cm")
++ .put("stat.pigOneCm", "minecraft:pig_one_cm")
++ .put("stat.horseOneCm", "minecraft:horse_one_cm")
++ .put("stat.aviateOneCm", "minecraft:aviate_one_cm")
++ .put("stat.jump", "minecraft:jump")
++ .put("stat.drop", "minecraft:drop")
++ .put("stat.damageDealt", "minecraft:damage_dealt")
++ .put("stat.damageTaken", "minecraft:damage_taken")
++ .put("stat.deaths", "minecraft:deaths")
++ .put("stat.mobKills", "minecraft:mob_kills")
++ .put("stat.animalsBred", "minecraft:animals_bred")
++ .put("stat.playerKills", "minecraft:player_kills")
++ .put("stat.fishCaught", "minecraft:fish_caught")
++ .put("stat.talkedToVillager", "minecraft:talked_to_villager")
++ .put("stat.tradedWithVillager", "minecraft:traded_with_villager")
++ .put("stat.cakeSlicesEaten", "minecraft:eat_cake_slice")
++ .put("stat.cauldronFilled", "minecraft:fill_cauldron")
++ .put("stat.cauldronUsed", "minecraft:use_cauldron")
++ .put("stat.armorCleaned", "minecraft:clean_armor")
++ .put("stat.bannerCleaned", "minecraft:clean_banner")
++ .put("stat.brewingstandInteraction", "minecraft:interact_with_brewingstand")
++ .put("stat.beaconInteraction", "minecraft:interact_with_beacon")
++ .put("stat.dropperInspected", "minecraft:inspect_dropper")
++ .put("stat.hopperInspected", "minecraft:inspect_hopper")
++ .put("stat.dispenserInspected", "minecraft:inspect_dispenser")
++ .put("stat.noteblockPlayed", "minecraft:play_noteblock")
++ .put("stat.noteblockTuned", "minecraft:tune_noteblock")
++ .put("stat.flowerPotted", "minecraft:pot_flower")
++ .put("stat.trappedChestTriggered", "minecraft:trigger_trapped_chest")
++ .put("stat.enderchestOpened", "minecraft:open_enderchest")
++ .put("stat.itemEnchanted", "minecraft:enchant_item")
++ .put("stat.recordPlayed", "minecraft:play_record")
++ .put("stat.furnaceInteraction", "minecraft:interact_with_furnace")
++ .put("stat.craftingTableInteraction", "minecraft:interact_with_crafting_table")
++ .put("stat.chestOpened", "minecraft:open_chest")
++ .put("stat.sleepInBed", "minecraft:sleep_in_bed")
++ .put("stat.shulkerBoxOpened", "minecraft:open_shulker_box")
++ .build()
++ );
++
++ private static final String BLOCK_KEY = "stat.mineBlock";
++ private static final String NEW_BLOCK_KEY = "minecraft:mined";
++
++ private static final Map ITEM_KEYS = new HashMap<>(
++ ImmutableMap.builder()
++ .put("stat.craftItem", "minecraft:crafted")
++ .put("stat.useItem", "minecraft:used")
++ .put("stat.breakItem", "minecraft:broken")
++ .put("stat.pickup", "minecraft:picked_up")
++ .put("stat.drop", "minecraft:dropped")
++ .build()
++ );
++
++ private static final Map ENTITY_KEYS = new HashMap<>(
++ ImmutableMap.builder()
++ .put("stat.entityKilledBy", "minecraft:killed_by")
++ .put("stat.killEntity", "minecraft:killed")
++ .build()
++ );
++
++ private static final Map ENTITIES = new HashMap<>(
++ ImmutableMap.builder()
++ .put("Bat", "minecraft:bat")
++ .put("Blaze", "minecraft:blaze")
++ .put("CaveSpider", "minecraft:cave_spider")
++ .put("Chicken", "minecraft:chicken")
++ .put("Cow", "minecraft:cow")
++ .put("Creeper", "minecraft:creeper")
++ .put("Donkey", "minecraft:donkey")
++ .put("ElderGuardian", "minecraft:elder_guardian")
++ .put("Enderman", "minecraft:enderman")
++ .put("Endermite", "minecraft:endermite")
++ .put("EvocationIllager", "minecraft:evocation_illager")
++ .put("Ghast", "minecraft:ghast")
++ .put("Guardian", "minecraft:guardian")
++ .put("Horse", "minecraft:horse")
++ .put("Husk", "minecraft:husk")
++ .put("Llama", "minecraft:llama")
++ .put("LavaSlime", "minecraft:magma_cube")
++ .put("MushroomCow", "minecraft:mooshroom")
++ .put("Mule", "minecraft:mule")
++ .put("Ozelot", "minecraft:ocelot")
++ .put("Parrot", "minecraft:parrot")
++ .put("Pig", "minecraft:pig")
++ .put("PolarBear", "minecraft:polar_bear")
++ .put("Rabbit", "minecraft:rabbit")
++ .put("Sheep", "minecraft:sheep")
++ .put("Shulker", "minecraft:shulker")
++ .put("Silverfish", "minecraft:silverfish")
++ .put("SkeletonHorse", "minecraft:skeleton_horse")
++ .put("Skeleton", "minecraft:skeleton")
++ .put("Slime", "minecraft:slime")
++ .put("Spider", "minecraft:spider")
++ .put("Squid", "minecraft:squid")
++ .put("Stray", "minecraft:stray")
++ .put("Vex", "minecraft:vex")
++ .put("Villager", "minecraft:villager")
++ .put("VindicationIllager", "minecraft:vindication_illager")
++ .put("Witch", "minecraft:witch")
++ .put("WitherSkeleton", "minecraft:wither_skeleton")
++ .put("Wolf", "minecraft:wolf")
++ .put("ZombieHorse", "minecraft:zombie_horse")
++ .put("PigZombie", "minecraft:zombie_pigman")
++ .put("ZombieVillager", "minecraft:zombie_villager")
++ .put("Zombie", "minecraft:zombie")
++ .build()
++ );
++
++ private static final String NEW_CUSTOM_KEY = "minecraft:custom";
++
++ private ConverterFlattenStats() {}
+
+ private static String upgradeItem(final String itemName) {
+ return ConverterFlattenItemStack.flattenItem(itemName, 0);
@@ -6443,65 +6599,99 @@ index 0000000000000000000000000000000000000000..99d2c2c84820295be1f8bb0b43784e58
+ return HelperBlockFlatteningV1450.getNewBlockName(block);
+ }
+
-+ @Override
-+ public MapType convert(final MapType data, final long sourceVersion, final long toVersion) {
-+ final MapType stats = Types.NBT.createEmptyMap();
++ private static record StatType(String category, String key) {}
+
-+ for (final String statKey : data.keys()) {
-+ final Number value = data.getNumber(statKey);
-+ if (value == null) {
-+ continue;
-+ }
-+
-+ if (SKIP.contains(statKey)) {
-+ continue;
-+ }
-+
-+ final String statType;
-+ final String newStatKey;
-+
-+ if (CUSTOM_MAP.containsKey(statKey)) {
-+ statType = "minecraft:custom";
-+ newStatKey = CUSTOM_MAP.get(statKey);
-+ } else {
-+ final int i = StringUtils.ordinalIndexOf(statKey, ".", 2);
-+ if (i < 0) {
-+ continue;
-+ }
-+
-+ final String key = statKey.substring(0, i);
-+
-+ if ("stat.mineBlock".equals(key)) {
-+ statType = "minecraft:mined";
-+ newStatKey = upgradeBlock(statKey.substring(i + 1).replace('.', ':'));
-+ } else if (ITEM_KEYS.containsKey(key)) {
-+ statType = ITEM_KEYS.get(key);
-+ final String item = statKey.substring(i + 1).replace('.', ':');
-+ final String upgradedItem = upgradeItem(item);
-+ newStatKey = upgradedItem == null ? item : upgradedItem;
-+ } else if (ENTITY_KEYS.containsKey(key)) {
-+ statType = ENTITY_KEYS.get(key);
-+ final String entity = statKey.substring(i + 1).replace('.', ':');
-+ newStatKey = ENTITIES.getOrDefault(entity, entity);
-+ } else {
-+ continue;
-+ }
-+ }
-+
-+ MapType statTypeMap = stats.getMap(statType);
-+ if (statTypeMap == null) {
-+ stats.setMap(statType, statTypeMap = Types.NBT.createEmptyMap());
-+ }
-+
-+ statTypeMap.setGeneric(newStatKey, value);
++ private static StatType convertLegacyKey(final String key) {
++ if (SKIP.contains(key)) {
++ return null;
+ }
+
-+ data.clear();
++ final String custom = CUSTOM_MAP.get(key);
++ if (custom != null) {
++ return new StatType(NEW_CUSTOM_KEY, custom);
++ }
+
-+ data.setMap("stats", stats);
++ final int i = StringUtils.ordinalIndexOf(key, ".", 2);
++ if (i < 0) {
++ return null;
++ }
++
++ final String stat = key.substring(0, i);
++
++ if (BLOCK_KEY.equals(stat)) {
++ return new StatType(NEW_BLOCK_KEY, upgradeBlock(key.substring(i + 1).replace('.', ':')));
++ }
++
++ final String itemStat = ITEM_KEYS.get(stat);
++
++ if (itemStat != null) {
++ final String itemId = key.substring(i + 1).replace('.', ':');
++ final String flattenedItem = upgradeItem(itemId);
++
++ return new StatType(itemStat, flattenedItem == null ? itemId : flattenedItem);
++ }
++
++ final String entityStat = ENTITY_KEYS.get(stat);
++ if (entityStat != null) {
++ final String entityId = key.substring(i + 1).replace('.', ':');
++
++ return new StatType(entityStat, ENTITIES.getOrDefault(entityId, entityId));
++ }
+
+ return null;
+ }
++
++ public static DataConverter, MapType> makeStatsConverter() {
++ return new DataConverter<>(VERSION, VERSION_STEP) {
++ @Override
++ public MapType convert(final MapType data, final long sourceVersion, final long toVersion) {
++ final MapType stats = Types.NBT.createEmptyMap();
++
++ for (final String statKey : data.keys()) {
++ final Number value = data.getNumber(statKey);
++ if (value == null) {
++ continue;
++ }
++
++ final StatType converted = convertLegacyKey(statKey);
++
++ if (converted == null) {
++ continue;
++ }
++
++ stats.getOrCreateMap(converted.category()).setGeneric(converted.key(), value);
++ }
++
++ data.clear();
++ data.setMap("stats", stats);
++
++ return null;
++ }
++ };
++ }
++
++ public static DataConverter, MapType> makeObjectiveConverter() {
++ return new DataConverter<>(VERSION, VERSION_STEP) {
++ @Override
++ public MapType convert(final MapType data, final long sourceVersion, final long toVersion) {
++ final String criteriaName = data.getString("CriteriaName");
++
++ if (criteriaName == null) {
++ return null;
++ }
++
++ if (SPECIAL_OBJECTIVE_CRITERIA.contains(criteriaName)) {
++ return null;
++ }
++
++ final StatType converted = convertLegacyKey(criteriaName);
++ data.setString("CriteriaName",
++ converted == null ? "dummy" : V1451.packWithDot(converted.category()) + ":" + V1451.packWithDot(converted.key()));
++
++ return null;
++ }
++ };
++ }
+}
diff --git a/src/main/java/ca/spottedleaf/dataconverter/minecraft/converters/tileentity/ConverterAbstractTileEntityRename.java b/src/main/java/ca/spottedleaf/dataconverter/minecraft/converters/tileentity/ConverterAbstractTileEntityRename.java
new file mode 100644
@@ -6852,10 +7042,10 @@ index 0000000000000000000000000000000000000000..76a6e3efa5c69150e8f5e0063cb6357b
+}
diff --git a/src/main/java/ca/spottedleaf/dataconverter/minecraft/datatypes/MCTypeRegistry.java b/src/main/java/ca/spottedleaf/dataconverter/minecraft/datatypes/MCTypeRegistry.java
new file mode 100644
-index 0000000000000000000000000000000000000000..609c9f21fb90aa74ceeefbeaeed4b000ea966a88
+index 0000000000000000000000000000000000000000..e5bcd86aac84ddd7f4e050f6e2ff6e829e6fd69d
--- /dev/null
+++ b/src/main/java/ca/spottedleaf/dataconverter/minecraft/datatypes/MCTypeRegistry.java
-@@ -0,0 +1,259 @@
+@@ -0,0 +1,269 @@
+package ca.spottedleaf.dataconverter.minecraft.datatypes;
+
+import ca.spottedleaf.dataconverter.minecraft.versions.*;
@@ -6873,7 +7063,6 @@ index 0000000000000000000000000000000000000000..609c9f21fb90aa74ceeefbeaeed4b000
+ public static final MCDataType OPTIONS = new MCDataType("Options");
+ public static final MCDataType STRUCTURE = new MCDataType("Structure");
+ public static final MCDataType STATS = new MCDataType("Stats");
-+ public static final MCDataType SAVED_DATA = new MCDataType("SavedData");
+ public static final MCDataType ADVANCEMENTS = new MCDataType("Advancements");
+ public static final MCDataType POI_CHUNK = new MCDataType("PoiChunk");
+ public static final MCDataType ENTITY_CHUNK = new MCDataType("EntityChunk");
@@ -6892,7 +7081,14 @@ index 0000000000000000000000000000000000000000..609c9f21fb90aa74ceeefbeaeed4b000
+ public static final MCValueType BIOME = new MCValueType("Biome");
+ public static final MCDataType WORLD_GEN_SETTINGS = new MCDataType("WorldGenSettings");
+ public static final MCValueType GAME_EVENT_NAME = new MCValueType("GameEventName");
-+ public static final MCValueType MULTI_NOISE_BIOME_SOURCE_PARAMETER_LIST = new MCValueType("MULTI_NOISE_BIOME_SOURCE_PARAMETER_LIST");
++
++ public static final MCValueType MULTI_NOISE_BIOME_SOURCE_PARAMETER_LIST = new MCValueType("MultiNoiseBiomeSourceParameterList");
++
++ public static final MCDataType SAVED_DATA_RANDOM_SEQUENCES = new MCDataType("SavedData/RandomSequences");
++ public static final MCDataType SAVED_DATA_SCOREBOARD = new MCDataType("SavedData/Scoreboard");
++ public static final MCDataType SAVED_DATA_STRUCTURE_FEATURE_INDICES = new MCDataType("SavedData/StructureFeatureIndices");
++ public static final MCDataType SAVED_DATA_MAP_DATA = new MCDataType("SavedData/MapData");
++ public static final MCDataType SAVED_DATA_RAIDS = new MCDataType("SavedData/Raids");
+
+ static {
+ try {
@@ -7111,6 +7307,10 @@ index 0000000000000000000000000000000000000000..609c9f21fb90aa74ceeefbeaeed4b000
+ V3450.register();
+ V3451.register();
+ V3459.register();
++ V3564.register();
++ V3565.register();
++ V3566.register();
++ V3568.register();
+ }
+
+ private MCTypeRegistry() {}
@@ -8616,10 +8816,10 @@ index 0000000000000000000000000000000000000000..711222cd33ee557b7f3d1f6ae73ad45d
+}
diff --git a/src/main/java/ca/spottedleaf/dataconverter/minecraft/versions/V1451.java b/src/main/java/ca/spottedleaf/dataconverter/minecraft/versions/V1451.java
new file mode 100644
-index 0000000000000000000000000000000000000000..b88616e5af3b9f213bd7ee514ab191a468c61be7
+index 0000000000000000000000000000000000000000..aff3f47430cc85d12080c116610e4328e31acbe6
--- /dev/null
+++ b/src/main/java/ca/spottedleaf/dataconverter/minecraft/versions/V1451.java
-@@ -0,0 +1,512 @@
+@@ -0,0 +1,513 @@
+package ca.spottedleaf.dataconverter.minecraft.versions;
+
+import ca.spottedleaf.dataconverter.converters.DataConverter;
@@ -8656,6 +8856,11 @@ index 0000000000000000000000000000000000000000..b88616e5af3b9f213bd7ee514ab191a4
+
+ protected static final int VERSION = MCVersions.V17W47A;
+
++ public static String packWithDot(final String string) {
++ final ResourceLocation resourceLocation = ResourceLocation.tryParse(string);
++ return resourceLocation != null ? resourceLocation.getNamespace() + "." + resourceLocation.getPath() : string;
++ }
++
+ public static void register() {
+ // V0
+ MCTypeRegistry.TILE_ENTITY.addWalker(VERSION, 0, "minecraft:trapped_chest", new DataWalkerItemLists("Items"));
@@ -8879,7 +9084,8 @@ index 0000000000000000000000000000000000000000..b88616e5af3b9f213bd7ee514ab191a4
+ });
+
+ // V6
-+ MCTypeRegistry.STATS.addStructureConverter(new ConverterFlattenStats());
++ MCTypeRegistry.STATS.addStructureConverter(ConverterFlattenStats.makeStatsConverter());
++ MCTypeRegistry.OBJECTIVE.addStructureConverter(ConverterFlattenStats.makeObjectiveConverter());
+ MCTypeRegistry.TILE_ENTITY.addConverterForId("minecraft:jukebox", new DataConverter<>(VERSION, 6) {
+ @Override
+ public MapType convert(final MapType data, final long sourceVersion, final long toVersion) {
@@ -8926,11 +9132,6 @@ index 0000000000000000000000000000000000000000..b88616e5af3b9f213bd7ee514ab191a4
+ });
+
+ MCTypeRegistry.OBJECTIVE.addStructureHook(VERSION, 6, new DataHook<>() {
-+ private static String packWithDot(final String string) {
-+ final ResourceLocation resourceLocation = ResourceLocation.tryParse(string);
-+ return resourceLocation != null ? resourceLocation.getNamespace() + "." + resourceLocation.getPath() : string;
-+ }
-+
+ @Override
+ public MapType preHook(final MapType data, final long fromVersion, final long toVersion) {
+ // unpack
@@ -9619,44 +9820,47 @@ index 0000000000000000000000000000000000000000..40b64efb8717b2de0ff13af87bcc9911
+}
diff --git a/src/main/java/ca/spottedleaf/dataconverter/minecraft/versions/V1480.java b/src/main/java/ca/spottedleaf/dataconverter/minecraft/versions/V1480.java
new file mode 100644
-index 0000000000000000000000000000000000000000..e5373d4e6ca027749f634e9a508bd81b9b41ed3e
+index 0000000000000000000000000000000000000000..e4777730c6969d5a964daedce99c06a858615bc7
--- /dev/null
+++ b/src/main/java/ca/spottedleaf/dataconverter/minecraft/versions/V1480.java
-@@ -0,0 +1,42 @@
+@@ -0,0 +1,45 @@
+package ca.spottedleaf.dataconverter.minecraft.versions;
+
+import ca.spottedleaf.dataconverter.minecraft.MCVersions;
+import ca.spottedleaf.dataconverter.minecraft.converters.blockname.ConverterAbstractBlockRename;
+import ca.spottedleaf.dataconverter.minecraft.converters.itemname.ConverterAbstractItemRename;
+import com.google.common.collect.ImmutableMap;
++import java.util.HashMap;
+import java.util.Map;
+
+public final class V1480 {
+
+ protected static final int VERSION = MCVersions.V18W14A + 1;
+
-+ public static final Map RENAMED_IDS = ImmutableMap.builder()
-+ .put("minecraft:blue_coral", "minecraft:tube_coral_block")
-+ .put("minecraft:pink_coral", "minecraft:brain_coral_block")
-+ .put("minecraft:purple_coral", "minecraft:bubble_coral_block")
-+ .put("minecraft:red_coral", "minecraft:fire_coral_block")
-+ .put("minecraft:yellow_coral", "minecraft:horn_coral_block")
-+ .put("minecraft:blue_coral_plant", "minecraft:tube_coral")
-+ .put("minecraft:pink_coral_plant", "minecraft:brain_coral")
-+ .put("minecraft:purple_coral_plant", "minecraft:bubble_coral")
-+ .put("minecraft:red_coral_plant", "minecraft:fire_coral")
-+ .put("minecraft:yellow_coral_plant", "minecraft:horn_coral")
-+ .put("minecraft:blue_coral_fan", "minecraft:tube_coral_fan")
-+ .put("minecraft:pink_coral_fan", "minecraft:brain_coral_fan")
-+ .put("minecraft:purple_coral_fan", "minecraft:bubble_coral_fan")
-+ .put("minecraft:red_coral_fan", "minecraft:fire_coral_fan")
-+ .put("minecraft:yellow_coral_fan", "minecraft:horn_coral_fan")
-+ .put("minecraft:blue_dead_coral", "minecraft:dead_tube_coral")
-+ .put("minecraft:pink_dead_coral", "minecraft:dead_brain_coral")
-+ .put("minecraft:purple_dead_coral", "minecraft:dead_bubble_coral")
-+ .put("minecraft:red_dead_coral", "minecraft:dead_fire_coral")
-+ .put("minecraft:yellow_dead_coral", "minecraft:dead_horn_coral")
-+ .build();
++ public static final Map RENAMED_IDS = new HashMap<>(
++ ImmutableMap.builder()
++ .put("minecraft:blue_coral", "minecraft:tube_coral_block")
++ .put("minecraft:pink_coral", "minecraft:brain_coral_block")
++ .put("minecraft:purple_coral", "minecraft:bubble_coral_block")
++ .put("minecraft:red_coral", "minecraft:fire_coral_block")
++ .put("minecraft:yellow_coral", "minecraft:horn_coral_block")
++ .put("minecraft:blue_coral_plant", "minecraft:tube_coral")
++ .put("minecraft:pink_coral_plant", "minecraft:brain_coral")
++ .put("minecraft:purple_coral_plant", "minecraft:bubble_coral")
++ .put("minecraft:red_coral_plant", "minecraft:fire_coral")
++ .put("minecraft:yellow_coral_plant", "minecraft:horn_coral")
++ .put("minecraft:blue_coral_fan", "minecraft:tube_coral_fan")
++ .put("minecraft:pink_coral_fan", "minecraft:brain_coral_fan")
++ .put("minecraft:purple_coral_fan", "minecraft:bubble_coral_fan")
++ .put("minecraft:red_coral_fan", "minecraft:fire_coral_fan")
++ .put("minecraft:yellow_coral_fan", "minecraft:horn_coral_fan")
++ .put("minecraft:blue_dead_coral", "minecraft:dead_tube_coral")
++ .put("minecraft:pink_dead_coral", "minecraft:dead_brain_coral")
++ .put("minecraft:purple_dead_coral", "minecraft:dead_bubble_coral")
++ .put("minecraft:red_dead_coral", "minecraft:dead_fire_coral")
++ .put("minecraft:yellow_dead_coral", "minecraft:dead_horn_coral")
++ .build()
++ );
+
+ public static void register() {
+ ConverterAbstractBlockRename.register(VERSION, RENAMED_IDS::get);
@@ -9783,10 +9987,10 @@ index 0000000000000000000000000000000000000000..f5b9c166304930e095bfc00e8f6b93ed
+}
diff --git a/src/main/java/ca/spottedleaf/dataconverter/minecraft/versions/V1486.java b/src/main/java/ca/spottedleaf/dataconverter/minecraft/versions/V1486.java
new file mode 100644
-index 0000000000000000000000000000000000000000..cf7b0a77b30312a32d5fdb10be3fb45d10ba7870
+index 0000000000000000000000000000000000000000..e87551aa76c1434c2c81da828cd69a9bf32b5e04
--- /dev/null
+++ b/src/main/java/ca/spottedleaf/dataconverter/minecraft/versions/V1486.java
-@@ -0,0 +1,39 @@
+@@ -0,0 +1,44 @@
+package ca.spottedleaf.dataconverter.minecraft.versions;
+
+import ca.spottedleaf.dataconverter.minecraft.MCVersions;
@@ -9795,6 +9999,7 @@ index 0000000000000000000000000000000000000000..cf7b0a77b30312a32d5fdb10be3fb45d
+import ca.spottedleaf.dataconverter.minecraft.datatypes.MCTypeRegistry;
+import ca.spottedleaf.dataconverter.minecraft.walkers.itemstack.DataWalkerItemLists;
+import com.google.common.collect.ImmutableMap;
++import java.util.HashMap;
+import java.util.Map;
+
+public final class V1486 {
@@ -9805,14 +10010,18 @@ index 0000000000000000000000000000000000000000..cf7b0a77b30312a32d5fdb10be3fb45d
+ MCTypeRegistry.ENTITY.addWalker(VERSION, id, new DataWalkerItemLists("ArmorItems", "HandItems"));
+ }
+
-+ public static final Map RENAMED_ENTITY_IDS = ImmutableMap.builder()
-+ .put("minecraft:salmon_mob", "minecraft:salmon")
-+ .put("minecraft:cod_mob", "minecraft:cod")
-+ .build();
-+ public static final Map RENAMED_ITEM_IDS = ImmutableMap.builder()
-+ .put("minecraft:salmon_mob_spawn_egg", "minecraft:salmon_spawn_egg")
-+ .put("minecraft:cod_mob_spawn_egg", "minecraft:cod_spawn_egg")
-+ .build();
++ public static final Map RENAMED_ENTITY_IDS = new HashMap<>(
++ ImmutableMap.builder()
++ .put("minecraft:salmon_mob", "minecraft:salmon")
++ .put("minecraft:cod_mob", "minecraft:cod")
++ .build()
++ );
++ public static final Map RENAMED_ITEM_IDS = new HashMap<>(
++ ImmutableMap.builder()
++ .put("minecraft:salmon_mob_spawn_egg", "minecraft:salmon_spawn_egg")
++ .put("minecraft:cod_mob_spawn_egg", "minecraft:cod_spawn_egg")
++ .build()
++ );
+
+
+ public static void register() {
@@ -10643,78 +10852,81 @@ index 0000000000000000000000000000000000000000..9208152e2a158470f37b0eb022478e8e
+}
diff --git a/src/main/java/ca/spottedleaf/dataconverter/minecraft/versions/V1501.java b/src/main/java/ca/spottedleaf/dataconverter/minecraft/versions/V1501.java
new file mode 100644
-index 0000000000000000000000000000000000000000..c497faa60c37f30ceb0d7c394446d6074599c1b7
+index 0000000000000000000000000000000000000000..3a1bf6d864e10273c87209bbcdbdb889aec1103d
--- /dev/null
+++ b/src/main/java/ca/spottedleaf/dataconverter/minecraft/versions/V1501.java
-@@ -0,0 +1,75 @@
+@@ -0,0 +1,78 @@
+package ca.spottedleaf.dataconverter.minecraft.versions;
+
+import ca.spottedleaf.dataconverter.minecraft.MCVersions;
+import ca.spottedleaf.dataconverter.minecraft.converters.advancements.ConverterAbstractAdvancementsRename;
+import com.google.common.collect.ImmutableMap;
++import java.util.HashMap;
+import java.util.Map;
+
+public final class V1501 {
+
+ protected static final int VERSION = MCVersions.V1_13_PRE1;
+
-+ private static final Map RENAMES = ImmutableMap.builder()
-+ .put("minecraft:recipes/brewing/speckled_melon", "minecraft:recipes/brewing/glistering_melon_slice")
-+ .put("minecraft:recipes/building_blocks/black_stained_hardened_clay", "minecraft:recipes/building_blocks/black_terracotta")
-+ .put("minecraft:recipes/building_blocks/blue_stained_hardened_clay", "minecraft:recipes/building_blocks/blue_terracotta")
-+ .put("minecraft:recipes/building_blocks/brown_stained_hardened_clay", "minecraft:recipes/building_blocks/brown_terracotta")
-+ .put("minecraft:recipes/building_blocks/cyan_stained_hardened_clay", "minecraft:recipes/building_blocks/cyan_terracotta")
-+ .put("minecraft:recipes/building_blocks/gray_stained_hardened_clay", "minecraft:recipes/building_blocks/gray_terracotta")
-+ .put("minecraft:recipes/building_blocks/green_stained_hardened_clay", "minecraft:recipes/building_blocks/green_terracotta")
-+ .put("minecraft:recipes/building_blocks/light_blue_stained_hardened_clay", "minecraft:recipes/building_blocks/light_blue_terracotta")
-+ .put("minecraft:recipes/building_blocks/light_gray_stained_hardened_clay", "minecraft:recipes/building_blocks/light_gray_terracotta")
-+ .put("minecraft:recipes/building_blocks/lime_stained_hardened_clay", "minecraft:recipes/building_blocks/lime_terracotta")
-+ .put("minecraft:recipes/building_blocks/magenta_stained_hardened_clay", "minecraft:recipes/building_blocks/magenta_terracotta")
-+ .put("minecraft:recipes/building_blocks/orange_stained_hardened_clay", "minecraft:recipes/building_blocks/orange_terracotta")
-+ .put("minecraft:recipes/building_blocks/pink_stained_hardened_clay", "minecraft:recipes/building_blocks/pink_terracotta")
-+ .put("minecraft:recipes/building_blocks/purple_stained_hardened_clay", "minecraft:recipes/building_blocks/purple_terracotta")
-+ .put("minecraft:recipes/building_blocks/red_stained_hardened_clay", "minecraft:recipes/building_blocks/red_terracotta")
-+ .put("minecraft:recipes/building_blocks/white_stained_hardened_clay", "minecraft:recipes/building_blocks/white_terracotta")
-+ .put("minecraft:recipes/building_blocks/yellow_stained_hardened_clay", "minecraft:recipes/building_blocks/yellow_terracotta")
-+ .put("minecraft:recipes/building_blocks/acacia_wooden_slab", "minecraft:recipes/building_blocks/acacia_slab")
-+ .put("minecraft:recipes/building_blocks/birch_wooden_slab", "minecraft:recipes/building_blocks/birch_slab")
-+ .put("minecraft:recipes/building_blocks/dark_oak_wooden_slab", "minecraft:recipes/building_blocks/dark_oak_slab")
-+ .put("minecraft:recipes/building_blocks/jungle_wooden_slab", "minecraft:recipes/building_blocks/jungle_slab")
-+ .put("minecraft:recipes/building_blocks/oak_wooden_slab", "minecraft:recipes/building_blocks/oak_slab")
-+ .put("minecraft:recipes/building_blocks/spruce_wooden_slab", "minecraft:recipes/building_blocks/spruce_slab")
-+ .put("minecraft:recipes/building_blocks/brick_block", "minecraft:recipes/building_blocks/bricks")
-+ .put("minecraft:recipes/building_blocks/chiseled_stonebrick", "minecraft:recipes/building_blocks/chiseled_stone_bricks")
-+ .put("minecraft:recipes/building_blocks/end_bricks", "minecraft:recipes/building_blocks/end_stone_bricks")
-+ .put("minecraft:recipes/building_blocks/lit_pumpkin", "minecraft:recipes/building_blocks/jack_o_lantern")
-+ .put("minecraft:recipes/building_blocks/magma", "minecraft:recipes/building_blocks/magma_block")
-+ .put("minecraft:recipes/building_blocks/melon_block", "minecraft:recipes/building_blocks/melon")
-+ .put("minecraft:recipes/building_blocks/mossy_stonebrick", "minecraft:recipes/building_blocks/mossy_stone_bricks")
-+ .put("minecraft:recipes/building_blocks/nether_brick", "minecraft:recipes/building_blocks/nether_bricks")
-+ .put("minecraft:recipes/building_blocks/pillar_quartz_block", "minecraft:recipes/building_blocks/quartz_pillar")
-+ .put("minecraft:recipes/building_blocks/red_nether_brick", "minecraft:recipes/building_blocks/red_nether_bricks")
-+ .put("minecraft:recipes/building_blocks/snow", "minecraft:recipes/building_blocks/snow_block")
-+ .put("minecraft:recipes/building_blocks/smooth_red_sandstone", "minecraft:recipes/building_blocks/cut_red_sandstone")
-+ .put("minecraft:recipes/building_blocks/smooth_sandstone", "minecraft:recipes/building_blocks/cut_sandstone")
-+ .put("minecraft:recipes/building_blocks/stonebrick", "minecraft:recipes/building_blocks/stone_bricks")
-+ .put("minecraft:recipes/building_blocks/stone_stairs", "minecraft:recipes/building_blocks/cobblestone_stairs")
-+ .put("minecraft:recipes/building_blocks/string_to_wool", "minecraft:recipes/building_blocks/white_wool_from_string")
-+ .put("minecraft:recipes/decorations/fence", "minecraft:recipes/decorations/oak_fence")
-+ .put("minecraft:recipes/decorations/purple_shulker_box", "minecraft:recipes/decorations/shulker_box")
-+ .put("minecraft:recipes/decorations/slime", "minecraft:recipes/decorations/slime_block")
-+ .put("minecraft:recipes/decorations/snow_layer", "minecraft:recipes/decorations/snow")
-+ .put("minecraft:recipes/misc/bone_meal_from_block", "minecraft:recipes/misc/bone_meal_from_bone_block")
-+ .put("minecraft:recipes/misc/bone_meal_from_bone", "minecraft:recipes/misc/bone_meal")
-+ .put("minecraft:recipes/misc/gold_ingot_from_block", "minecraft:recipes/misc/gold_ingot_from_gold_block")
-+ .put("minecraft:recipes/misc/iron_ingot_from_block", "minecraft:recipes/misc/iron_ingot_from_iron_block")
-+ .put("minecraft:recipes/redstone/fence_gate", "minecraft:recipes/redstone/oak_fence_gate")
-+ .put("minecraft:recipes/redstone/noteblock", "minecraft:recipes/redstone/note_block")
-+ .put("minecraft:recipes/redstone/trapdoor", "minecraft:recipes/redstone/oak_trapdoor")
-+ .put("minecraft:recipes/redstone/wooden_button", "minecraft:recipes/redstone/oak_button")
-+ .put("minecraft:recipes/redstone/wooden_door", "minecraft:recipes/redstone/oak_door")
-+ .put("minecraft:recipes/redstone/wooden_pressure_plate", "minecraft:recipes/redstone/oak_pressure_plate")
-+ .put("minecraft:recipes/transportation/boat", "minecraft:recipes/transportation/oak_boat")
-+ .put("minecraft:recipes/transportation/golden_rail", "minecraft:recipes/transportation/powered_rail")
-+ .build();
++ private static final Map RENAMES = new HashMap<>(
++ ImmutableMap.builder()
++ .put("minecraft:recipes/brewing/speckled_melon", "minecraft:recipes/brewing/glistering_melon_slice")
++ .put("minecraft:recipes/building_blocks/black_stained_hardened_clay", "minecraft:recipes/building_blocks/black_terracotta")
++ .put("minecraft:recipes/building_blocks/blue_stained_hardened_clay", "minecraft:recipes/building_blocks/blue_terracotta")
++ .put("minecraft:recipes/building_blocks/brown_stained_hardened_clay", "minecraft:recipes/building_blocks/brown_terracotta")
++ .put("minecraft:recipes/building_blocks/cyan_stained_hardened_clay", "minecraft:recipes/building_blocks/cyan_terracotta")
++ .put("minecraft:recipes/building_blocks/gray_stained_hardened_clay", "minecraft:recipes/building_blocks/gray_terracotta")
++ .put("minecraft:recipes/building_blocks/green_stained_hardened_clay", "minecraft:recipes/building_blocks/green_terracotta")
++ .put("minecraft:recipes/building_blocks/light_blue_stained_hardened_clay", "minecraft:recipes/building_blocks/light_blue_terracotta")
++ .put("minecraft:recipes/building_blocks/light_gray_stained_hardened_clay", "minecraft:recipes/building_blocks/light_gray_terracotta")
++ .put("minecraft:recipes/building_blocks/lime_stained_hardened_clay", "minecraft:recipes/building_blocks/lime_terracotta")
++ .put("minecraft:recipes/building_blocks/magenta_stained_hardened_clay", "minecraft:recipes/building_blocks/magenta_terracotta")
++ .put("minecraft:recipes/building_blocks/orange_stained_hardened_clay", "minecraft:recipes/building_blocks/orange_terracotta")
++ .put("minecraft:recipes/building_blocks/pink_stained_hardened_clay", "minecraft:recipes/building_blocks/pink_terracotta")
++ .put("minecraft:recipes/building_blocks/purple_stained_hardened_clay", "minecraft:recipes/building_blocks/purple_terracotta")
++ .put("minecraft:recipes/building_blocks/red_stained_hardened_clay", "minecraft:recipes/building_blocks/red_terracotta")
++ .put("minecraft:recipes/building_blocks/white_stained_hardened_clay", "minecraft:recipes/building_blocks/white_terracotta")
++ .put("minecraft:recipes/building_blocks/yellow_stained_hardened_clay", "minecraft:recipes/building_blocks/yellow_terracotta")
++ .put("minecraft:recipes/building_blocks/acacia_wooden_slab", "minecraft:recipes/building_blocks/acacia_slab")
++ .put("minecraft:recipes/building_blocks/birch_wooden_slab", "minecraft:recipes/building_blocks/birch_slab")
++ .put("minecraft:recipes/building_blocks/dark_oak_wooden_slab", "minecraft:recipes/building_blocks/dark_oak_slab")
++ .put("minecraft:recipes/building_blocks/jungle_wooden_slab", "minecraft:recipes/building_blocks/jungle_slab")
++ .put("minecraft:recipes/building_blocks/oak_wooden_slab", "minecraft:recipes/building_blocks/oak_slab")
++ .put("minecraft:recipes/building_blocks/spruce_wooden_slab", "minecraft:recipes/building_blocks/spruce_slab")
++ .put("minecraft:recipes/building_blocks/brick_block", "minecraft:recipes/building_blocks/bricks")
++ .put("minecraft:recipes/building_blocks/chiseled_stonebrick", "minecraft:recipes/building_blocks/chiseled_stone_bricks")
++ .put("minecraft:recipes/building_blocks/end_bricks", "minecraft:recipes/building_blocks/end_stone_bricks")
++ .put("minecraft:recipes/building_blocks/lit_pumpkin", "minecraft:recipes/building_blocks/jack_o_lantern")
++ .put("minecraft:recipes/building_blocks/magma", "minecraft:recipes/building_blocks/magma_block")
++ .put("minecraft:recipes/building_blocks/melon_block", "minecraft:recipes/building_blocks/melon")
++ .put("minecraft:recipes/building_blocks/mossy_stonebrick", "minecraft:recipes/building_blocks/mossy_stone_bricks")
++ .put("minecraft:recipes/building_blocks/nether_brick", "minecraft:recipes/building_blocks/nether_bricks")
++ .put("minecraft:recipes/building_blocks/pillar_quartz_block", "minecraft:recipes/building_blocks/quartz_pillar")
++ .put("minecraft:recipes/building_blocks/red_nether_brick", "minecraft:recipes/building_blocks/red_nether_bricks")
++ .put("minecraft:recipes/building_blocks/snow", "minecraft:recipes/building_blocks/snow_block")
++ .put("minecraft:recipes/building_blocks/smooth_red_sandstone", "minecraft:recipes/building_blocks/cut_red_sandstone")
++ .put("minecraft:recipes/building_blocks/smooth_sandstone", "minecraft:recipes/building_blocks/cut_sandstone")
++ .put("minecraft:recipes/building_blocks/stonebrick", "minecraft:recipes/building_blocks/stone_bricks")
++ .put("minecraft:recipes/building_blocks/stone_stairs", "minecraft:recipes/building_blocks/cobblestone_stairs")
++ .put("minecraft:recipes/building_blocks/string_to_wool", "minecraft:recipes/building_blocks/white_wool_from_string")
++ .put("minecraft:recipes/decorations/fence", "minecraft:recipes/decorations/oak_fence")
++ .put("minecraft:recipes/decorations/purple_shulker_box", "minecraft:recipes/decorations/shulker_box")
++ .put("minecraft:recipes/decorations/slime", "minecraft:recipes/decorations/slime_block")
++ .put("minecraft:recipes/decorations/snow_layer", "minecraft:recipes/decorations/snow")
++ .put("minecraft:recipes/misc/bone_meal_from_block", "minecraft:recipes/misc/bone_meal_from_bone_block")
++ .put("minecraft:recipes/misc/bone_meal_from_bone", "minecraft:recipes/misc/bone_meal")
++ .put("minecraft:recipes/misc/gold_ingot_from_block", "minecraft:recipes/misc/gold_ingot_from_gold_block")
++ .put("minecraft:recipes/misc/iron_ingot_from_block", "minecraft:recipes/misc/iron_ingot_from_iron_block")
++ .put("minecraft:recipes/redstone/fence_gate", "minecraft:recipes/redstone/oak_fence_gate")
++ .put("minecraft:recipes/redstone/noteblock", "minecraft:recipes/redstone/note_block")
++ .put("minecraft:recipes/redstone/trapdoor", "minecraft:recipes/redstone/oak_trapdoor")
++ .put("minecraft:recipes/redstone/wooden_button", "minecraft:recipes/redstone/oak_button")
++ .put("minecraft:recipes/redstone/wooden_door", "minecraft:recipes/redstone/oak_door")
++ .put("minecraft:recipes/redstone/wooden_pressure_plate", "minecraft:recipes/redstone/oak_pressure_plate")
++ .put("minecraft:recipes/transportation/boat", "minecraft:recipes/transportation/oak_boat")
++ .put("minecraft:recipes/transportation/golden_rail", "minecraft:recipes/transportation/powered_rail")
++ .build()
++ );
+
+ private V1501() {}
+
@@ -10724,77 +10936,80 @@ index 0000000000000000000000000000000000000000..c497faa60c37f30ceb0d7c394446d607
+}
diff --git a/src/main/java/ca/spottedleaf/dataconverter/minecraft/versions/V1502.java b/src/main/java/ca/spottedleaf/dataconverter/minecraft/versions/V1502.java
new file mode 100644
-index 0000000000000000000000000000000000000000..7db79b279a047ec5907a3fb2c6e1a75be14a2f68
+index 0000000000000000000000000000000000000000..514bb43a219f4d731e7d51804fa2595b9c56da96
--- /dev/null
+++ b/src/main/java/ca/spottedleaf/dataconverter/minecraft/versions/V1502.java
-@@ -0,0 +1,74 @@
+@@ -0,0 +1,77 @@
+package ca.spottedleaf.dataconverter.minecraft.versions;
+
+import ca.spottedleaf.dataconverter.minecraft.MCVersions;
+import ca.spottedleaf.dataconverter.minecraft.converters.recipe.ConverterAbstractRecipeRename;
+import com.google.common.collect.ImmutableMap;
++import java.util.HashMap;
+import java.util.Map;
+
+public final class V1502 {
+
+ protected static final int VERSION = MCVersions.V1_13_PRE2;
+
-+ private static final Map RECIPES_UPDATES = ImmutableMap.builder()
-+ .put("minecraft:acacia_wooden_slab", "minecraft:acacia_slab")
-+ .put("minecraft:birch_wooden_slab", "minecraft:birch_slab")
-+ .put("minecraft:black_stained_hardened_clay", "minecraft:black_terracotta")
-+ .put("minecraft:blue_stained_hardened_clay", "minecraft:blue_terracotta")
-+ .put("minecraft:boat", "minecraft:oak_boat")
-+ .put("minecraft:bone_meal_from_block", "minecraft:bone_meal_from_bone_block")
-+ .put("minecraft:bone_meal_from_bone", "minecraft:bone_meal")
-+ .put("minecraft:brick_block", "minecraft:bricks")
-+ .put("minecraft:brown_stained_hardened_clay", "minecraft:brown_terracotta")
-+ .put("minecraft:chiseled_stonebrick", "minecraft:chiseled_stone_bricks")
-+ .put("minecraft:cyan_stained_hardened_clay", "minecraft:cyan_terracotta")
-+ .put("minecraft:dark_oak_wooden_slab", "minecraft:dark_oak_slab")
-+ .put("minecraft:end_bricks", "minecraft:end_stone_bricks")
-+ .put("minecraft:fence_gate", "minecraft:oak_fence_gate")
-+ .put("minecraft:fence", "minecraft:oak_fence")
-+ .put("minecraft:golden_rail", "minecraft:powered_rail")
-+ .put("minecraft:gold_ingot_from_block", "minecraft:gold_ingot_from_gold_block")
-+ .put("minecraft:gray_stained_hardened_clay", "minecraft:gray_terracotta")
-+ .put("minecraft:green_stained_hardened_clay", "minecraft:green_terracotta")
-+ .put("minecraft:iron_ingot_from_block", "minecraft:iron_ingot_from_iron_block")
-+ .put("minecraft:jungle_wooden_slab", "minecraft:jungle_slab")
-+ .put("minecraft:light_blue_stained_hardened_clay", "minecraft:light_blue_terracotta")
-+ .put("minecraft:light_gray_stained_hardened_clay", "minecraft:light_gray_terracotta")
-+ .put("minecraft:lime_stained_hardened_clay", "minecraft:lime_terracotta")
-+ .put("minecraft:lit_pumpkin", "minecraft:jack_o_lantern")
-+ .put("minecraft:magenta_stained_hardened_clay", "minecraft:magenta_terracotta")
-+ .put("minecraft:magma", "minecraft:magma_block")
-+ .put("minecraft:melon_block", "minecraft:melon")
-+ .put("minecraft:mossy_stonebrick", "minecraft:mossy_stone_bricks")
-+ .put("minecraft:noteblock", "minecraft:note_block")
-+ .put("minecraft:oak_wooden_slab", "minecraft:oak_slab")
-+ .put("minecraft:orange_stained_hardened_clay", "minecraft:orange_terracotta")
-+ .put("minecraft:pillar_quartz_block", "minecraft:quartz_pillar")
-+ .put("minecraft:pink_stained_hardened_clay", "minecraft:pink_terracotta")
-+ .put("minecraft:purple_shulker_box", "minecraft:shulker_box")
-+ .put("minecraft:purple_stained_hardened_clay", "minecraft:purple_terracotta")
-+ .put("minecraft:red_nether_brick", "minecraft:red_nether_bricks")
-+ .put("minecraft:red_stained_hardened_clay", "minecraft:red_terracotta")
-+ .put("minecraft:slime", "minecraft:slime_block")
-+ .put("minecraft:smooth_red_sandstone", "minecraft:cut_red_sandstone")
-+ .put("minecraft:smooth_sandstone", "minecraft:cut_sandstone")
-+ .put("minecraft:snow_layer", "minecraft:snow")
-+ .put("minecraft:snow", "minecraft:snow_block")
-+ .put("minecraft:speckled_melon", "minecraft:glistering_melon_slice")
-+ .put("minecraft:spruce_wooden_slab", "minecraft:spruce_slab")
-+ .put("minecraft:stonebrick", "minecraft:stone_bricks")
-+ .put("minecraft:stone_stairs", "minecraft:cobblestone_stairs")
-+ .put("minecraft:string_to_wool", "minecraft:white_wool_from_string")
-+ .put("minecraft:trapdoor", "minecraft:oak_trapdoor")
-+ .put("minecraft:white_stained_hardened_clay", "minecraft:white_terracotta")
-+ .put("minecraft:wooden_button", "minecraft:oak_button")
-+ .put("minecraft:wooden_door", "minecraft:oak_door")
-+ .put("minecraft:wooden_pressure_plate", "minecraft:oak_pressure_plate")
-+ .put("minecraft:yellow_stained_hardened_clay", "minecraft:yellow_terracotta")
-+ .build();
++ private static final Map RECIPES_UPDATES = new HashMap<>(
++ ImmutableMap.builder()
++ .put("minecraft:acacia_wooden_slab", "minecraft:acacia_slab")
++ .put("minecraft:birch_wooden_slab", "minecraft:birch_slab")
++ .put("minecraft:black_stained_hardened_clay", "minecraft:black_terracotta")
++ .put("minecraft:blue_stained_hardened_clay", "minecraft:blue_terracotta")
++ .put("minecraft:boat", "minecraft:oak_boat")
++ .put("minecraft:bone_meal_from_block", "minecraft:bone_meal_from_bone_block")
++ .put("minecraft:bone_meal_from_bone", "minecraft:bone_meal")
++ .put("minecraft:brick_block", "minecraft:bricks")
++ .put("minecraft:brown_stained_hardened_clay", "minecraft:brown_terracotta")
++ .put("minecraft:chiseled_stonebrick", "minecraft:chiseled_stone_bricks")
++ .put("minecraft:cyan_stained_hardened_clay", "minecraft:cyan_terracotta")
++ .put("minecraft:dark_oak_wooden_slab", "minecraft:dark_oak_slab")
++ .put("minecraft:end_bricks", "minecraft:end_stone_bricks")
++ .put("minecraft:fence_gate", "minecraft:oak_fence_gate")
++ .put("minecraft:fence", "minecraft:oak_fence")
++ .put("minecraft:golden_rail", "minecraft:powered_rail")
++ .put("minecraft:gold_ingot_from_block", "minecraft:gold_ingot_from_gold_block")
++ .put("minecraft:gray_stained_hardened_clay", "minecraft:gray_terracotta")
++ .put("minecraft:green_stained_hardened_clay", "minecraft:green_terracotta")
++ .put("minecraft:iron_ingot_from_block", "minecraft:iron_ingot_from_iron_block")
++ .put("minecraft:jungle_wooden_slab", "minecraft:jungle_slab")
++ .put("minecraft:light_blue_stained_hardened_clay", "minecraft:light_blue_terracotta")
++ .put("minecraft:light_gray_stained_hardened_clay", "minecraft:light_gray_terracotta")
++ .put("minecraft:lime_stained_hardened_clay", "minecraft:lime_terracotta")
++ .put("minecraft:lit_pumpkin", "minecraft:jack_o_lantern")
++ .put("minecraft:magenta_stained_hardened_clay", "minecraft:magenta_terracotta")
++ .put("minecraft:magma", "minecraft:magma_block")
++ .put("minecraft:melon_block", "minecraft:melon")
++ .put("minecraft:mossy_stonebrick", "minecraft:mossy_stone_bricks")
++ .put("minecraft:noteblock", "minecraft:note_block")
++ .put("minecraft:oak_wooden_slab", "minecraft:oak_slab")
++ .put("minecraft:orange_stained_hardened_clay", "minecraft:orange_terracotta")
++ .put("minecraft:pillar_quartz_block", "minecraft:quartz_pillar")
++ .put("minecraft:pink_stained_hardened_clay", "minecraft:pink_terracotta")
++ .put("minecraft:purple_shulker_box", "minecraft:shulker_box")
++ .put("minecraft:purple_stained_hardened_clay", "minecraft:purple_terracotta")
++ .put("minecraft:red_nether_brick", "minecraft:red_nether_bricks")
++ .put("minecraft:red_stained_hardened_clay", "minecraft:red_terracotta")
++ .put("minecraft:slime", "minecraft:slime_block")
++ .put("minecraft:smooth_red_sandstone", "minecraft:cut_red_sandstone")
++ .put("minecraft:smooth_sandstone", "minecraft:cut_sandstone")
++ .put("minecraft:snow_layer", "minecraft:snow")
++ .put("minecraft:snow", "minecraft:snow_block")
++ .put("minecraft:speckled_melon", "minecraft:glistering_melon_slice")
++ .put("minecraft:spruce_wooden_slab", "minecraft:spruce_slab")
++ .put("minecraft:stonebrick", "minecraft:stone_bricks")
++ .put("minecraft:stone_stairs", "minecraft:cobblestone_stairs")
++ .put("minecraft:string_to_wool", "minecraft:white_wool_from_string")
++ .put("minecraft:trapdoor", "minecraft:oak_trapdoor")
++ .put("minecraft:white_stained_hardened_clay", "minecraft:white_terracotta")
++ .put("minecraft:wooden_button", "minecraft:oak_button")
++ .put("minecraft:wooden_door", "minecraft:oak_door")
++ .put("minecraft:wooden_pressure_plate", "minecraft:oak_pressure_plate")
++ .put("minecraft:yellow_stained_hardened_clay", "minecraft:yellow_terracotta")
++ .build()
++ );
+
+ private V1502() {}
+
@@ -11029,13 +11244,12 @@ index 0000000000000000000000000000000000000000..ef679762aec326e5e1310390bca46971
+}
diff --git a/src/main/java/ca/spottedleaf/dataconverter/minecraft/versions/V1510.java b/src/main/java/ca/spottedleaf/dataconverter/minecraft/versions/V1510.java
new file mode 100644
-index 0000000000000000000000000000000000000000..7dbc6ac66a29d3b5e4df5d0105c8fc03a6aea0e0
+index 0000000000000000000000000000000000000000..97f92a4ee54364616181a2803351481df224d3dc
--- /dev/null
+++ b/src/main/java/ca/spottedleaf/dataconverter/minecraft/versions/V1510.java
-@@ -0,0 +1,103 @@
+@@ -0,0 +1,111 @@
+package ca.spottedleaf.dataconverter.minecraft.versions;
+
-+import ca.spottedleaf.dataconverter.converters.DataConverter;
+import ca.spottedleaf.dataconverter.minecraft.MCVersions;
+import ca.spottedleaf.dataconverter.minecraft.converters.blockname.ConverterAbstractBlockRename;
+import ca.spottedleaf.dataconverter.minecraft.converters.entity.ConverterAbstractEntityRename;
@@ -11043,61 +11257,68 @@ index 0000000000000000000000000000000000000000..7dbc6ac66a29d3b5e4df5d0105c8fc03
+import ca.spottedleaf.dataconverter.minecraft.converters.recipe.ConverterAbstractRecipeRename;
+import ca.spottedleaf.dataconverter.minecraft.converters.stats.ConverterAbstractStatsRename;
+import ca.spottedleaf.dataconverter.minecraft.datatypes.MCTypeRegistry;
-+import ca.spottedleaf.dataconverter.types.MapType;
+import com.google.common.collect.ImmutableMap;
-+
++import java.util.HashMap;
+import java.util.Map;
+
+public final class V1510 {
+
-+ public static final Map RENAMED_ENTITY_IDS = ImmutableMap.builder()
-+ .put("minecraft:commandblock_minecart", "minecraft:command_block_minecart")
-+ .put("minecraft:ender_crystal", "minecraft:end_crystal")
-+ .put("minecraft:snowman", "minecraft:snow_golem")
-+ .put("minecraft:evocation_illager", "minecraft:evoker")
-+ .put("minecraft:evocation_fangs", "minecraft:evoker_fangs")
-+ .put("minecraft:illusion_illager", "minecraft:illusioner")
-+ .put("minecraft:vindication_illager", "minecraft:vindicator")
-+ .put("minecraft:villager_golem", "minecraft:iron_golem")
-+ .put("minecraft:xp_orb", "minecraft:experience_orb")
-+ .put("minecraft:xp_bottle", "minecraft:experience_bottle")
-+ .put("minecraft:eye_of_ender_signal", "minecraft:eye_of_ender")
-+ .put("minecraft:fireworks_rocket", "minecraft:firework_rocket")
-+ .build();
++ public static final Map RENAMED_ENTITY_IDS = new HashMap<>(
++ ImmutableMap.builder()
++ .put("minecraft:commandblock_minecart", "minecraft:command_block_minecart")
++ .put("minecraft:ender_crystal", "minecraft:end_crystal")
++ .put("minecraft:snowman", "minecraft:snow_golem")
++ .put("minecraft:evocation_illager", "minecraft:evoker")
++ .put("minecraft:evocation_fangs", "minecraft:evoker_fangs")
++ .put("minecraft:illusion_illager", "minecraft:illusioner")
++ .put("minecraft:vindication_illager", "minecraft:vindicator")
++ .put("minecraft:villager_golem", "minecraft:iron_golem")
++ .put("minecraft:xp_orb", "minecraft:experience_orb")
++ .put("minecraft:xp_bottle", "minecraft:experience_bottle")
++ .put("minecraft:eye_of_ender_signal", "minecraft:eye_of_ender")
++ .put("minecraft:fireworks_rocket", "minecraft:firework_rocket")
++ .build()
++ );
+
-+ public static final Map RENAMED_BLOCKS = ImmutableMap.builder()
-+ .put("minecraft:portal", "minecraft:nether_portal")
-+ .put("minecraft:oak_bark", "minecraft:oak_wood")
-+ .put("minecraft:spruce_bark", "minecraft:spruce_wood")
-+ .put("minecraft:birch_bark", "minecraft:birch_wood")
-+ .put("minecraft:jungle_bark", "minecraft:jungle_wood")
-+ .put("minecraft:acacia_bark", "minecraft:acacia_wood")
-+ .put("minecraft:dark_oak_bark", "minecraft:dark_oak_wood")
-+ .put("minecraft:stripped_oak_bark", "minecraft:stripped_oak_wood")
-+ .put("minecraft:stripped_spruce_bark", "minecraft:stripped_spruce_wood")
-+ .put("minecraft:stripped_birch_bark", "minecraft:stripped_birch_wood")
-+ .put("minecraft:stripped_jungle_bark", "minecraft:stripped_jungle_wood")
-+ .put("minecraft:stripped_acacia_bark", "minecraft:stripped_acacia_wood")
-+ .put("minecraft:stripped_dark_oak_bark", "minecraft:stripped_dark_oak_wood")
-+ .put("minecraft:mob_spawner", "minecraft:spawner")
-+ .build();
++ public static final Map RENAMED_BLOCKS = new HashMap<>(
++ ImmutableMap.builder()
++ .put("minecraft:portal", "minecraft:nether_portal")
++ .put("minecraft:oak_bark", "minecraft:oak_wood")
++ .put("minecraft:spruce_bark", "minecraft:spruce_wood")
++ .put("minecraft:birch_bark", "minecraft:birch_wood")
++ .put("minecraft:jungle_bark", "minecraft:jungle_wood")
++ .put("minecraft:acacia_bark", "minecraft:acacia_wood")
++ .put("minecraft:dark_oak_bark", "minecraft:dark_oak_wood")
++ .put("minecraft:stripped_oak_bark", "minecraft:stripped_oak_wood")
++ .put("minecraft:stripped_spruce_bark", "minecraft:stripped_spruce_wood")
++ .put("minecraft:stripped_birch_bark", "minecraft:stripped_birch_wood")
++ .put("minecraft:stripped_jungle_bark", "minecraft:stripped_jungle_wood")
++ .put("minecraft:stripped_acacia_bark", "minecraft:stripped_acacia_wood")
++ .put("minecraft:stripped_dark_oak_bark", "minecraft:stripped_dark_oak_wood")
++ .put("minecraft:mob_spawner", "minecraft:spawner")
++ .build()
++ );
+
-+ public static final Map RENAMED_ITEMS = ImmutableMap.builder()
-+ .putAll(RENAMED_BLOCKS)
-+ .put("minecraft:clownfish", "minecraft:tropical_fish")
-+ .put("minecraft:chorus_fruit_popped", "minecraft:popped_chorus_fruit")
-+ .put("minecraft:evocation_illager_spawn_egg", "minecraft:evoker_spawn_egg")
-+ .put("minecraft:vindication_illager_spawn_egg", "minecraft:vindicator_spawn_egg")
-+ .build();
++ public static final Map RENAMED_ITEMS = new HashMap<>(
++ ImmutableMap.builder()
++ .putAll(RENAMED_BLOCKS)
++ .put("minecraft:clownfish", "minecraft:tropical_fish")
++ .put("minecraft:chorus_fruit_popped", "minecraft:popped_chorus_fruit")
++ .put("minecraft:evocation_illager_spawn_egg", "minecraft:evoker_spawn_egg")
++ .put("minecraft:vindication_illager_spawn_egg", "minecraft:vindicator_spawn_egg")
++ .build()
++ );
+
-+ private static final Map RECIPES_UPDATES = ImmutableMap.builder()
-+ .put("minecraft:acacia_bark", "minecraft:acacia_wood")
-+ .put("minecraft:birch_bark", "minecraft:birch_wood")
-+ .put("minecraft:dark_oak_bark", "minecraft:dark_oak_wood")
-+ .put("minecraft:jungle_bark", "minecraft:jungle_wood")
-+ .put("minecraft:oak_bark", "minecraft:oak_wood")
-+ .put("minecraft:spruce_bark", "minecraft:spruce_wood")
-+ .build();
++ private static final Map RECIPES_UPDATES = new HashMap<>(
++ ImmutableMap.builder()
++ .put("minecraft:acacia_bark", "minecraft:acacia_wood")
++ .put("minecraft:birch_bark", "minecraft:birch_wood")
++ .put("minecraft:dark_oak_bark", "minecraft:dark_oak_wood")
++ .put("minecraft:jungle_bark", "minecraft:jungle_wood")
++ .put("minecraft:oak_bark", "minecraft:oak_wood")
++ .put("minecraft:spruce_bark", "minecraft:spruce_wood")
++ .build()
++ );
+
+ protected static final int VERSION = MCVersions.V1_13_PRE4 + 6;
+
@@ -11116,9 +11337,11 @@ index 0000000000000000000000000000000000000000..7dbc6ac66a29d3b5e4df5d0105c8fc03
+ return RENAMED_ENTITY_IDS.get(input);
+ });
+
-+ ConverterAbstractStatsRename.register(VERSION, ImmutableMap.of(
-+ "minecraft:swim_one_cm", "minecraft:walk_on_water_one_cm",
-+ "minecraft:dive_one_cm", "minecraft:walk_under_water_one_cm"
++ ConverterAbstractStatsRename.register(VERSION, new HashMap<>(
++ ImmutableMap.of(
++ "minecraft:swim_one_cm", "minecraft:walk_on_water_one_cm",
++ "minecraft:dive_one_cm", "minecraft:walk_under_water_one_cm"
++ )
+ )::get);
+
+
@@ -11212,28 +11435,31 @@ index 0000000000000000000000000000000000000000..952598369cb8e5fd567544853bae4f4f
+}
diff --git a/src/main/java/ca/spottedleaf/dataconverter/minecraft/versions/V1515.java b/src/main/java/ca/spottedleaf/dataconverter/minecraft/versions/V1515.java
new file mode 100644
-index 0000000000000000000000000000000000000000..8f7a2ff2d5a154f667da35215f0e1d0756dbe2a0
+index 0000000000000000000000000000000000000000..82e3aec90f868cc1def5462bff801527daaa4362
--- /dev/null
+++ b/src/main/java/ca/spottedleaf/dataconverter/minecraft/versions/V1515.java
-@@ -0,0 +1,25 @@
+@@ -0,0 +1,28 @@
+package ca.spottedleaf.dataconverter.minecraft.versions;
+
+import ca.spottedleaf.dataconverter.minecraft.MCVersions;
+import ca.spottedleaf.dataconverter.minecraft.converters.blockname.ConverterAbstractBlockRename;
+import com.google.common.collect.ImmutableMap;
++import java.util.HashMap;
+import java.util.Map;
+
+public final class V1515 {
+
+ protected static final int VERSION = MCVersions.V1_13_PRE7 + 2;
+
-+ public static final Map RENAMED_BLOCK_IDS = ImmutableMap.builder()
-+ .put("minecraft:tube_coral_fan", "minecraft:tube_coral_wall_fan")
-+ .put("minecraft:brain_coral_fan", "minecraft:brain_coral_wall_fan")
-+ .put("minecraft:bubble_coral_fan", "minecraft:bubble_coral_wall_fan")
-+ .put("minecraft:fire_coral_fan", "minecraft:fire_coral_wall_fan")
-+ .put("minecraft:horn_coral_fan", "minecraft:horn_coral_wall_fan")
-+ .build();
++ public static final Map RENAMED_BLOCK_IDS = new HashMap<>(
++ ImmutableMap.builder()
++ .put("minecraft:tube_coral_fan", "minecraft:tube_coral_wall_fan")
++ .put("minecraft:brain_coral_fan", "minecraft:brain_coral_wall_fan")
++ .put("minecraft:bubble_coral_fan", "minecraft:bubble_coral_wall_fan")
++ .put("minecraft:fire_coral_fan", "minecraft:fire_coral_wall_fan")
++ .put("minecraft:horn_coral_fan", "minecraft:horn_coral_wall_fan")
++ .build()
++ );
+
+ private V1515() {}
+
@@ -11444,10 +11670,10 @@ index 0000000000000000000000000000000000000000..20eebfbbf913c92886a21fa4790c64cc
+}
diff --git a/src/main/java/ca/spottedleaf/dataconverter/minecraft/versions/V1800.java b/src/main/java/ca/spottedleaf/dataconverter/minecraft/versions/V1800.java
new file mode 100644
-index 0000000000000000000000000000000000000000..1362a7917243715305650c197a8e7e5689bcfe4a
+index 0000000000000000000000000000000000000000..1be2154d9f9e8f33266aa745790f3bff30260f6f
--- /dev/null
+++ b/src/main/java/ca/spottedleaf/dataconverter/minecraft/versions/V1800.java
-@@ -0,0 +1,33 @@
+@@ -0,0 +1,36 @@
+package ca.spottedleaf.dataconverter.minecraft.versions;
+
+import ca.spottedleaf.dataconverter.minecraft.MCVersions;
@@ -11455,17 +11681,20 @@ index 0000000000000000000000000000000000000000..1362a7917243715305650c197a8e7e56
+import ca.spottedleaf.dataconverter.minecraft.datatypes.MCTypeRegistry;
+import ca.spottedleaf.dataconverter.minecraft.walkers.itemstack.DataWalkerItemLists;
+import com.google.common.collect.ImmutableMap;
++import java.util.HashMap;
+import java.util.Map;
+
+public final class V1800 {
+
+ protected static final int VERSION = MCVersions.V1_13_2 + 169;
+
-+ public static final Map RENAMED_ITEM_IDS = ImmutableMap.builder()
-+ .put("minecraft:cactus_green", "minecraft:green_dye")
-+ .put("minecraft:rose_red", "minecraft:red_dye")
-+ .put("minecraft:dandelion_yellow", "minecraft:yellow_dye")
-+ .build();
++ public static final Map RENAMED_ITEM_IDS = new HashMap<>(
++ ImmutableMap.builder()
++ .put("minecraft:cactus_green", "minecraft:green_dye")
++ .put("minecraft:rose_red", "minecraft:red_dye")
++ .put("minecraft:dandelion_yellow", "minecraft:yellow_dye")
++ .build()
++ );
+
+ private V1800() {}
+
@@ -11712,10 +11941,10 @@ index 0000000000000000000000000000000000000000..6358c2e0861a3743a3ea6d46a6448708
+}
diff --git a/src/main/java/ca/spottedleaf/dataconverter/minecraft/versions/V1911.java b/src/main/java/ca/spottedleaf/dataconverter/minecraft/versions/V1911.java
new file mode 100644
-index 0000000000000000000000000000000000000000..b9cc2e4a2ae42e12ccf4e0b634fd74d3aad317ab
+index 0000000000000000000000000000000000000000..c3207b60967225f875b7cf763c2c6634d6886a34
--- /dev/null
+++ b/src/main/java/ca/spottedleaf/dataconverter/minecraft/versions/V1911.java
-@@ -0,0 +1,48 @@
+@@ -0,0 +1,51 @@
+package ca.spottedleaf.dataconverter.minecraft.versions;
+
+import ca.spottedleaf.dataconverter.converters.DataConverter;
@@ -11723,24 +11952,27 @@ index 0000000000000000000000000000000000000000..b9cc2e4a2ae42e12ccf4e0b634fd74d3
+import ca.spottedleaf.dataconverter.minecraft.datatypes.MCTypeRegistry;
+import ca.spottedleaf.dataconverter.types.MapType;
+import com.google.common.collect.ImmutableMap;
++import java.util.HashMap;
+import java.util.Map;
+
+public final class V1911 {
+
+ protected static final int VERSION = MCVersions.V18W46A + 1;
+
-+ private static final Map CHUNK_STATUS_REMAP = ImmutableMap.builder()
-+ .put("structure_references", "empty")
-+ .put("biomes", "empty")
-+ .put("base", "surface")
-+ .put("carved", "carvers")
-+ .put("liquid_carved", "liquid_carvers")
-+ .put("decorated", "features")
-+ .put("lighted", "light")
-+ .put("mobs_spawned", "spawn")
-+ .put("finalized", "heightmaps")
-+ .put("fullchunk", "full")
-+ .build();
++ private static final Map CHUNK_STATUS_REMAP = new HashMap<>(
++ ImmutableMap.builder()
++ .put("structure_references", "empty")
++ .put("biomes", "empty")
++ .put("base", "surface")
++ .put("carved", "carvers")
++ .put("liquid_carved", "liquid_carvers")
++ .put("decorated", "features")
++ .put("lighted", "light")
++ .put("mobs_spawned", "spawn")
++ .put("finalized", "heightmaps")
++ .put("fullchunk", "full")
++ .build()
++ );
+
+
+ private V1911() {}
@@ -11983,7 +12215,7 @@ index 0000000000000000000000000000000000000000..224d35620e9d9e65f0642fdb13f80fcb
+}
diff --git a/src/main/java/ca/spottedleaf/dataconverter/minecraft/versions/V1925.java b/src/main/java/ca/spottedleaf/dataconverter/minecraft/versions/V1925.java
new file mode 100644
-index 0000000000000000000000000000000000000000..19dc3d9b18d95d5f0e898d4c52c77a527066adf1
+index 0000000000000000000000000000000000000000..9a063df2f4d09bd561f5a538c440b43b1c0fb581
--- /dev/null
+++ b/src/main/java/ca/spottedleaf/dataconverter/minecraft/versions/V1925.java
@@ -0,0 +1,29 @@
@@ -12000,7 +12232,7 @@ index 0000000000000000000000000000000000000000..19dc3d9b18d95d5f0e898d4c52c77a52
+ protected static final int VERSION = MCVersions.V19W03C + 1;
+
+ public static void register() {
-+ MCTypeRegistry.SAVED_DATA.addStructureConverter(new DataConverter<>(VERSION) {
++ MCTypeRegistry.SAVED_DATA_MAP_DATA.addStructureConverter(new DataConverter<>(VERSION) {
+ @Override
+ public MapType convert(final MapType root, final long sourceVersion, final long toVersion) {
+ final MapType data = root.getMap("data");
@@ -13098,7 +13330,7 @@ index 0000000000000000000000000000000000000000..183ab7ed77e30bf87e71e5f682a59fc3
+}
diff --git a/src/main/java/ca/spottedleaf/dataconverter/minecraft/versions/V2514.java b/src/main/java/ca/spottedleaf/dataconverter/minecraft/versions/V2514.java
new file mode 100644
-index 0000000000000000000000000000000000000000..d494fac0900f61e60c01617e631a0431bbda9438
+index 0000000000000000000000000000000000000000..a76bb0d8d27a734b397eefd587d1baf79bc55c82
--- /dev/null
+++ b/src/main/java/ca/spottedleaf/dataconverter/minecraft/versions/V2514.java
@@ -0,0 +1,590 @@
@@ -13620,7 +13852,7 @@ index 0000000000000000000000000000000000000000..d494fac0900f61e60c01617e631a0431
+ }
+ });
+
-+ MCTypeRegistry.SAVED_DATA.addStructureConverter(new DataConverter<>(VERSION) {
++ MCTypeRegistry.SAVED_DATA_RAIDS.addStructureConverter(new DataConverter<>(VERSION) {
+ @Override
+ public MapType convert(final MapType root, final long sourceVersion, final long toVersion) {
+ final MapType data = root.getMap("data");
@@ -13737,10 +13969,10 @@ index 0000000000000000000000000000000000000000..40bf0a1788520bbf1d66da53b6532bdd
+}
diff --git a/src/main/java/ca/spottedleaf/dataconverter/minecraft/versions/V2518.java b/src/main/java/ca/spottedleaf/dataconverter/minecraft/versions/V2518.java
new file mode 100644
-index 0000000000000000000000000000000000000000..e7a55eeb02fb99289e4c8bfe2d28fc4a0c716719
+index 0000000000000000000000000000000000000000..4d8692bbb497b1e6f0aa655e8f9d1fb743864f7d
--- /dev/null
+++ b/src/main/java/ca/spottedleaf/dataconverter/minecraft/versions/V2518.java
-@@ -0,0 +1,63 @@
+@@ -0,0 +1,66 @@
+package ca.spottedleaf.dataconverter.minecraft.versions;
+
+import ca.spottedleaf.dataconverter.converters.DataConverter;
@@ -13748,20 +13980,23 @@ index 0000000000000000000000000000000000000000..e7a55eeb02fb99289e4c8bfe2d28fc4a
+import ca.spottedleaf.dataconverter.minecraft.datatypes.MCTypeRegistry;
+import ca.spottedleaf.dataconverter.types.MapType;
+import com.google.common.collect.ImmutableMap;
++import java.util.HashMap;
+import java.util.Map;
+
+public final class V2518 {
+
+ protected static final int VERSION = MCVersions.V20W12A + 3;
+
-+ private static final Map FACING_RENAMES = ImmutableMap.builder()
-+ .put("down", "down_south")
-+ .put("up", "up_north")
-+ .put("north", "north_up")
-+ .put("south", "south_up")
-+ .put("west", "west_up")
-+ .put("east", "east_up")
-+ .build();
++ private static final Map FACING_RENAMES = new HashMap<>(
++ ImmutableMap.builder()
++ .put("down", "down_south")
++ .put("up", "up_north")
++ .put("north", "north_up")
++ .put("south", "south_up")
++ .put("west", "west_up")
++ .put("east", "east_up")
++ .build()
++ );
+
+
+ private V2518() {}
@@ -13858,10 +14093,10 @@ index 0000000000000000000000000000000000000000..3a91600427cb013cdfc03b084017b6f3
+}
diff --git a/src/main/java/ca/spottedleaf/dataconverter/minecraft/versions/V2523.java b/src/main/java/ca/spottedleaf/dataconverter/minecraft/versions/V2523.java
new file mode 100644
-index 0000000000000000000000000000000000000000..5d3726bb7670bc89feb8ebeed5c097a77e909f5a
+index 0000000000000000000000000000000000000000..2c64d65c8cb34fbdd79688697e9a7f5ecb615bff
--- /dev/null
+++ b/src/main/java/ca/spottedleaf/dataconverter/minecraft/versions/V2523.java
-@@ -0,0 +1,92 @@
+@@ -0,0 +1,95 @@
+package ca.spottedleaf.dataconverter.minecraft.versions;
+
+import ca.spottedleaf.dataconverter.converters.DataConverter;
@@ -13871,32 +14106,35 @@ index 0000000000000000000000000000000000000000..5d3726bb7670bc89feb8ebeed5c097a7
+import ca.spottedleaf.dataconverter.types.MapType;
+import ca.spottedleaf.dataconverter.types.ObjectType;
+import com.google.common.collect.ImmutableMap;
++import java.util.HashMap;
+import java.util.Map;
+
+public final class V2523 {
+
+ protected static final int VERSION = MCVersions.V20W13B + 2;
+
-+ private static final Map RENAMES = ImmutableMap.builder()
-+ .put("generic.maxHealth", "generic.max_health")
-+ .put("Max Health", "generic.max_health")
-+ .put("zombie.spawnReinforcements", "zombie.spawn_reinforcements")
-+ .put("Spawn Reinforcements Chance", "zombie.spawn_reinforcements")
-+ .put("horse.jumpStrength", "horse.jump_strength")
-+ .put("Jump Strength", "horse.jump_strength")
-+ .put("generic.followRange", "generic.follow_range")
-+ .put("Follow Range", "generic.follow_range")
-+ .put("generic.knockbackResistance", "generic.knockback_resistance")
-+ .put("Knockback Resistance", "generic.knockback_resistance")
-+ .put("generic.movementSpeed", "generic.movement_speed")
-+ .put("Movement Speed", "generic.movement_speed")
-+ .put("generic.flyingSpeed", "generic.flying_speed")
-+ .put("Flying Speed", "generic.flying_speed")
-+ .put("generic.attackDamage", "generic.attack_damage")
-+ .put("generic.attackKnockback", "generic.attack_knockback")
-+ .put("generic.attackSpeed", "generic.attack_speed")
-+ .put("generic.armorToughness", "generic.armor_toughness")
-+ .build();
++ private static final Map RENAMES = new HashMap<>(
++ ImmutableMap.builder()
++ .put("generic.maxHealth", "generic.max_health")
++ .put("Max Health", "generic.max_health")
++ .put("zombie.spawnReinforcements", "zombie.spawn_reinforcements")
++ .put("Spawn Reinforcements Chance", "zombie.spawn_reinforcements")
++ .put("horse.jumpStrength", "horse.jump_strength")
++ .put("Jump Strength", "horse.jump_strength")
++ .put("generic.followRange", "generic.follow_range")
++ .put("Follow Range", "generic.follow_range")
++ .put("generic.knockbackResistance", "generic.knockback_resistance")
++ .put("Knockback Resistance", "generic.knockback_resistance")
++ .put("generic.movementSpeed", "generic.movement_speed")
++ .put("Movement Speed", "generic.movement_speed")
++ .put("generic.flyingSpeed", "generic.flying_speed")
++ .put("Flying Speed", "generic.flying_speed")
++ .put("generic.attackDamage", "generic.attack_damage")
++ .put("generic.attackKnockback", "generic.attack_knockback")
++ .put("generic.attackSpeed", "generic.attack_speed")
++ .put("generic.armorToughness", "generic.armor_toughness")
++ .build()
++ );
+
+ private V2523() {}
+
@@ -14305,10 +14543,10 @@ index 0000000000000000000000000000000000000000..9648299bb96c20c783bb7c7010173a0f
+}
diff --git a/src/main/java/ca/spottedleaf/dataconverter/minecraft/versions/V2550.java b/src/main/java/ca/spottedleaf/dataconverter/minecraft/versions/V2550.java
new file mode 100644
-index 0000000000000000000000000000000000000000..b9a50d44982abe228c5e7d58a4b917d0fbfda6b9
+index 0000000000000000000000000000000000000000..682b6f16c23ac9ce1a683bac6d36e5d07804b35d
--- /dev/null
+++ b/src/main/java/ca/spottedleaf/dataconverter/minecraft/versions/V2550.java
-@@ -0,0 +1,342 @@
+@@ -0,0 +1,344 @@
+package ca.spottedleaf.dataconverter.minecraft.versions;
+
+import ca.spottedleaf.dataconverter.converters.DataConverter;
@@ -14328,17 +14566,19 @@ index 0000000000000000000000000000000000000000..b9a50d44982abe228c5e7d58a4b917d0
+
+ protected static final int VERSION = MCVersions.V20W20B + 13;
+
-+ private static final ImmutableMap DEFAULTS = ImmutableMap.builder()
-+ .put("minecraft:village", new StructureFeatureConfiguration(32, 8, 10387312))
-+ .put("minecraft:desert_pyramid", new StructureFeatureConfiguration(32, 8, 14357617))
-+ .put("minecraft:igloo", new StructureFeatureConfiguration(32, 8, 14357618))
-+ .put("minecraft:jungle_pyramid", new StructureFeatureConfiguration(32, 8, 14357619))
-+ .put("minecraft:swamp_hut", new StructureFeatureConfiguration(32, 8, 14357620))
-+ .put("minecraft:pillager_outpost", new StructureFeatureConfiguration(32, 8, 165745296))
-+ .put("minecraft:monument", new StructureFeatureConfiguration(32, 5, 10387313))
-+ .put("minecraft:endcity", new StructureFeatureConfiguration(20, 11, 10387313))
-+ .put("minecraft:mansion", new StructureFeatureConfiguration(80, 20, 10387319))
-+ .build();
++ private static final Map DEFAULTS = new HashMap<>(
++ ImmutableMap.builder()
++ .put("minecraft:village", new StructureFeatureConfiguration(32, 8, 10387312))
++ .put("minecraft:desert_pyramid", new StructureFeatureConfiguration(32, 8, 14357617))
++ .put("minecraft:igloo", new StructureFeatureConfiguration(32, 8, 14357618))
++ .put("minecraft:jungle_pyramid", new StructureFeatureConfiguration(32, 8, 14357619))
++ .put("minecraft:swamp_hut", new StructureFeatureConfiguration(32, 8, 14357620))
++ .put("minecraft:pillager_outpost", new StructureFeatureConfiguration(32, 8, 165745296))
++ .put("minecraft:monument", new StructureFeatureConfiguration(32, 5, 10387313))
++ .put("minecraft:endcity", new StructureFeatureConfiguration(20, 11, 10387313))
++ .put("minecraft:mansion", new StructureFeatureConfiguration(80, 20, 10387319))
++ .build()
++ );
+
+ record StructureFeatureConfiguration(int spacing, int separation, int salt) {
+
@@ -14786,77 +15026,80 @@ index 0000000000000000000000000000000000000000..c06aa2099494f82bad2c1f212b2db074
+}
diff --git a/src/main/java/ca/spottedleaf/dataconverter/minecraft/versions/V2553.java b/src/main/java/ca/spottedleaf/dataconverter/minecraft/versions/V2553.java
new file mode 100644
-index 0000000000000000000000000000000000000000..20c57f66e92922a8843887fb032f01c873c45679
+index 0000000000000000000000000000000000000000..492f615ff66d7f7ea820492dadefec2dd65cc051
--- /dev/null
+++ b/src/main/java/ca/spottedleaf/dataconverter/minecraft/versions/V2553.java
-@@ -0,0 +1,75 @@
+@@ -0,0 +1,78 @@
+package ca.spottedleaf.dataconverter.minecraft.versions;
+
+import ca.spottedleaf.dataconverter.minecraft.MCVersions;
+import ca.spottedleaf.dataconverter.minecraft.converters.helpers.ConverterAbstractStringValueTypeRename;
+import ca.spottedleaf.dataconverter.minecraft.datatypes.MCTypeRegistry;
+import com.google.common.collect.ImmutableMap;
++import java.util.HashMap;
+import java.util.Map;
+
+public final class V2553 {
+
+ protected static final int VERSION = MCVersions.V20W20B + 16;
+
-+ public static final Map BIOME_RENAMES = ImmutableMap.builder()
-+ .put("minecraft:extreme_hills", "minecraft:mountains")
-+ .put("minecraft:swampland", "minecraft:swamp")
-+ .put("minecraft:hell", "minecraft:nether_wastes")
-+ .put("minecraft:sky", "minecraft:the_end")
-+ .put("minecraft:ice_flats", "minecraft:snowy_tundra")
-+ .put("minecraft:ice_mountains", "minecraft:snowy_mountains")
-+ .put("minecraft:mushroom_island", "minecraft:mushroom_fields")
-+ .put("minecraft:mushroom_island_shore", "minecraft:mushroom_field_shore")
-+ .put("minecraft:beaches", "minecraft:beach")
-+ .put("minecraft:forest_hills", "minecraft:wooded_hills")
-+ .put("minecraft:smaller_extreme_hills", "minecraft:mountain_edge")
-+ .put("minecraft:stone_beach", "minecraft:stone_shore")
-+ .put("minecraft:cold_beach", "minecraft:snowy_beach")
-+ .put("minecraft:roofed_forest", "minecraft:dark_forest")
-+ .put("minecraft:taiga_cold", "minecraft:snowy_taiga")
-+ .put("minecraft:taiga_cold_hills", "minecraft:snowy_taiga_hills")
-+ .put("minecraft:redwood_taiga", "minecraft:giant_tree_taiga")
-+ .put("minecraft:redwood_taiga_hills", "minecraft:giant_tree_taiga_hills")
-+ .put("minecraft:extreme_hills_with_trees", "minecraft:wooded_mountains")
-+ .put("minecraft:savanna_rock", "minecraft:savanna_plateau")
-+ .put("minecraft:mesa", "minecraft:badlands")
-+ .put("minecraft:mesa_rock", "minecraft:wooded_badlands_plateau")
-+ .put("minecraft:mesa_clear_rock", "minecraft:badlands_plateau")
-+ .put("minecraft:sky_island_low", "minecraft:small_end_islands")
-+ .put("minecraft:sky_island_medium", "minecraft:end_midlands")
-+ .put("minecraft:sky_island_high", "minecraft:end_highlands")
-+ .put("minecraft:sky_island_barren", "minecraft:end_barrens")
-+ .put("minecraft:void", "minecraft:the_void")
-+ .put("minecraft:mutated_plains", "minecraft:sunflower_plains")
-+ .put("minecraft:mutated_desert", "minecraft:desert_lakes")
-+ .put("minecraft:mutated_extreme_hills", "minecraft:gravelly_mountains")
-+ .put("minecraft:mutated_forest", "minecraft:flower_forest")
-+ .put("minecraft:mutated_taiga", "minecraft:taiga_mountains")
-+ .put("minecraft:mutated_swampland", "minecraft:swamp_hills")
-+ .put("minecraft:mutated_ice_flats", "minecraft:ice_spikes")
-+ .put("minecraft:mutated_jungle", "minecraft:modified_jungle")
-+ .put("minecraft:mutated_jungle_edge", "minecraft:modified_jungle_edge")
-+ .put("minecraft:mutated_birch_forest", "minecraft:tall_birch_forest")
-+ .put("minecraft:mutated_birch_forest_hills", "minecraft:tall_birch_hills")
-+ .put("minecraft:mutated_roofed_forest", "minecraft:dark_forest_hills")
-+ .put("minecraft:mutated_taiga_cold", "minecraft:snowy_taiga_mountains")
-+ .put("minecraft:mutated_redwood_taiga", "minecraft:giant_spruce_taiga")
-+ .put("minecraft:mutated_redwood_taiga_hills", "minecraft:giant_spruce_taiga_hills")
-+ .put("minecraft:mutated_extreme_hills_with_trees", "minecraft:modified_gravelly_mountains")
-+ .put("minecraft:mutated_savanna", "minecraft:shattered_savanna")
-+ .put("minecraft:mutated_savanna_rock", "minecraft:shattered_savanna_plateau")
-+ .put("minecraft:mutated_mesa", "minecraft:eroded_badlands")
-+ .put("minecraft:mutated_mesa_rock", "minecraft:modified_wooded_badlands_plateau")
-+ .put("minecraft:mutated_mesa_clear_rock", "minecraft:modified_badlands_plateau")
-+ .put("minecraft:warm_deep_ocean", "minecraft:deep_warm_ocean")
-+ .put("minecraft:lukewarm_deep_ocean", "minecraft:deep_lukewarm_ocean")
-+ .put("minecraft:cold_deep_ocean", "minecraft:deep_cold_ocean")
-+ .put("minecraft:frozen_deep_ocean", "minecraft:deep_frozen_ocean")
-+ .build();
++ public static final Map BIOME_RENAMES = new HashMap<>(
++ ImmutableMap.builder()
++ .put("minecraft:extreme_hills", "minecraft:mountains")
++ .put("minecraft:swampland", "minecraft:swamp")
++ .put("minecraft:hell", "minecraft:nether_wastes")
++ .put("minecraft:sky", "minecraft:the_end")
++ .put("minecraft:ice_flats", "minecraft:snowy_tundra")
++ .put("minecraft:ice_mountains", "minecraft:snowy_mountains")
++ .put("minecraft:mushroom_island", "minecraft:mushroom_fields")
++ .put("minecraft:mushroom_island_shore", "minecraft:mushroom_field_shore")
++ .put("minecraft:beaches", "minecraft:beach")
++ .put("minecraft:forest_hills", "minecraft:wooded_hills")
++ .put("minecraft:smaller_extreme_hills", "minecraft:mountain_edge")
++ .put("minecraft:stone_beach", "minecraft:stone_shore")
++ .put("minecraft:cold_beach", "minecraft:snowy_beach")
++ .put("minecraft:roofed_forest", "minecraft:dark_forest")
++ .put("minecraft:taiga_cold", "minecraft:snowy_taiga")
++ .put("minecraft:taiga_cold_hills", "minecraft:snowy_taiga_hills")
++ .put("minecraft:redwood_taiga", "minecraft:giant_tree_taiga")
++ .put("minecraft:redwood_taiga_hills", "minecraft:giant_tree_taiga_hills")
++ .put("minecraft:extreme_hills_with_trees", "minecraft:wooded_mountains")
++ .put("minecraft:savanna_rock", "minecraft:savanna_plateau")
++ .put("minecraft:mesa", "minecraft:badlands")
++ .put("minecraft:mesa_rock", "minecraft:wooded_badlands_plateau")
++ .put("minecraft:mesa_clear_rock", "minecraft:badlands_plateau")
++ .put("minecraft:sky_island_low", "minecraft:small_end_islands")
++ .put("minecraft:sky_island_medium", "minecraft:end_midlands")
++ .put("minecraft:sky_island_high", "minecraft:end_highlands")
++ .put("minecraft:sky_island_barren", "minecraft:end_barrens")
++ .put("minecraft:void", "minecraft:the_void")
++ .put("minecraft:mutated_plains", "minecraft:sunflower_plains")
++ .put("minecraft:mutated_desert", "minecraft:desert_lakes")
++ .put("minecraft:mutated_extreme_hills", "minecraft:gravelly_mountains")
++ .put("minecraft:mutated_forest", "minecraft:flower_forest")
++ .put("minecraft:mutated_taiga", "minecraft:taiga_mountains")
++ .put("minecraft:mutated_swampland", "minecraft:swamp_hills")
++ .put("minecraft:mutated_ice_flats", "minecraft:ice_spikes")
++ .put("minecraft:mutated_jungle", "minecraft:modified_jungle")
++ .put("minecraft:mutated_jungle_edge", "minecraft:modified_jungle_edge")
++ .put("minecraft:mutated_birch_forest", "minecraft:tall_birch_forest")
++ .put("minecraft:mutated_birch_forest_hills", "minecraft:tall_birch_hills")
++ .put("minecraft:mutated_roofed_forest", "minecraft:dark_forest_hills")
++ .put("minecraft:mutated_taiga_cold", "minecraft:snowy_taiga_mountains")
++ .put("minecraft:mutated_redwood_taiga", "minecraft:giant_spruce_taiga")
++ .put("minecraft:mutated_redwood_taiga_hills", "minecraft:giant_spruce_taiga_hills")
++ .put("minecraft:mutated_extreme_hills_with_trees", "minecraft:modified_gravelly_mountains")
++ .put("minecraft:mutated_savanna", "minecraft:shattered_savanna")
++ .put("minecraft:mutated_savanna_rock", "minecraft:shattered_savanna_plateau")
++ .put("minecraft:mutated_mesa", "minecraft:eroded_badlands")
++ .put("minecraft:mutated_mesa_rock", "minecraft:modified_wooded_badlands_plateau")
++ .put("minecraft:mutated_mesa_clear_rock", "minecraft:modified_badlands_plateau")
++ .put("minecraft:warm_deep_ocean", "minecraft:deep_warm_ocean")
++ .put("minecraft:lukewarm_deep_ocean", "minecraft:deep_lukewarm_ocean")
++ .put("minecraft:cold_deep_ocean", "minecraft:deep_cold_ocean")
++ .put("minecraft:frozen_deep_ocean", "minecraft:deep_frozen_ocean")
++ .build()
++ );
+
+
+ private V2553() {}
@@ -15107,43 +15350,47 @@ index 0000000000000000000000000000000000000000..6fcfcb66e1fd9291abad47e41ee076a7
+}
diff --git a/src/main/java/ca/spottedleaf/dataconverter/minecraft/versions/V2690.java b/src/main/java/ca/spottedleaf/dataconverter/minecraft/versions/V2690.java
new file mode 100644
-index 0000000000000000000000000000000000000000..1638f04efd4063c23807b29bc226ad33eed27e7b
+index 0000000000000000000000000000000000000000..c464ee01de5bcfcee9bcf18cc73ae8d6e0354b50
--- /dev/null
+++ b/src/main/java/ca/spottedleaf/dataconverter/minecraft/versions/V2690.java
-@@ -0,0 +1,39 @@
+@@ -0,0 +1,43 @@
+package ca.spottedleaf.dataconverter.minecraft.versions;
+
+import ca.spottedleaf.dataconverter.minecraft.MCVersions;
+import ca.spottedleaf.dataconverter.minecraft.converters.blockname.ConverterAbstractBlockRename;
+import ca.spottedleaf.dataconverter.minecraft.converters.itemname.ConverterAbstractItemRename;
+import com.google.common.collect.ImmutableMap;
++import java.util.HashMap;
++import java.util.Map;
+
+public final class V2690 {
+
+ protected static final int VERSION = MCVersions.V21W05A;
+
-+ protected static final ImmutableMap RENAMES = ImmutableMap.builder()
-+ .put("minecraft:weathered_copper_block", "minecraft:oxidized_copper_block")
-+ .put("minecraft:semi_weathered_copper_block", "minecraft:weathered_copper_block")
-+ .put("minecraft:lightly_weathered_copper_block", "minecraft:exposed_copper_block")
-+ .put("minecraft:weathered_cut_copper", "minecraft:oxidized_cut_copper")
-+ .put("minecraft:semi_weathered_cut_copper", "minecraft:weathered_cut_copper")
-+ .put("minecraft:lightly_weathered_cut_copper", "minecraft:exposed_cut_copper")
-+ .put("minecraft:weathered_cut_copper_stairs", "minecraft:oxidized_cut_copper_stairs")
-+ .put("minecraft:semi_weathered_cut_copper_stairs", "minecraft:weathered_cut_copper_stairs")
-+ .put("minecraft:lightly_weathered_cut_copper_stairs", "minecraft:exposed_cut_copper_stairs")
-+ .put("minecraft:weathered_cut_copper_slab", "minecraft:oxidized_cut_copper_slab")
-+ .put("minecraft:semi_weathered_cut_copper_slab", "minecraft:weathered_cut_copper_slab")
-+ .put("minecraft:lightly_weathered_cut_copper_slab", "minecraft:exposed_cut_copper_slab")
-+ .put("minecraft:waxed_semi_weathered_copper", "minecraft:waxed_weathered_copper")
-+ .put("minecraft:waxed_lightly_weathered_copper", "minecraft:waxed_exposed_copper")
-+ .put("minecraft:waxed_semi_weathered_cut_copper", "minecraft:waxed_weathered_cut_copper")
-+ .put("minecraft:waxed_lightly_weathered_cut_copper", "minecraft:waxed_exposed_cut_copper")
-+ .put("minecraft:waxed_semi_weathered_cut_copper_stairs", "minecraft:waxed_weathered_cut_copper_stairs")
-+ .put("minecraft:waxed_lightly_weathered_cut_copper_stairs", "minecraft:waxed_exposed_cut_copper_stairs")
-+ .put("minecraft:waxed_semi_weathered_cut_copper_slab", "minecraft:waxed_weathered_cut_copper_slab")
-+ .put("minecraft:waxed_lightly_weathered_cut_copper_slab", "minecraft:waxed_exposed_cut_copper_slab")
-+ .build();
++ protected static final Map RENAMES = new HashMap<>(
++ ImmutableMap.builder()
++ .put("minecraft:weathered_copper_block", "minecraft:oxidized_copper_block")
++ .put("minecraft:semi_weathered_copper_block", "minecraft:weathered_copper_block")
++ .put("minecraft:lightly_weathered_copper_block", "minecraft:exposed_copper_block")
++ .put("minecraft:weathered_cut_copper", "minecraft:oxidized_cut_copper")
++ .put("minecraft:semi_weathered_cut_copper", "minecraft:weathered_cut_copper")
++ .put("minecraft:lightly_weathered_cut_copper", "minecraft:exposed_cut_copper")
++ .put("minecraft:weathered_cut_copper_stairs", "minecraft:oxidized_cut_copper_stairs")
++ .put("minecraft:semi_weathered_cut_copper_stairs", "minecraft:weathered_cut_copper_stairs")
++ .put("minecraft:lightly_weathered_cut_copper_stairs", "minecraft:exposed_cut_copper_stairs")
++ .put("minecraft:weathered_cut_copper_slab", "minecraft:oxidized_cut_copper_slab")
++ .put("minecraft:semi_weathered_cut_copper_slab", "minecraft:weathered_cut_copper_slab")
++ .put("minecraft:lightly_weathered_cut_copper_slab", "minecraft:exposed_cut_copper_slab")
++ .put("minecraft:waxed_semi_weathered_copper", "minecraft:waxed_weathered_copper")
++ .put("minecraft:waxed_lightly_weathered_copper", "minecraft:waxed_exposed_copper")
++ .put("minecraft:waxed_semi_weathered_cut_copper", "minecraft:waxed_weathered_cut_copper")
++ .put("minecraft:waxed_lightly_weathered_cut_copper", "minecraft:waxed_exposed_cut_copper")
++ .put("minecraft:waxed_semi_weathered_cut_copper_stairs", "minecraft:waxed_weathered_cut_copper_stairs")
++ .put("minecraft:waxed_lightly_weathered_cut_copper_stairs", "minecraft:waxed_exposed_cut_copper_stairs")
++ .put("minecraft:waxed_semi_weathered_cut_copper_slab", "minecraft:waxed_weathered_cut_copper_slab")
++ .put("minecraft:waxed_lightly_weathered_cut_copper_slab", "minecraft:waxed_exposed_cut_copper_slab")
++ .build()
++ );
+
+ public static void register() {
+ ConverterAbstractItemRename.register(VERSION, RENAMES::get);
@@ -15152,27 +15399,31 @@ index 0000000000000000000000000000000000000000..1638f04efd4063c23807b29bc226ad33
+}
diff --git a/src/main/java/ca/spottedleaf/dataconverter/minecraft/versions/V2691.java b/src/main/java/ca/spottedleaf/dataconverter/minecraft/versions/V2691.java
new file mode 100644
-index 0000000000000000000000000000000000000000..3841780d52c2e242609fc076efa5902c063b7b48
+index 0000000000000000000000000000000000000000..d64cd0fa59e8581ac22b61d759658abe4b9e013b
--- /dev/null
+++ b/src/main/java/ca/spottedleaf/dataconverter/minecraft/versions/V2691.java
-@@ -0,0 +1,23 @@
+@@ -0,0 +1,27 @@
+package ca.spottedleaf.dataconverter.minecraft.versions;
+
+import ca.spottedleaf.dataconverter.minecraft.MCVersions;
+import ca.spottedleaf.dataconverter.minecraft.converters.blockname.ConverterAbstractBlockRename;
+import ca.spottedleaf.dataconverter.minecraft.converters.itemname.ConverterAbstractItemRename;
+import com.google.common.collect.ImmutableMap;
++import java.util.HashMap;
++import java.util.Map;
+
+public final class V2691 {
+
+ protected static final int VERSION = MCVersions.V21W05A + 1;
+
-+ protected static final ImmutableMap RENAMES = ImmutableMap.builder()
-+ .put("minecraft:waxed_copper", "minecraft:waxed_copper_block")
-+ .put("minecraft:oxidized_copper_block", "minecraft:oxidized_copper")
-+ .put("minecraft:weathered_copper_block", "minecraft:weathered_copper")
-+ .put("minecraft:exposed_copper_block", "minecraft:exposed_copper")
-+ .build();
++ protected static final Map RENAMES = new HashMap<>(
++ ImmutableMap.builder()
++ .put("minecraft:waxed_copper", "minecraft:waxed_copper_block")
++ .put("minecraft:oxidized_copper_block", "minecraft:oxidized_copper")
++ .put("minecraft:weathered_copper_block", "minecraft:weathered_copper")
++ .put("minecraft:exposed_copper_block", "minecraft:exposed_copper")
++ .build()
++ );
+
+ public static void register() {
+ ConverterAbstractItemRename.register(VERSION, RENAMES::get);
@@ -15202,40 +15453,44 @@ index 0000000000000000000000000000000000000000..deac34afe6a3681db9a7630ad6526f71
+}
diff --git a/src/main/java/ca/spottedleaf/dataconverter/minecraft/versions/V2696.java b/src/main/java/ca/spottedleaf/dataconverter/minecraft/versions/V2696.java
new file mode 100644
-index 0000000000000000000000000000000000000000..0094154c1da7cb95120e01bceeb836ca7ab68e25
+index 0000000000000000000000000000000000000000..9502cfd7a4dd536fb2e2fa114691faef30f757aa
--- /dev/null
+++ b/src/main/java/ca/spottedleaf/dataconverter/minecraft/versions/V2696.java
-@@ -0,0 +1,36 @@
+@@ -0,0 +1,40 @@
+package ca.spottedleaf.dataconverter.minecraft.versions;
+
+import ca.spottedleaf.dataconverter.minecraft.MCVersions;
+import ca.spottedleaf.dataconverter.minecraft.converters.blockname.ConverterAbstractBlockRename;
+import ca.spottedleaf.dataconverter.minecraft.converters.itemname.ConverterAbstractItemRename;
+import com.google.common.collect.ImmutableMap;
++import java.util.HashMap;
++import java.util.Map;
+
+public final class V2696 {
+
+ protected static final int VERSION = MCVersions.V21W07A + 1;
+
-+ protected static final ImmutableMap RENAMES = ImmutableMap.builder()
-+ .put("minecraft:grimstone", "minecraft:deepslate")
-+ .put("minecraft:grimstone_slab", "minecraft:cobbled_deepslate_slab")
-+ .put("minecraft:grimstone_stairs", "minecraft:cobbled_deepslate_stairs")
-+ .put("minecraft:grimstone_wall", "minecraft:cobbled_deepslate_wall")
-+ .put("minecraft:polished_grimstone", "minecraft:polished_deepslate")
-+ .put("minecraft:polished_grimstone_slab", "minecraft:polished_deepslate_slab")
-+ .put("minecraft:polished_grimstone_stairs", "minecraft:polished_deepslate_stairs")
-+ .put("minecraft:polished_grimstone_wall", "minecraft:polished_deepslate_wall")
-+ .put("minecraft:grimstone_tiles", "minecraft:deepslate_tiles")
-+ .put("minecraft:grimstone_tile_slab", "minecraft:deepslate_tile_slab")
-+ .put("minecraft:grimstone_tile_stairs", "minecraft:deepslate_tile_stairs")
-+ .put("minecraft:grimstone_tile_wall", "minecraft:deepslate_tile_wall")
-+ .put("minecraft:grimstone_bricks", "minecraft:deepslate_bricks")
-+ .put("minecraft:grimstone_brick_slab", "minecraft:deepslate_brick_slab")
-+ .put("minecraft:grimstone_brick_stairs", "minecraft:deepslate_brick_stairs")
-+ .put("minecraft:grimstone_brick_wall", "minecraft:deepslate_brick_wall")
-+ .put("minecraft:chiseled_grimstone", "minecraft:chiseled_deepslate")
-+ .build();
++ protected static final Map RENAMES = new HashMap<>(
++ ImmutableMap.builder()
++ .put("minecraft:grimstone", "minecraft:deepslate")
++ .put("minecraft:grimstone_slab", "minecraft:cobbled_deepslate_slab")
++ .put("minecraft:grimstone_stairs", "minecraft:cobbled_deepslate_stairs")
++ .put("minecraft:grimstone_wall", "minecraft:cobbled_deepslate_wall")
++ .put("minecraft:polished_grimstone", "minecraft:polished_deepslate")
++ .put("minecraft:polished_grimstone_slab", "minecraft:polished_deepslate_slab")
++ .put("minecraft:polished_grimstone_stairs", "minecraft:polished_deepslate_stairs")
++ .put("minecraft:polished_grimstone_wall", "minecraft:polished_deepslate_wall")
++ .put("minecraft:grimstone_tiles", "minecraft:deepslate_tiles")
++ .put("minecraft:grimstone_tile_slab", "minecraft:deepslate_tile_slab")
++ .put("minecraft:grimstone_tile_stairs", "minecraft:deepslate_tile_stairs")
++ .put("minecraft:grimstone_tile_wall", "minecraft:deepslate_tile_wall")
++ .put("minecraft:grimstone_bricks", "minecraft:deepslate_bricks")
++ .put("minecraft:grimstone_brick_slab", "minecraft:deepslate_brick_slab")
++ .put("minecraft:grimstone_brick_stairs", "minecraft:deepslate_brick_stairs")
++ .put("minecraft:grimstone_brick_wall", "minecraft:deepslate_brick_wall")
++ .put("minecraft:chiseled_grimstone", "minecraft:chiseled_deepslate")
++ .build()
++ );
+
+ public static void register() {
+ ConverterAbstractItemRename.register(VERSION, RENAMES::get);
@@ -16656,61 +16911,65 @@ index 0000000000000000000000000000000000000000..4bdac86810c51e9f87ea82ba9f6c6d8a
+}
diff --git a/src/main/java/ca/spottedleaf/dataconverter/minecraft/versions/V2838.java b/src/main/java/ca/spottedleaf/dataconverter/minecraft/versions/V2838.java
new file mode 100644
-index 0000000000000000000000000000000000000000..586e711163e2bdea110442dd181289fc06f6f7f1
+index 0000000000000000000000000000000000000000..ad25696e94da4706a9a59c89ba896b35894b285d
--- /dev/null
+++ b/src/main/java/ca/spottedleaf/dataconverter/minecraft/versions/V2838.java
-@@ -0,0 +1,56 @@
+@@ -0,0 +1,60 @@
+package ca.spottedleaf.dataconverter.minecraft.versions;
+
+import ca.spottedleaf.dataconverter.minecraft.MCVersions;
+import ca.spottedleaf.dataconverter.minecraft.converters.helpers.ConverterAbstractStringValueTypeRename;
+import ca.spottedleaf.dataconverter.minecraft.datatypes.MCTypeRegistry;
+import com.google.common.collect.ImmutableMap;
++import java.util.HashMap;
++import java.util.Map;
+
+public final class V2838 {
+
+ protected static final int VERSION = MCVersions.V21W40A;
+
-+ public static final ImmutableMap BIOME_UPDATE = ImmutableMap.builder()
-+ .put("minecraft:badlands_plateau", "minecraft:badlands")
-+ .put("minecraft:bamboo_jungle_hills", "minecraft:bamboo_jungle")
-+ .put("minecraft:birch_forest_hills", "minecraft:birch_forest")
-+ .put("minecraft:dark_forest_hills", "minecraft:dark_forest")
-+ .put("minecraft:desert_hills", "minecraft:desert")
-+ .put("minecraft:desert_lakes", "minecraft:desert")
-+ .put("minecraft:giant_spruce_taiga_hills", "minecraft:old_growth_spruce_taiga")
-+ .put("minecraft:giant_spruce_taiga", "minecraft:old_growth_spruce_taiga")
-+ .put("minecraft:giant_tree_taiga_hills", "minecraft:old_growth_pine_taiga")
-+ .put("minecraft:giant_tree_taiga", "minecraft:old_growth_pine_taiga")
-+ .put("minecraft:gravelly_mountains", "minecraft:windswept_gravelly_hills")
-+ .put("minecraft:jungle_edge", "minecraft:sparse_jungle")
-+ .put("minecraft:jungle_hills", "minecraft:jungle")
-+ .put("minecraft:modified_badlands_plateau", "minecraft:badlands")
-+ .put("minecraft:modified_gravelly_mountains", "minecraft:windswept_gravelly_hills")
-+ .put("minecraft:modified_jungle_edge", "minecraft:sparse_jungle")
-+ .put("minecraft:modified_jungle", "minecraft:jungle")
-+ .put("minecraft:modified_wooded_badlands_plateau", "minecraft:wooded_badlands")
-+ .put("minecraft:mountain_edge", "minecraft:windswept_hills")
-+ .put("minecraft:mountains", "minecraft:windswept_hills")
-+ .put("minecraft:mushroom_field_shore", "minecraft:mushroom_fields")
-+ .put("minecraft:shattered_savanna", "minecraft:windswept_savanna")
-+ .put("minecraft:shattered_savanna_plateau", "minecraft:windswept_savanna")
-+ .put("minecraft:snowy_mountains", "minecraft:snowy_plains")
-+ .put("minecraft:snowy_taiga_hills", "minecraft:snowy_taiga")
-+ .put("minecraft:snowy_taiga_mountains", "minecraft:snowy_taiga")
-+ .put("minecraft:snowy_tundra", "minecraft:snowy_plains")
-+ .put("minecraft:stone_shore", "minecraft:stony_shore")
-+ .put("minecraft:swamp_hills", "minecraft:swamp")
-+ .put("minecraft:taiga_hills", "minecraft:taiga")
-+ .put("minecraft:taiga_mountains", "minecraft:taiga")
-+ .put("minecraft:tall_birch_forest", "minecraft:old_growth_birch_forest")
-+ .put("minecraft:tall_birch_hills", "minecraft:old_growth_birch_forest")
-+ .put("minecraft:wooded_badlands_plateau", "minecraft:wooded_badlands")
-+ .put("minecraft:wooded_hills", "minecraft:forest")
-+ .put("minecraft:wooded_mountains", "minecraft:windswept_forest")
-+ .put("minecraft:lofty_peaks", "minecraft:jagged_peaks")
-+ .put("minecraft:snowcapped_peaks", "minecraft:frozen_peaks")
-+ .build();
++ public static final Map BIOME_UPDATE = new HashMap<>(
++ ImmutableMap.builder()
++ .put("minecraft:badlands_plateau", "minecraft:badlands")
++ .put("minecraft:bamboo_jungle_hills", "minecraft:bamboo_jungle")
++ .put("minecraft:birch_forest_hills", "minecraft:birch_forest")
++ .put("minecraft:dark_forest_hills", "minecraft:dark_forest")
++ .put("minecraft:desert_hills", "minecraft:desert")
++ .put("minecraft:desert_lakes", "minecraft:desert")
++ .put("minecraft:giant_spruce_taiga_hills", "minecraft:old_growth_spruce_taiga")
++ .put("minecraft:giant_spruce_taiga", "minecraft:old_growth_spruce_taiga")
++ .put("minecraft:giant_tree_taiga_hills", "minecraft:old_growth_pine_taiga")
++ .put("minecraft:giant_tree_taiga", "minecraft:old_growth_pine_taiga")
++ .put("minecraft:gravelly_mountains", "minecraft:windswept_gravelly_hills")
++ .put("minecraft:jungle_edge", "minecraft:sparse_jungle")
++ .put("minecraft:jungle_hills", "minecraft:jungle")
++ .put("minecraft:modified_badlands_plateau", "minecraft:badlands")
++ .put("minecraft:modified_gravelly_mountains", "minecraft:windswept_gravelly_hills")
++ .put("minecraft:modified_jungle_edge", "minecraft:sparse_jungle")
++ .put("minecraft:modified_jungle", "minecraft:jungle")
++ .put("minecraft:modified_wooded_badlands_plateau", "minecraft:wooded_badlands")
++ .put("minecraft:mountain_edge", "minecraft:windswept_hills")
++ .put("minecraft:mountains", "minecraft:windswept_hills")
++ .put("minecraft:mushroom_field_shore", "minecraft:mushroom_fields")
++ .put("minecraft:shattered_savanna", "minecraft:windswept_savanna")
++ .put("minecraft:shattered_savanna_plateau", "minecraft:windswept_savanna")
++ .put("minecraft:snowy_mountains", "minecraft:snowy_plains")
++ .put("minecraft:snowy_taiga_hills", "minecraft:snowy_taiga")
++ .put("minecraft:snowy_taiga_mountains", "minecraft:snowy_taiga")
++ .put("minecraft:snowy_tundra", "minecraft:snowy_plains")
++ .put("minecraft:stone_shore", "minecraft:stony_shore")
++ .put("minecraft:swamp_hills", "minecraft:swamp")
++ .put("minecraft:taiga_hills", "minecraft:taiga")
++ .put("minecraft:taiga_mountains", "minecraft:taiga")
++ .put("minecraft:tall_birch_forest", "minecraft:old_growth_birch_forest")
++ .put("minecraft:tall_birch_hills", "minecraft:old_growth_birch_forest")
++ .put("minecraft:wooded_badlands_plateau", "minecraft:wooded_badlands")
++ .put("minecraft:wooded_hills", "minecraft:forest")
++ .put("minecraft:wooded_mountains", "minecraft:windswept_forest")
++ .put("minecraft:lofty_peaks", "minecraft:jagged_peaks")
++ .put("minecraft:snowcapped_peaks", "minecraft:frozen_peaks")
++ .build()
++ );
+
+ public static void register() {
+ ConverterAbstractStringValueTypeRename.register(VERSION, MCTypeRegistry.BIOME, BIOME_UPDATE::get);
@@ -18341,10 +18600,10 @@ index 0000000000000000000000000000000000000000..b4584cb2b99abd8739f815c741ea2424
+}
diff --git a/src/main/java/ca/spottedleaf/dataconverter/minecraft/versions/V3439.java b/src/main/java/ca/spottedleaf/dataconverter/minecraft/versions/V3439.java
new file mode 100644
-index 0000000000000000000000000000000000000000..0f2f10c0dd405bfa571502e94319e2eaa27af2b6
+index 0000000000000000000000000000000000000000..eb91879e4e3faa55f2cc546f5f4d69941648f85e
--- /dev/null
+++ b/src/main/java/ca/spottedleaf/dataconverter/minecraft/versions/V3439.java
-@@ -0,0 +1,65 @@
+@@ -0,0 +1,96 @@
+package ca.spottedleaf.dataconverter.minecraft.versions;
+
+import ca.spottedleaf.dataconverter.converters.DataConverter;
@@ -18381,27 +18640,58 @@ index 0000000000000000000000000000000000000000..0f2f10c0dd405bfa571502e94319e2ea
+
+ @Override
+ public MapType convert(final MapType data, final long sourceVersion, final long toVersion) {
++ // front text
+ final MapType frontText = data.getTypeUtil().createEmptyMap();
+ data.setMap("front_text", frontText);
+
-+ frontText.setList("messages", migrateToList(data, "Text"));
-+ frontText.setList("filtered_messages", migrateToList(data, "FilteredText"));
++ final ListType frontMessages = migrateToList(data, "Text");
++ frontText.setList("messages", frontMessages);
++
++ ListType frontFilteredMessages = null;
++
++ for (int i = 0; i < 4; ++i) {
++ final String filtered = data.getString("FilteredText" + i);
++ if (filtered == null) {
++ if (frontFilteredMessages != null) {
++ frontFilteredMessages.addString(frontMessages.getString(i));
++ }
++ continue;
++ }
++
++ if (frontFilteredMessages == null) {
++ frontFilteredMessages = data.getTypeUtil().createEmptyList();
++ for (int k = 0; k < i; ++k) {
++ frontFilteredMessages.addString(frontMessages.getString(k));
++ }
++ }
++
++ frontFilteredMessages.addString(filtered);
++ }
++
++ if (frontFilteredMessages != null) {
++ frontText.setList("filtered_messages", frontFilteredMessages);
++ }
++
+ frontText.setString("color", data.getString("Color", DEFAULT_COLOR));
+ frontText.setBoolean("has_glowing_text", data.getBoolean("GlowingText", false));
++ frontText.setBoolean("_filtered_correct", true);
+
++ // back text
+ final MapType backText = data.getTypeUtil().createEmptyMap();
+ data.setMap("back_text", backText);
+
+ final ListType blankMessages = data.getTypeUtil().createEmptyList();
++ backText.setList("messages", blankMessages);
++
+ for (int i = 0; i < 4; ++i) {
+ blankMessages.addString(BLANK_TEXT_LINE);
+ }
+
-+ backText.setList("messages", blankMessages);
-+ backText.setList("filtered_messages", blankMessages.copy()); // need to copy so that the value isn't mapped to twice, so that updates to one do not reflect in the other
+ backText.setString("color", DEFAULT_COLOR);
+ backText.setBoolean("has_glowing_text", false);
+
++ // misc
++ data.setBoolean("is_waxed", false);
+ return null;
+ }
+ };
@@ -18656,6 +18946,448 @@ index 0000000000000000000000000000000000000000..86509b2fa3c83dc485776d36b7bc2944
+ });
+ }
+}
+diff --git a/src/main/java/ca/spottedleaf/dataconverter/minecraft/versions/V3564.java b/src/main/java/ca/spottedleaf/dataconverter/minecraft/versions/V3564.java
+new file mode 100644
+index 0000000000000000000000000000000000000000..b98d117ec8d5e8be88172d3089b39044acf8bb3a
+--- /dev/null
++++ b/src/main/java/ca/spottedleaf/dataconverter/minecraft/versions/V3564.java
+@@ -0,0 +1,93 @@
++package ca.spottedleaf.dataconverter.minecraft.versions;
++
++import ca.spottedleaf.dataconverter.converters.DataConverter;
++import ca.spottedleaf.dataconverter.minecraft.MCVersions;
++import ca.spottedleaf.dataconverter.minecraft.datatypes.MCTypeRegistry;
++import ca.spottedleaf.dataconverter.types.ListType;
++import ca.spottedleaf.dataconverter.types.MapType;
++import ca.spottedleaf.dataconverter.types.ObjectType;
++import net.minecraft.network.chat.CommonComponents;
++import net.minecraft.network.chat.Component;
++
++public final class V3564 {
++
++ private static final int VERSION = MCVersions.V1_20_1 + 99;
++
++ public static void register() {
++ final DataConverter, MapType> converter = new DataConverter<>(VERSION) {
++
++ private static final String[] LEGACY_FIELDS = new String[] {
++ "Text1",
++ "Text2",
++ "Text3",
++ "Text4",
++
++ "FilteredText1",
++ "FilteredText2",
++ "FilteredText3",
++ "FilteredText4",
++
++ "Color",
++
++ "GlowingText"
++ };
++
++ private static final String EMPTY = Component.Serializer.toJson(CommonComponents.EMPTY);
++
++ private static void updateText(final MapType text) {
++ if (text == null) {
++ return;
++ }
++
++ if (text.getBoolean("_filtered_correct", false)) {
++ text.remove("_filtered_correct");
++ return;
++ }
++
++ final ListType filteredMessages = text.getList("filtered_messages", ObjectType.STRING);
++
++ if (filteredMessages == null || filteredMessages.size() == 0) {
++ return;
++ }
++
++ // should treat null here as empty list
++ final ListType messages = text.getList("messages", ObjectType.STRING);
++
++ final ListType newFilteredList = filteredMessages.getTypeUtil().createEmptyList();
++ boolean newFilteredIsEmpty = true;
++
++ for (int i = 0, len = filteredMessages.size(); i < len; ++i) {
++ final String filtered = filteredMessages.getString(i);
++ final String message = messages != null && i < messages.size() ? messages.getString(i) : EMPTY;
++
++ final String newFiltered = EMPTY.equals(filtered) ? message : filtered;
++
++ newFilteredList.addString(newFiltered);
++
++ newFilteredIsEmpty = newFilteredIsEmpty && EMPTY.equals(newFiltered);
++ }
++
++ if (newFilteredIsEmpty) {
++ text.remove("filtered_messages");
++ } else {
++ text.setList("filtered_messages", newFilteredList);
++ }
++ }
++
++ @Override
++ public MapType convert(final MapType data, final long sourceVersion, final long toVersion) {
++ updateText(data.getMap("front_text"));
++ updateText(data.getMap("back_text"));
++
++ for (final String toRemove : LEGACY_FIELDS) {
++ data.remove(toRemove);
++ }
++
++ return null;
++ }
++ };
++
++ MCTypeRegistry.TILE_ENTITY.addConverterForId("minecraft:sign", converter);
++ MCTypeRegistry.TILE_ENTITY.addConverterForId("minecraft:hanging_sign", converter);
++ }
++}
+diff --git a/src/main/java/ca/spottedleaf/dataconverter/minecraft/versions/V3565.java b/src/main/java/ca/spottedleaf/dataconverter/minecraft/versions/V3565.java
+new file mode 100644
+index 0000000000000000000000000000000000000000..d63c4c3a53bf9cd67acc5515e9176b972cd13ce7
+--- /dev/null
++++ b/src/main/java/ca/spottedleaf/dataconverter/minecraft/versions/V3565.java
+@@ -0,0 +1,30 @@
++package ca.spottedleaf.dataconverter.minecraft.versions;
++
++import ca.spottedleaf.dataconverter.converters.DataConverter;
++import ca.spottedleaf.dataconverter.minecraft.MCVersions;
++import ca.spottedleaf.dataconverter.minecraft.datatypes.MCTypeRegistry;
++import ca.spottedleaf.dataconverter.types.MapType;
++
++public final class V3565 {
++
++ private static final int VERSION = MCVersions.V1_20_1 + 100;
++
++ public static void register() {
++ MCTypeRegistry.SAVED_DATA_RANDOM_SEQUENCES.addStructureConverter(new DataConverter<>(VERSION) {
++ @Override
++ public MapType convert(final MapType root, final long sourceVersion, final long toVersion) {
++ final MapType oldData = root.getMap("data");
++ if (oldData == null) {
++ return null;
++ }
++
++ final MapType newData = root.getTypeUtil().createEmptyMap();
++ root.setMap("data", newData);
++
++ newData.setMap("sequences", oldData);
++
++ return null;
++ }
++ });
++ }
++}
+diff --git a/src/main/java/ca/spottedleaf/dataconverter/minecraft/versions/V3566.java b/src/main/java/ca/spottedleaf/dataconverter/minecraft/versions/V3566.java
+new file mode 100644
+index 0000000000000000000000000000000000000000..2501759bc1c0313c0556d4f75a0c4a3d3b6f5449
+--- /dev/null
++++ b/src/main/java/ca/spottedleaf/dataconverter/minecraft/versions/V3566.java
+@@ -0,0 +1,56 @@
++package ca.spottedleaf.dataconverter.minecraft.versions;
++
++import ca.spottedleaf.dataconverter.converters.DataConverter;
++import ca.spottedleaf.dataconverter.minecraft.MCVersions;
++import ca.spottedleaf.dataconverter.minecraft.converters.helpers.RenameHelper;
++import ca.spottedleaf.dataconverter.minecraft.datatypes.MCTypeRegistry;
++import ca.spottedleaf.dataconverter.types.MapType;
++import com.google.common.collect.ImmutableMap;
++import java.util.HashMap;
++import java.util.Map;
++
++public final class V3566 {
++
++ private static final int VERSION = MCVersions.V1_20_1 + 101;
++
++ public static void register() {
++ MCTypeRegistry.SAVED_DATA_SCOREBOARD.addStructureConverter(new DataConverter<>(VERSION) {
++
++ private static final Map SLOT_RENAMES = new HashMap<>(
++ ImmutableMap.builder()
++ .put("slot_0", "list")
++ .put("slot_1", "sidebar")
++ .put("slot_2", "below_name")
++ .put("slot_3", "sidebar.team.black")
++ .put("slot_4", "sidebar.team.dark_blue")
++ .put("slot_5", "sidebar.team.dark_green")
++ .put("slot_6", "sidebar.team.dark_aqua")
++ .put("slot_7", "sidebar.team.dark_red")
++ .put("slot_8", "sidebar.team.dark_purple")
++ .put("slot_9", "sidebar.team.gold")
++ .put("slot_10", "sidebar.team.gray")
++ .put("slot_11", "sidebar.team.dark_gray")
++ .put("slot_12", "sidebar.team.blue")
++ .put("slot_13", "sidebar.team.green")
++ .put("slot_14", "sidebar.team.aqua")
++ .put("slot_15", "sidebar.team.red")
++ .put("slot_16", "sidebar.team.light_purple")
++ .put("slot_17", "sidebar.team.yellow")
++ .put("slot_18", "sidebar.team.white")
++ .build()
++ );
++
++ @Override
++ public MapType convert(final MapType root, final long sourceVersion, final long toVersion) {
++ final MapType data = root.getMap("data");
++ if (data == null) {
++ return null;
++ }
++
++ RenameHelper.renameKeys(data.getMap("DisplaySlots"), SLOT_RENAMES::get);
++
++ return null;
++ }
++ });
++ }
++}
+diff --git a/src/main/java/ca/spottedleaf/dataconverter/minecraft/versions/V3568.java b/src/main/java/ca/spottedleaf/dataconverter/minecraft/versions/V3568.java
+new file mode 100644
+index 0000000000000000000000000000000000000000..98272d556a09e9f035005c6783ebb229c2c7157d
+--- /dev/null
++++ b/src/main/java/ca/spottedleaf/dataconverter/minecraft/versions/V3568.java
+@@ -0,0 +1,239 @@
++package ca.spottedleaf.dataconverter.minecraft.versions;
++
++import ca.spottedleaf.dataconverter.converters.DataConverter;
++import ca.spottedleaf.dataconverter.minecraft.MCVersions;
++import ca.spottedleaf.dataconverter.minecraft.converters.helpers.RenameHelper;
++import ca.spottedleaf.dataconverter.minecraft.datatypes.MCTypeRegistry;
++import ca.spottedleaf.dataconverter.types.ListType;
++import ca.spottedleaf.dataconverter.types.MapType;
++import ca.spottedleaf.dataconverter.types.ObjectType;
++import java.util.HashMap;
++import java.util.HashSet;
++import java.util.Map;
++import java.util.Set;
++
++public final class V3568 {
++
++ private static final int VERSION = MCVersions.V23W31A + 1;
++
++ private static final String[] EFFECT_ID_MAP = new String[34];
++ static {
++ EFFECT_ID_MAP[1] = "minecraft:speed";
++ EFFECT_ID_MAP[2] = "minecraft:slowness";
++ EFFECT_ID_MAP[3] = "minecraft:haste";
++ EFFECT_ID_MAP[4] = "minecraft:mining_fatigue";
++ EFFECT_ID_MAP[5] = "minecraft:strength";
++ EFFECT_ID_MAP[6] = "minecraft:instant_health";
++ EFFECT_ID_MAP[7] = "minecraft:instant_damage";
++ EFFECT_ID_MAP[8] = "minecraft:jump_boost";
++ EFFECT_ID_MAP[9] = "minecraft:nausea";
++ EFFECT_ID_MAP[10] = "minecraft:regeneration";
++ EFFECT_ID_MAP[11] = "minecraft:resistance";
++ EFFECT_ID_MAP[12] = "minecraft:fire_resistance";
++ EFFECT_ID_MAP[13] = "minecraft:water_breathing";
++ EFFECT_ID_MAP[14] = "minecraft:invisibility";
++ EFFECT_ID_MAP[15] = "minecraft:blindness";
++ EFFECT_ID_MAP[16] = "minecraft:night_vision";
++ EFFECT_ID_MAP[17] = "minecraft:hunger";
++ EFFECT_ID_MAP[18] = "minecraft:weakness";
++ EFFECT_ID_MAP[19] = "minecraft:poison";
++ EFFECT_ID_MAP[20] = "minecraft:wither";
++ EFFECT_ID_MAP[21] = "minecraft:health_boost";
++ EFFECT_ID_MAP[22] = "minecraft:absorption";
++ EFFECT_ID_MAP[23] = "minecraft:saturation";
++ EFFECT_ID_MAP[24] = "minecraft:glowing";
++ EFFECT_ID_MAP[25] = "minecraft:levitation";
++ EFFECT_ID_MAP[26] = "minecraft:luck";
++ EFFECT_ID_MAP[27] = "minecraft:unluck";
++ EFFECT_ID_MAP[28] = "minecraft:slow_falling";
++ EFFECT_ID_MAP[29] = "minecraft:conduit_power";
++ EFFECT_ID_MAP[30] = "minecraft:dolphins_grace";
++ EFFECT_ID_MAP[31] = "minecraft:bad_omen";
++ EFFECT_ID_MAP[32] = "minecraft:hero_of_the_village";
++ EFFECT_ID_MAP[33] = "minecraft:darkness";
++ }
++ private static final Set EFFECT_ITEMS =
++ new HashSet<>(
++ Set.of(
++ "minecraft:potion",
++ "minecraft:splash_potion",
++ "minecraft:lingering_potion",
++ "minecraft:tipped_arrow"
++ )
++ );
++
++ private static String readLegacyEffect(final MapType data, final String path) {
++ final Number id = data.getNumber(path);
++ if (id == null) {
++ return null;
++ }
++
++ final int castedId = id.intValue();
++ return castedId >= 0 && castedId < EFFECT_ID_MAP.length ? EFFECT_ID_MAP[castedId] : null;
++ }
++
++ private static void convertLegacyEffect(final MapType data, final String legacyPath, final String newPath) {
++ final Number id = data.getNumber(legacyPath);
++ data.remove(legacyPath);
++
++ if (id == null) {
++ return;
++ }
++
++ final int castedId = id.intValue();
++ final String newId = castedId >= 0 && castedId < EFFECT_ID_MAP.length ? EFFECT_ID_MAP[castedId] : null;
++
++ if (newId == null) {
++ return;
++ }
++
++ data.setString(newPath, newId);
++ }
++
++ private static final Map MOB_EFFECT_RENAMES = new HashMap<>();
++ static {
++ MOB_EFFECT_RENAMES.put("Ambient", "ambient");
++ MOB_EFFECT_RENAMES.put("Amplifier", "amplifier");
++ MOB_EFFECT_RENAMES.put("Duration", "duration");
++ MOB_EFFECT_RENAMES.put("ShowParticles", "show_particles");
++ MOB_EFFECT_RENAMES.put("ShowIcon", "show_icon");
++ MOB_EFFECT_RENAMES.put("FactorCalculationData", "factor_calculation_data");
++ MOB_EFFECT_RENAMES.put("HiddenEffect", "hidden_effect");
++ }
++
++ private static void convertMobEffect(final MapType mobEffect) {
++ if (mobEffect == null) {
++ return;
++ }
++
++ convertLegacyEffect(mobEffect, "Id", "id");
++
++ for (final Map.Entry rename : MOB_EFFECT_RENAMES.entrySet()) {
++ RenameHelper.renameSingle(mobEffect, rename.getKey(), rename.getValue());
++ }
++
++ convertMobEffect(mobEffect.getMap("hidden_effect"));
++ }
++
++ private static void convertMobEffectList(final MapType data, final String oldPath, final String newPath) {
++ final ListType effects = data.getList(oldPath, ObjectType.MAP);
++ if (effects == null) {
++ return;
++ }
++
++ for (int i = 0, len = effects.size(); i < len; ++i) {
++ convertMobEffect(effects.getMap(i));
++ }
++
++ data.remove(oldPath);
++ data.setList(newPath, effects);
++ }
++
++ private static void removeAndSet(final MapType data, final String toRemovePath,
++ final String toSetPath, final Object toSet) {
++ data.remove(toRemovePath);
++ if (toSet != null) {
++ data.setGeneric(toSetPath, toSet);
++ }
++ }
++
++ private static void updateSuspiciousStew(final MapType from, final MapType into) {
++ removeAndSet(into, "EffectId", "id", readLegacyEffect(from, "EffectId"));
++ removeAndSet(into, "EffectDuration", "duration", from.getGeneric("EffectDuration"));
++ }
++
++ public static void register() {
++ final DataConverter, MapType> beaconConverter = new DataConverter<>(VERSION) {
++ @Override
++ public MapType convert(final MapType data, final long sourceVersion, final long toVersion) {
++ convertLegacyEffect(data, "Primary", "primary_effect");
++ convertLegacyEffect(data, "Secondary", "secondary_effect");
++
++ return null;
++ }
++ };
++
++ final DataConverter, MapType> mooshroomConverter = new DataConverter<>(VERSION) {
++ @Override
++ public MapType convert(final MapType data, final long sourceVersion, final long toVersion) {
++ final MapType newEffect = data.getTypeUtil().createEmptyMap();
++ updateSuspiciousStew(data, newEffect);
++
++ data.remove("EffectId");
++ data.remove("EffectDuration");
++
++ if (!newEffect.isEmpty()) {
++ final ListType stewEffects = data.getTypeUtil().createEmptyList();
++ data.setList("stew_effects", stewEffects);
++
++ stewEffects.addMap(newEffect);
++ }
++
++ return null;
++ }
++ };
++ final DataConverter, MapType> arrowConverter = new DataConverter<>(VERSION) {
++ @Override
++ public MapType convert(final MapType data, final long sourceVersion, final long toVersion) {
++ convertMobEffectList(data, "CustomPotionEffects", "custom_potion_effects");
++ return null;
++ }
++ };
++ final DataConverter, MapType> areaEffectCloudConverter = new DataConverter<>(VERSION) {
++ @Override
++ public MapType convert(final MapType data, final long sourceVersion, final long toVersion) {
++ convertMobEffectList(data, "Effects", "effects");
++ return null;
++ }
++ };
++ final DataConverter, MapType> livingEntityConverter = new DataConverter<>(VERSION) {
++ @Override
++ public MapType convert(final MapType data, final long sourceVersion, final long toVersion) {
++ convertMobEffectList(data, "ActiveEffects", "active_effects");
++ return null;
++ }
++ };
++
++ final DataConverter, MapType> itemConverter = new DataConverter<>(VERSION) {
++ @Override
++ public MapType convert(final MapType root, final long sourceVersion, final long toVersion) {
++ final String id = root.getString("id");
++
++ final MapType tag = root.getMap("tag");
++
++ if ("minecraft:suspicious_stew".equals(id)) {
++ RenameHelper.renameSingle(tag, "Effects", "effects");
++
++ final ListType effects = tag.getList("effects", ObjectType.MAP);
++
++ if (effects != null) {
++ for (int i = 0, len = effects.size(); i < len; ++i) {
++ final MapType effect = effects.getMap(i);
++ updateSuspiciousStew(effect, effect);
++ }
++ }
++
++ return null;
++ }
++
++ if (EFFECT_ITEMS.contains(id)) {
++ convertMobEffectList(tag, "CustomPotionEffects", "custom_potion_effects");
++ return null;
++ }
++
++ return null;
++ }
++ };
++
++ MCTypeRegistry.TILE_ENTITY.addConverterForId("minecraft:beacon", beaconConverter);
++
++ MCTypeRegistry.ENTITY.addConverterForId("minecraft:mooshroom", mooshroomConverter);
++ MCTypeRegistry.ENTITY.addConverterForId("minecraft:arrow", arrowConverter);
++ MCTypeRegistry.ENTITY.addConverterForId("minecraft:area_effect_cloud", areaEffectCloudConverter);
++ MCTypeRegistry.ENTITY.addStructureConverter(livingEntityConverter);
++
++ MCTypeRegistry.PLAYER.addStructureConverter(livingEntityConverter);
++
++ MCTypeRegistry.ITEM_STACK.addStructureConverter(itemConverter);
++ }
++}
diff --git a/src/main/java/ca/spottedleaf/dataconverter/minecraft/versions/V501.java b/src/main/java/ca/spottedleaf/dataconverter/minecraft/versions/V501.java
new file mode 100644
index 0000000000000000000000000000000000000000..6ab2bf99d72983fc2742a1f6f2f7fa671611526d
@@ -18986,10 +19718,10 @@ index 0000000000000000000000000000000000000000..88d9c0fcd88ccfd6d6b46ae050914079
+}
diff --git a/src/main/java/ca/spottedleaf/dataconverter/minecraft/versions/V704.java b/src/main/java/ca/spottedleaf/dataconverter/minecraft/versions/V704.java
new file mode 100644
-index 0000000000000000000000000000000000000000..3beb53d9dc3be46351fec95afa85bfd712bbb00a
+index 0000000000000000000000000000000000000000..c28f1ec9ea87105eb1391d99f4f5858f03b0a503
--- /dev/null
+++ b/src/main/java/ca/spottedleaf/dataconverter/minecraft/versions/V704.java
-@@ -0,0 +1,395 @@
+@@ -0,0 +1,392 @@
+package ca.spottedleaf.dataconverter.minecraft.versions;
+
+import ca.spottedleaf.dataconverter.converters.DataConverter;
@@ -19004,7 +19736,6 @@ index 0000000000000000000000000000000000000000..3beb53d9dc3be46351fec95afa85bfd7
+import ca.spottedleaf.dataconverter.types.MapType;
+import com.mojang.logging.LogUtils;
+import net.minecraft.core.BlockPos;
-+import net.minecraft.core.Registry;
+import net.minecraft.core.registries.BuiltInRegistries;
+import net.minecraft.world.item.BlockItem;
+import net.minecraft.world.item.Item;
@@ -19012,10 +19743,8 @@ index 0000000000000000000000000000000000000000..3beb53d9dc3be46351fec95afa85bfd7
+import net.minecraft.world.level.block.EntityBlock;
+import net.minecraft.world.level.block.entity.BlockEntity;
+import net.minecraft.world.level.block.entity.BlockEntityType;
-+import net.minecraft.world.level.block.state.BlockState;
+import org.slf4j.Logger;
+import java.util.HashMap;
-+import java.util.LinkedHashMap;
+import java.util.Map;
+
+public final class V704 {
@@ -19024,7 +19753,7 @@ index 0000000000000000000000000000000000000000..3beb53d9dc3be46351fec95afa85bfd7
+
+ protected static final int VERSION = MCVersions.V1_10_2 + 192;
+
-+ public static final Map ITEM_ID_TO_TILE_ENTITY_ID = new HashMap() {
++ public static final Map ITEM_ID_TO_TILE_ENTITY_ID = new HashMap<>() {
+ @Override
+ public String put(final String key, final String value) {
+ if (this.containsKey(key)) {
@@ -19901,10 +20630,10 @@ index 0000000000000000000000000000000000000000..9e2ef3cea4fd382a75a4d787fe2e2ff5
+}
diff --git a/src/main/java/ca/spottedleaf/dataconverter/minecraft/versions/V99.java b/src/main/java/ca/spottedleaf/dataconverter/minecraft/versions/V99.java
new file mode 100644
-index 0000000000000000000000000000000000000000..d95f8af7bd9bcedbb30be1b59e3dc749551e8cbe
+index 0000000000000000000000000000000000000000..f81ef4f80d5f627624d535ae25d44edd523fa4bf
--- /dev/null
+++ b/src/main/java/ca/spottedleaf/dataconverter/minecraft/versions/V99.java
-@@ -0,0 +1,348 @@
+@@ -0,0 +1,357 @@
+package ca.spottedleaf.dataconverter.minecraft.versions;
+
+import ca.spottedleaf.dataconverter.minecraft.MCVersions;
@@ -20217,15 +20946,24 @@ index 0000000000000000000000000000000000000000..d95f8af7bd9bcedbb30be1b59e3dc749
+ return null;
+ });
+
-+ MCTypeRegistry.SAVED_DATA.addStructureWalker(VERSION, (final MapType root, final long fromVersion, final long toVersion) -> {
++ MCTypeRegistry.SAVED_DATA_SCOREBOARD.addStructureWalker(VERSION, (final MapType root, final long fromVersion, final long toVersion) -> {
++ final MapType data = root.getMap("data");
++ if (data == null) {
++ return null;
++ }
++
++ WalkerUtils.convertList(MCTypeRegistry.OBJECTIVE, data, "Objectives", fromVersion, toVersion);
++ WalkerUtils.convertList(MCTypeRegistry.TEAM, data, "Teams", fromVersion, toVersion);
++
++ return null;
++ });
++ MCTypeRegistry.SAVED_DATA_STRUCTURE_FEATURE_INDICES.addStructureWalker(VERSION, (final MapType root, final long fromVersion, final long toVersion) -> {
+ final MapType data = root.getMap("data");
+ if (data == null) {
+ return null;
+ }
+
+ WalkerUtils.convertValues(MCTypeRegistry.STRUCTURE_FEATURE, data, "Features", fromVersion, toVersion);
-+ WalkerUtils.convertList(MCTypeRegistry.OBJECTIVE, data, "Objectives", fromVersion, toVersion);
-+ WalkerUtils.convertList(MCTypeRegistry.TEAM, data, "Teams", fromVersion, toVersion);
+
+ return null;
+ });
@@ -23729,11 +24467,11 @@ index 0000000000000000000000000000000000000000..5a6536377c9c1e1753e930ff2a6bb98e
+ }
+}
diff --git a/src/main/java/net/minecraft/data/structures/StructureUpdater.java b/src/main/java/net/minecraft/data/structures/StructureUpdater.java
-index c1e1f45b00751605625030bd86669627cd5459c7..79f2f9ec71ea12bb520fd1afa47489dd530110be 100644
+index d45b0b75509802c396fd4415d9f0adf5707f7515..26f901e34e7d8b1c52788c9dbe8859920bd4d498 100644
--- a/src/main/java/net/minecraft/data/structures/StructureUpdater.java
+++ b/src/main/java/net/minecraft/data/structures/StructureUpdater.java
@@ -25,7 +25,7 @@ public class StructureUpdater implements SnbtToNbt.Filter {
- LOGGER.warn("SNBT Too old, do not forget to update: {} < {}: {}", i, 3437, name);
+ LOGGER.warn("SNBT Too old, do not forget to update: {} < {}: {}", i, 3563, name);
}
- CompoundTag compoundTag = DataFixTypes.STRUCTURE.updateToCurrentVersion(DataFixers.getDataFixer(), nbt, i);
@@ -23786,7 +24524,7 @@ index d80580574a9e5d1c850270d93807f3a66a9c76f8..98b3909b536f11eda9c481ffd74066ad
@Override
diff --git a/src/main/java/net/minecraft/world/level/chunk/storage/SectionStorage.java b/src/main/java/net/minecraft/world/level/chunk/storage/SectionStorage.java
-index 08961b2a9684ac54c455002affc6174b0e64b6a5..b0c8a0e64c7a5d41c1b4cc1e39c4399c142b56af 100644
+index 28e0f782c24afb3d8d2296bd0d3493a32ef66961..56f0e217276b01aed2f20a71f6849826285fc15b 100644
--- a/src/main/java/net/minecraft/world/level/chunk/storage/SectionStorage.java
+++ b/src/main/java/net/minecraft/world/level/chunk/storage/SectionStorage.java
@@ -142,7 +142,14 @@ public class SectionStorage implements AutoCloseable {
@@ -23819,7 +24557,7 @@ index 15a9736a870055d639d03063c7cf67fd769fff36..1ca00340aaa201dd34e5c350d23ef53e
LOGGER.warn("Failed to partially datafix chunk {}", pos, var12);
return StructureCheckResult.CHUNK_LOAD_NEEDED;
diff --git a/src/main/java/net/minecraft/world/level/levelgen/structure/templatesystem/StructureTemplateManager.java b/src/main/java/net/minecraft/world/level/levelgen/structure/templatesystem/StructureTemplateManager.java
-index 6ffca6d4ad2dbd26651760d2a8a5208689d5baf8..88dbbef7fc0a217d821a63a55b0b03b45d78c36f 100644
+index cd4bdde9f67231ed767ea0c5728d0e75001ba917..a014666a6d7ca8306316af56e7fb35778b668ce6 100644
--- a/src/main/java/net/minecraft/world/level/levelgen/structure/templatesystem/StructureTemplateManager.java
+++ b/src/main/java/net/minecraft/world/level/levelgen/structure/templatesystem/StructureTemplateManager.java
@@ -235,7 +235,7 @@ public class StructureTemplateManager {
@@ -23844,3 +24582,16 @@ index a5c67686f7c1be10d31601903e27d24e41cff83e..e2c0ab0ab06b15dcfa6ce8c82ad4136f
}
return nbttagcompound;
+diff --git a/src/main/java/net/minecraft/world/level/storage/PrimaryLevelData.java b/src/main/java/net/minecraft/world/level/storage/PrimaryLevelData.java
+index 626b861ef2f323a5fc50ab5178d3e108e0f9cc25..14b8011c8874e05647eb1636ee1eed5d90da8200 100644
+--- a/src/main/java/net/minecraft/world/level/storage/PrimaryLevelData.java
++++ b/src/main/java/net/minecraft/world/level/storage/PrimaryLevelData.java
+@@ -316,7 +316,7 @@ public class PrimaryLevelData implements ServerLevelData, WorldData {
+ throw (NullPointerException) Util.pauseInIde(new NullPointerException("Fixer Upper not set inside LevelData, and the player tag is not upgraded."));
+ }
+
+- this.loadedPlayerTag = DataFixTypes.PLAYER.updateToCurrentVersion(this.fixerUpper, this.loadedPlayerTag, this.playerDataVersion);
++ this.loadedPlayerTag = ca.spottedleaf.dataconverter.minecraft.MCDataConverter.convertTag(ca.spottedleaf.dataconverter.minecraft.datatypes.MCTypeRegistry.PLAYER, this.loadedPlayerTag, version, SharedConstants.getCurrentVersion().getDataVersion().getVersion()); // Paper
+ }
+
+ this.upgradedPlayerTag = true;
diff --git a/patches/unapplied/server/0016-Starlight.patch b/patches/server/0016-Starlight.patch
similarity index 99%
rename from patches/unapplied/server/0016-Starlight.patch
rename to patches/server/0016-Starlight.patch
index d80b3a860f..4d62d9a92c 100644
--- a/patches/unapplied/server/0016-Starlight.patch
+++ b/patches/server/0016-Starlight.patch
@@ -4480,7 +4480,7 @@ index 0000000000000000000000000000000000000000..463c6d8d5b114816ed90655582859458
+ }
+}
diff --git a/src/main/java/net/minecraft/server/level/ChunkHolder.java b/src/main/java/net/minecraft/server/level/ChunkHolder.java
-index 32d186fefa5ff8afedcceacea0c6fa1cefbd5490..4620e64d8eb81520b75fbfbc64603e5887c7b016 100644
+index 5250bf5029825524c239854db7999883459f1a8a..c5cd2c2c28795593712b0de2bbaa7e3860f1131a 100644
--- a/src/main/java/net/minecraft/server/level/ChunkHolder.java
+++ b/src/main/java/net/minecraft/server/level/ChunkHolder.java
@@ -53,7 +53,7 @@ public class ChunkHolder {
@@ -4493,10 +4493,10 @@ index 32d186fefa5ff8afedcceacea0c6fa1cefbd5490..4620e64d8eb81520b75fbfbc64603e58
private final DebugBuffer chunkToSaveHistory;
public int oldTicketLevel;
diff --git a/src/main/java/net/minecraft/server/level/ChunkMap.java b/src/main/java/net/minecraft/server/level/ChunkMap.java
-index a645263f148a25e5b4baeed51775eb8e7f596fe8..19bd6f9aee3ccb1af1b010ee51a54aa2d0bf9c84 100644
+index c4215430a06983fbedfd21a568d79381b95696c3..17182c7f130853b4b5d942e7d60adaded14f84f6 100644
--- a/src/main/java/net/minecraft/server/level/ChunkMap.java
+++ b/src/main/java/net/minecraft/server/level/ChunkMap.java
-@@ -133,7 +133,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider
+@@ -124,7 +124,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider
private final LongSet entitiesInLevel;
public final ServerLevel level;
private final ThreadedLevelLightEngine lightEngine;
@@ -4519,7 +4519,7 @@ index d8b83c8c89143d78620f812c491a1950e3218eb1..f3c9a3dbb6f0e6f825b7477c89ed72ed
while (objectiterator.hasNext()) {
diff --git a/src/main/java/net/minecraft/server/level/ThreadedLevelLightEngine.java b/src/main/java/net/minecraft/server/level/ThreadedLevelLightEngine.java
-index 65d72701b13c25dd701533833055e77c2aff9db8..6716d9acc8b31f3fc3642b47fa52ce32c5195a3e 100644
+index 785ca2c63fe47936ac4c0223dffd8971a295a37c..97662f8c8c125cb964d46b9095509a0da9796dba 100644
--- a/src/main/java/net/minecraft/server/level/ThreadedLevelLightEngine.java
+++ b/src/main/java/net/minecraft/server/level/ThreadedLevelLightEngine.java
@@ -23,6 +23,17 @@ import net.minecraft.world.level.chunk.LightChunkGetter;
@@ -4851,11 +4851,11 @@ index 0d536d72ac918fbd403397ff369d10143ee9c204..6051e5f272838ef23276a90e21c2fc82
public static TicketType create(String name, Comparator argumentComparator) {
return new TicketType<>(name, argumentComparator, 0L);
diff --git a/src/main/java/net/minecraft/world/level/block/state/BlockBehaviour.java b/src/main/java/net/minecraft/world/level/block/state/BlockBehaviour.java
-index 88b1aabec2812252c54d0901ccd1eba0216cb7c3..803f3ebaa9fe43c88f461168ee43fc6ba920a764 100644
+index 2b8e88a75e9a974e1ecafe0360a9d69b79326d11..6c171199dcc30f56a6d0ab7ecf398b505d145067 100644
--- a/src/main/java/net/minecraft/world/level/block/state/BlockBehaviour.java
+++ b/src/main/java/net/minecraft/world/level/block/state/BlockBehaviour.java
@@ -807,6 +807,7 @@ public abstract class BlockBehaviour implements FeatureElement {
- this.spawnParticlesOnBreak = blockbase_info.spawnParticlesOnBreak;
+ this.spawnTerrainParticles = blockbase_info.spawnTerrainParticles;
this.instrument = blockbase_info.instrument;
this.replaceable = blockbase_info.replaceable;
+ this.conditionallyFullOpaque = this.isOpaque() & this.isTransparentOnSomeFaces(); // Paper
@@ -5062,7 +5062,7 @@ index 6bb508105641b5729572736c5c3f9bd6711e309a..60e760b42dd6471a229dfd45490dcf8c
@Override
public BlockEntity getBlockEntity(BlockPos pos) {
diff --git a/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java b/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java
-index 4185d524f61e87a469d563c938f742f63dad3c2f..09999a3f523ce6d652799215d3418284a69042c1 100644
+index 1e434faaf56f7d1501367c4371131a8da30c0421..bcdaa86cfd31c2ce4aadad900c348aee0a9e3fc8 100644
--- a/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java
+++ b/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java
@@ -90,6 +90,10 @@ public class LevelChunk extends ChunkAccess {
@@ -5090,10 +5090,10 @@ index 4185d524f61e87a469d563c938f742f63dad3c2f..09999a3f523ce6d652799215d3418284
while (iterator.hasNext()) {
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 afba733824d84d650e669eda028bf4d28cf006b4..cd82985b0aa821dccc0484f328407381d58ec81f 100644
+index b8fb6d1d85e07f5165bfaf7d80807e069b595851..1219200cd915d6239a32a2bd09d325cd8fa9b346 100644
--- a/src/main/java/net/minecraft/world/level/chunk/PalettedContainer.java
+++ b/src/main/java/net/minecraft/world/level/chunk/PalettedContainer.java
-@@ -142,7 +142,7 @@ public class PalettedContainer implements PaletteResize, PalettedContainer
+@@ -143,7 +143,7 @@ public class PalettedContainer implements PaletteResize, PalettedContainer
return this.get(this.strategy.getIndex(x, y, z));
}
diff --git a/patches/unapplied/server/0017-Add-TickThread.patch b/patches/server/0017-Add-TickThread.patch
similarity index 100%
rename from patches/unapplied/server/0017-Add-TickThread.patch
rename to patches/server/0017-Add-TickThread.patch
diff --git a/patches/unapplied/server/0018-Add-command-line-option-to-load-extra-plugin-jars-no.patch b/patches/server/0018-Add-command-line-option-to-load-extra-plugin-jars-no.patch
similarity index 92%
rename from patches/unapplied/server/0018-Add-command-line-option-to-load-extra-plugin-jars-no.patch
rename to patches/server/0018-Add-command-line-option-to-load-extra-plugin-jars-no.patch
index 5765732386..b2c45575c1 100644
--- a/patches/unapplied/server/0018-Add-command-line-option-to-load-extra-plugin-jars-no.patch
+++ b/patches/server/0018-Add-command-line-option-to-load-extra-plugin-jars-no.patch
@@ -7,10 +7,10 @@ Subject: [PATCH] Add command line option to load extra plugin jars not in the
ex: java -jar paperclip.jar nogui -add-plugin=/path/to/plugin.jar -add-plugin=/path/to/another/plugin_jar.jar
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
-index ccf71eba89afd2f86c6f46b6aebfe25c98f735ed..42e74be803ad80b78e0db1c8cdd2dd9e45a40985 100644
+index 71a0bad7402ec1ba48dcecb875fcad294af0f70e..b841302b22d5be19e2ed84a0e9ae34cc4f4ce3ae 100644
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
-@@ -428,6 +428,35 @@ public final class CraftServer implements Server {
+@@ -431,6 +431,35 @@ public final class CraftServer implements Server {
io.papermc.paper.plugin.entrypoint.LaunchEntryPointHandler.INSTANCE.enter(io.papermc.paper.plugin.entrypoint.Entrypoint.PLUGIN); // Paper - replace implementation
}
@@ -47,7 +47,7 @@ index ccf71eba89afd2f86c6f46b6aebfe25c98f735ed..42e74be803ad80b78e0db1c8cdd2dd9e
if (type == PluginLoadOrder.STARTUP) {
this.helpMap.clear();
diff --git a/src/main/java/org/bukkit/craftbukkit/Main.java b/src/main/java/org/bukkit/craftbukkit/Main.java
-index 442beb8675d6d53a92fb6a5b7c2abdda2822e6fe..6aeb5c145ea26243abda693e81014f73c6abfb56 100644
+index 83784b0087e15fd5c827884b366fd7cf59213176..e469180a85e68fbcdab88e8b567aefbb072f87d3 100644
--- a/src/main/java/org/bukkit/craftbukkit/Main.java
+++ b/src/main/java/org/bukkit/craftbukkit/Main.java
@@ -159,6 +159,12 @@ public class Main {
diff --git a/patches/unapplied/server/0020-Configurable-cactus-bamboo-and-reed-growth-heights.patch b/patches/server/0019-Configurable-cactus-bamboo-and-reed-growth-heights.patch
similarity index 98%
rename from patches/unapplied/server/0020-Configurable-cactus-bamboo-and-reed-growth-heights.patch
rename to patches/server/0019-Configurable-cactus-bamboo-and-reed-growth-heights.patch
index 2fd08b41ef..2f67f3bc30 100644
--- a/patches/unapplied/server/0020-Configurable-cactus-bamboo-and-reed-growth-heights.patch
+++ b/patches/server/0019-Configurable-cactus-bamboo-and-reed-growth-heights.patch
@@ -7,7 +7,7 @@ Bamboo - Both the minimum fully-grown heights and the maximum are configurable
- Machine_Maker
diff --git a/src/main/java/net/minecraft/world/level/block/BambooStalkBlock.java b/src/main/java/net/minecraft/world/level/block/BambooStalkBlock.java
-index 0d05ad9c0b5043e58d639041cfe3fb7a27f373a3..a5d391af2c6b733d653188f4aeeec2afffd96adf 100644
+index 75754c06268d6d1b719742d127516f77ba5c1046..05a508cb457b67078ccb08bd2228a59e73701cf3 100644
--- a/src/main/java/net/minecraft/world/level/block/BambooStalkBlock.java
+++ b/src/main/java/net/minecraft/world/level/block/BambooStalkBlock.java
@@ -130,7 +130,7 @@ public class BambooStalkBlock extends Block implements BonemealableBlock {
diff --git a/patches/unapplied/server/0021-Configurable-baby-zombie-movement-speed.patch b/patches/server/0020-Configurable-baby-zombie-movement-speed.patch
similarity index 89%
rename from patches/unapplied/server/0021-Configurable-baby-zombie-movement-speed.patch
rename to patches/server/0020-Configurable-baby-zombie-movement-speed.patch
index a1d50ed485..f382282a21 100644
--- a/patches/unapplied/server/0021-Configurable-baby-zombie-movement-speed.patch
+++ b/patches/server/0020-Configurable-baby-zombie-movement-speed.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Configurable baby zombie movement speed
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 5508dd33111a8206cbda4caf9d5003574d91d371..b32e55685d2a3f571828ed3cf69cb985ccaaa931 100644
+index 883a5c7d0c842dc3c497ccd0694a77733bafeb16..9d760f3745efc1248b7817d580e5ceb451fc4096 100644
--- a/src/main/java/net/minecraft/world/entity/monster/Zombie.java
+++ b/src/main/java/net/minecraft/world/entity/monster/Zombie.java
-@@ -77,6 +77,7 @@ public class Zombie extends Monster {
+@@ -78,6 +78,7 @@ public class Zombie extends Monster {
private static final UUID SPEED_MODIFIER_BABY_UUID = UUID.fromString("B9766B59-9566-4402-BC1F-2EE2A276D836");
private static final AttributeModifier SPEED_MODIFIER_BABY = new AttributeModifier(Zombie.SPEED_MODIFIER_BABY_UUID, "Baby speed boost", 0.5D, AttributeModifier.Operation.MULTIPLY_BASE);
@@ -16,12 +16,12 @@ index 5508dd33111a8206cbda4caf9d5003574d91d371..b32e55685d2a3f571828ed3cf69cb985
private static final EntityDataAccessor DATA_BABY_ID = SynchedEntityData.defineId(Zombie.class, EntityDataSerializers.BOOLEAN);
private static final EntityDataAccessor DATA_SPECIAL_TYPE_ID = SynchedEntityData.defineId(Zombie.class, EntityDataSerializers.INT);
public static final EntityDataAccessor DATA_DROWNED_CONVERSION_ID = SynchedEntityData.defineId(Zombie.class, EntityDataSerializers.BOOLEAN);
-@@ -185,9 +186,9 @@ public class Zombie extends Monster {
+@@ -186,9 +187,9 @@ public class Zombie extends Monster {
if (this.level() != null && !this.level().isClientSide) {
AttributeInstance attributemodifiable = this.getAttribute(Attributes.MOVEMENT_SPEED);
-- attributemodifiable.removeModifier(Zombie.SPEED_MODIFIER_BABY);
-+ attributemodifiable.removeModifier(this.babyModifier); // Paper
+- attributemodifiable.removeModifier(Zombie.SPEED_MODIFIER_BABY.getId());
++ attributemodifiable.removeModifier(this.babyModifier.getId()); // Paper
if (baby) {
- attributemodifiable.addTransientModifier(Zombie.SPEED_MODIFIER_BABY);
+ attributemodifiable.addTransientModifier(this.babyModifier); // Paper
diff --git a/patches/unapplied/server/0022-Configurable-fishing-time-ranges.patch b/patches/server/0021-Configurable-fishing-time-ranges.patch
similarity index 94%
rename from patches/unapplied/server/0022-Configurable-fishing-time-ranges.patch
rename to patches/server/0021-Configurable-fishing-time-ranges.patch
index 6183a7e9d3..f47bc6f9c7 100644
--- a/patches/unapplied/server/0022-Configurable-fishing-time-ranges.patch
+++ b/patches/server/0021-Configurable-fishing-time-ranges.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] Configurable fishing time ranges
diff --git a/src/main/java/net/minecraft/world/entity/projectile/FishingHook.java b/src/main/java/net/minecraft/world/entity/projectile/FishingHook.java
-index 94ca8ae42ef02cea92c4029d219edfe69abb4ce3..4377a0f7387a09983a5580d408775f386ea5f487 100644
+index e5d9902331e3c4e461e855290a95980b41f5efe2..af6829c25fcd186adc3575d50cab6d46db9a2fac 100644
--- a/src/main/java/net/minecraft/world/entity/projectile/FishingHook.java
+++ b/src/main/java/net/minecraft/world/entity/projectile/FishingHook.java
@@ -92,6 +92,10 @@ public class FishingHook extends Projectile {
diff --git a/patches/unapplied/server/0023-Allow-nerfed-mobs-to-jump-and-take-water-damage.patch b/patches/server/0022-Allow-nerfed-mobs-to-jump-and-take-water-damage.patch
similarity index 91%
rename from patches/unapplied/server/0023-Allow-nerfed-mobs-to-jump-and-take-water-damage.patch
rename to patches/server/0022-Allow-nerfed-mobs-to-jump-and-take-water-damage.patch
index 1985235f5b..56888d4688 100644
--- a/patches/unapplied/server/0023-Allow-nerfed-mobs-to-jump-and-take-water-damage.patch
+++ b/patches/server/0022-Allow-nerfed-mobs-to-jump-and-take-water-damage.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Allow nerfed mobs to jump and take water damage
diff --git a/src/main/java/net/minecraft/world/entity/Mob.java b/src/main/java/net/minecraft/world/entity/Mob.java
-index fd7a381d6fc9436f06b5a3e3508b8a4a0f4ece66..672e78e3e9e2e53a10ad3ada895cb1bc1c324b54 100644
+index ec841a4d9a11f0d9047c202a31f944b340da33c8..ffd8b35b606452ce5d189f2761aa76eb9b56ccd6 100644
--- a/src/main/java/net/minecraft/world/entity/Mob.java
+++ b/src/main/java/net/minecraft/world/entity/Mob.java
-@@ -109,6 +109,7 @@ public abstract class Mob extends LivingEntity implements Targeting {
+@@ -111,6 +111,7 @@ public abstract class Mob extends LivingEntity implements Targeting {
private final BodyRotationControl bodyRotationControl;
protected PathNavigation navigation;
public GoalSelector goalSelector;
@@ -16,7 +16,7 @@ index fd7a381d6fc9436f06b5a3e3508b8a4a0f4ece66..672e78e3e9e2e53a10ad3ada895cb1bc
public GoalSelector targetSelector;
@Nullable
private LivingEntity target;
-@@ -868,7 +869,17 @@ public abstract class Mob extends LivingEntity implements Targeting {
+@@ -876,7 +877,17 @@ public abstract class Mob extends LivingEntity implements Targeting {
@Override
protected final void serverAiStep() {
++this.noActionTime;
diff --git a/patches/unapplied/server/0024-Add-configurable-despawn-distances-for-living-entiti.patch b/patches/server/0023-Add-configurable-despawn-distances-for-living-entiti.patch
similarity index 89%
rename from patches/unapplied/server/0024-Add-configurable-despawn-distances-for-living-entiti.patch
rename to patches/server/0023-Add-configurable-despawn-distances-for-living-entiti.patch
index b8b098bfa8..7b6e03ca42 100644
--- a/patches/unapplied/server/0024-Add-configurable-despawn-distances-for-living-entiti.patch
+++ b/patches/server/0023-Add-configurable-despawn-distances-for-living-entiti.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Add configurable despawn distances for living entities
diff --git a/src/main/java/net/minecraft/world/entity/Mob.java b/src/main/java/net/minecraft/world/entity/Mob.java
-index 672e78e3e9e2e53a10ad3ada895cb1bc1c324b54..2acc00d8afe07b4d16abb831e4ddc8f454beec4e 100644
+index ffd8b35b606452ce5d189f2761aa76eb9b56ccd6..dc9162e8fa4b5649a631d3869be7cd9776f5c7b7 100644
--- a/src/main/java/net/minecraft/world/entity/Mob.java
+++ b/src/main/java/net/minecraft/world/entity/Mob.java
-@@ -844,14 +844,14 @@ public abstract class Mob extends LivingEntity implements Targeting {
+@@ -852,14 +852,14 @@ public abstract class Mob extends LivingEntity implements Targeting {
if (entityhuman != null) {
double d0 = entityhuman.distanceToSqr((Entity) this);
diff --git a/patches/unapplied/server/0025-Allow-for-toggling-of-spawn-chunks.patch b/patches/server/0024-Allow-for-toggling-of-spawn-chunks.patch
similarity index 91%
rename from patches/unapplied/server/0025-Allow-for-toggling-of-spawn-chunks.patch
rename to patches/server/0024-Allow-for-toggling-of-spawn-chunks.patch
index 042396c575..905a52fbd1 100644
--- a/patches/unapplied/server/0025-Allow-for-toggling-of-spawn-chunks.patch
+++ b/patches/server/0024-Allow-for-toggling-of-spawn-chunks.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] Allow for toggling of spawn chunks
diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java
-index 5988c0847af4e8f0094328e91f736f25d567db60..fb78a91d1ab77f909823422c6d4e2ef7ed10c9c3 100644
+index d87f02c748fe2e5b4ea251f6691e8907a152cb6d..f21ba175538436e59c45d5350ef7b2605ed96775 100644
--- a/src/main/java/net/minecraft/world/level/Level.java
+++ b/src/main/java/net/minecraft/world/level/Level.java
@@ -261,6 +261,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable {
diff --git a/patches/unapplied/server/0026-Drop-falling-block-and-tnt-entities-at-the-specified.patch b/patches/server/0025-Drop-falling-block-and-tnt-entities-at-the-specified.patch
similarity index 97%
rename from patches/unapplied/server/0026-Drop-falling-block-and-tnt-entities-at-the-specified.patch
rename to patches/server/0025-Drop-falling-block-and-tnt-entities-at-the-specified.patch
index 855d87bf11..f421a6a46f 100644
--- a/patches/unapplied/server/0026-Drop-falling-block-and-tnt-entities-at-the-specified.patch
+++ b/patches/server/0025-Drop-falling-block-and-tnt-entities-at-the-specified.patch
@@ -6,7 +6,7 @@ Subject: [PATCH] Drop falling block and tnt entities at the specified height
Co-authored-by: Jake Potrebic
diff --git a/src/main/java/net/minecraft/world/entity/item/FallingBlockEntity.java b/src/main/java/net/minecraft/world/entity/item/FallingBlockEntity.java
-index 99bfbe282fe98f23cc73f082628dab740eda944b..2d32a2b41100b0e32ec64c8724734f22c7c883e2 100644
+index fd16e26875ac4adfb76affd81724dedafe5b4130..57323813e26964af991dc9aead35fc86f23b602a 100644
--- a/src/main/java/net/minecraft/world/entity/item/FallingBlockEntity.java
+++ b/src/main/java/net/minecraft/world/entity/item/FallingBlockEntity.java
@@ -142,6 +142,16 @@ public class FallingBlockEntity extends Entity {
diff --git a/patches/unapplied/server/0027-Show-Paper-in-client-crashes-server-lists-and-Mojang.patch b/patches/server/0026-Show-Paper-in-client-crashes-server-lists-and-Mojang.patch
similarity index 85%
rename from patches/unapplied/server/0027-Show-Paper-in-client-crashes-server-lists-and-Mojang.patch
rename to patches/server/0026-Show-Paper-in-client-crashes-server-lists-and-Mojang.patch
index c49243de63..111ee4632d 100644
--- a/patches/unapplied/server/0027-Show-Paper-in-client-crashes-server-lists-and-Mojang.patch
+++ b/patches/server/0026-Show-Paper-in-client-crashes-server-lists-and-Mojang.patch
@@ -6,10 +6,10 @@ Subject: [PATCH] Show 'Paper' in client crashes, server lists, and Mojang
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
-index f46ae930c6d1609dbefb56e67853f6e8504b749f..787f32156b02063adf6426b7430da4c4956b759c 100644
+index bacb6e1f1e4faa95490bf5d6d977e9d73bdacef5..9f17f3aa637c9babcf876ca92a668e3ed19c92ed 100644
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
-@@ -1457,7 +1457,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop withinDistance(double x, double y, double z, double max) {
double d4 = max * max;
diff --git a/src/main/java/net/minecraft/world/entity/Mob.java b/src/main/java/net/minecraft/world/entity/Mob.java
-index 2acc00d8afe07b4d16abb831e4ddc8f454beec4e..1bdfc9c66538d9fd689bdccc1f4bc2dee4b5e7c5 100644
+index dc9162e8fa4b5649a631d3869be7cd9776f5c7b7..873a96693110982600d3e7979489fb00f3cd7941 100644
--- a/src/main/java/net/minecraft/world/entity/Mob.java
+++ b/src/main/java/net/minecraft/world/entity/Mob.java
-@@ -840,7 +840,7 @@ public abstract class Mob extends LivingEntity implements Targeting {
+@@ -848,7 +848,7 @@ public abstract class Mob extends LivingEntity implements Targeting {
if (this.level().getDifficulty() == Difficulty.PEACEFUL && this.shouldDespawnInPeaceful()) {
this.discard();
} else if (!this.isPersistenceRequired() && !this.requiresCustomPersistence()) {
@@ -47,10 +47,10 @@ index c7ab59aa0e2fd0f3e7252647ddb25b82ac604830..8f20239f3ef7ebe41fac8ee6e024c36d
@Override
diff --git a/src/main/java/net/minecraft/world/entity/monster/Silverfish.java b/src/main/java/net/minecraft/world/entity/monster/Silverfish.java
-index 790a9671ad381335c14aac114877f8f6cbdc25a0..754bad0bd38b8a356403f4c90de26de445cbf3c7 100644
+index 96181e8925aef7f3d0a2010305caf1f6d9bcfcc9..6f452605e9dc9ebd9980eae9fdeea34417a37a88 100644
--- a/src/main/java/net/minecraft/world/entity/monster/Silverfish.java
+++ b/src/main/java/net/minecraft/world/entity/monster/Silverfish.java
-@@ -130,7 +130,7 @@ public class Silverfish extends Monster {
+@@ -127,7 +127,7 @@ public class Silverfish extends Monster {
if (checkAnyLightMonsterSpawnRules(type, world, spawnReason, pos, random)) {
Player entityhuman = world.getNearestPlayer((double) pos.getX() + 0.5D, (double) pos.getY() + 0.5D, (double) pos.getZ() + 0.5D, 5.0D, true);
@@ -60,10 +60,10 @@ index 790a9671ad381335c14aac114877f8f6cbdc25a0..754bad0bd38b8a356403f4c90de26de4
return false;
}
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 b32e55685d2a3f571828ed3cf69cb985ccaaa931..86dc8bdfdc4eabef2266f3409366b373fb0ae13d 100644
+index 9d760f3745efc1248b7817d580e5ceb451fc4096..61ecf5c51fbdf38ec5513453c2de037489fd8c7e 100644
--- a/src/main/java/net/minecraft/world/entity/monster/Zombie.java
+++ b/src/main/java/net/minecraft/world/entity/monster/Zombie.java
-@@ -325,7 +325,7 @@ public class Zombie extends Monster {
+@@ -326,7 +326,7 @@ public class Zombie extends Monster {
if (NaturalSpawner.isSpawnPositionOk(entitypositiontypes_surface, this.level(), blockposition, entitytypes) && SpawnPlacements.checkSpawnRules(entitytypes, worldserver, MobSpawnType.REINFORCEMENT, blockposition, this.level().random)) {
entityzombie.setPos((double) i1, (double) j1, (double) k1);
@@ -73,10 +73,10 @@ index b32e55685d2a3f571828ed3cf69cb985ccaaa931..86dc8bdfdc4eabef2266f3409366b373
entityzombie.finalizeSpawn(worldserver, this.level().getCurrentDifficultyAt(entityzombie.blockPosition()), MobSpawnType.REINFORCEMENT, (SpawnGroupData) null, (CompoundTag) null);
worldserver.addFreshEntityWithPassengers(entityzombie, CreatureSpawnEvent.SpawnReason.REINFORCEMENTS); // CraftBukkit
diff --git a/src/main/java/net/minecraft/world/entity/player/Player.java b/src/main/java/net/minecraft/world/entity/player/Player.java
-index a76f1ed7b8dc1aacda987931772cb3bf8f29be42..c20753645585143421eb544a03884f0765eafb8b 100644
+index d359d4b6f9db4841148428544c4c9d6ca9f8bdda..06522d8d3b7e0d455a42b10ec5004cc82e0d888d 100644
--- a/src/main/java/net/minecraft/world/entity/player/Player.java
+++ b/src/main/java/net/minecraft/world/entity/player/Player.java
-@@ -183,6 +183,9 @@ public abstract class Player extends LivingEntity {
+@@ -184,6 +184,9 @@ public abstract class Player extends LivingEntity {
@Nullable
public FishingHook fishing;
protected float hurtDir;
@@ -100,10 +100,10 @@ index ad5d8db9fb44f8e47edc82f9ba62872802bfa380..124703a7c043b6c3b651fa1a81c5ba3e
public void clientTick(Level world, BlockPos pos) {
diff --git a/src/main/java/net/minecraft/world/level/EntityGetter.java b/src/main/java/net/minecraft/world/level/EntityGetter.java
-index be6e3e21ad62da01e5e2dd78e300cbc8efdbeb42..ea98625fe7c00743b8df74a24e6d4b75df4189a5 100644
+index b6a3c75b84d9f768afee33aa0f226207b307c1c0..a583599e3b49d5ded871252646904a80825a01ff 100644
--- a/src/main/java/net/minecraft/world/level/EntityGetter.java
+++ b/src/main/java/net/minecraft/world/level/EntityGetter.java
-@@ -82,6 +82,11 @@ public interface EntityGetter {
+@@ -70,6 +70,11 @@ public interface EntityGetter {
}
}
@@ -115,7 +115,7 @@ index be6e3e21ad62da01e5e2dd78e300cbc8efdbeb42..ea98625fe7c00743b8df74a24e6d4b75
@Nullable
default Player getNearestPlayer(double x, double y, double z, double maxDistance, @Nullable Predicate targetPredicate) {
double d = -1.0D;
-@@ -111,6 +116,20 @@ public interface EntityGetter {
+@@ -99,6 +104,20 @@ public interface EntityGetter {
return this.getNearestPlayer(x, y, z, maxDistance, predicate);
}
@@ -137,21 +137,18 @@ index be6e3e21ad62da01e5e2dd78e300cbc8efdbeb42..ea98625fe7c00743b8df74a24e6d4b75
for(Player player : this.players()) {
if (EntitySelector.NO_SPECTATORS.test(player) && EntitySelector.LIVING_ENTITY_STILL_ALIVE.test(player)) {
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
-index 49ca3592012cca981b96434c9807440672a8c165..2b84eca45352db88fb58a981b5caf67b88c92e9e 100644
+index 30e77f21bfc017a6a715ea1ff0ffddea0b260ac5..be014733d23c0b03fc8b13792caaaf96ac0d33e6 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
-@@ -2229,8 +2229,20 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
- @Override
- public String getLocale() {
- return this.getHandle().locale;
-+
-+ }
-+
+@@ -2205,6 +2205,17 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
+ return this.getHandle().language;
+ }
+
+ // Paper start
+ public void setAffectsSpawning(boolean affects) {
+ this.getHandle().affectsSpawning = affects;
- }
-
++ }
++
+ @Override
+ public boolean getAffectsSpawning() {
+ return this.getHandle().affectsSpawning;
diff --git a/patches/unapplied/server/0031-Further-improve-server-tick-loop.patch b/patches/server/0030-Further-improve-server-tick-loop.patch
similarity index 91%
rename from patches/unapplied/server/0031-Further-improve-server-tick-loop.patch
rename to patches/server/0030-Further-improve-server-tick-loop.patch
index fc8dca61e2..0bfd08d788 100644
--- a/patches/unapplied/server/0031-Further-improve-server-tick-loop.patch
+++ b/patches/server/0030-Further-improve-server-tick-loop.patch
@@ -12,10 +12,10 @@ Previous implementation did not calculate TPS correctly.
Switch to a realistic rolling average and factor in std deviation as an extra reporting variable
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
-index 787f32156b02063adf6426b7430da4c4956b759c..be23196f7bf439c54218debb517dd3f37f6dea6f 100644
+index 9f17f3aa637c9babcf876ca92a668e3ed19c92ed..baf17f4fd1c3901b5f2c57c197721df7cf6e51cb 100644
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
-@@ -282,7 +282,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop processQueue = new java.util.concurrent.ConcurrentLinkedQueue();
public int autosavePeriod;
public Commands vanillaCommandDispatcher;
-@@ -291,7 +291,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop 5000L && this.nextTickTime - this.lastOverloadWarning >= 30000L) { // CraftBukkit
long j = i / 50L;
-@@ -987,12 +1039,18 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop
diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java
-index 98933377d46b2dd69d5d477e7f1d6ddff96ee2b4..30360e9e8787b893a360ba899d8fac657634de75 100644
+index 706af1c9ec5c115e727753bf75d1fda01accaeca..06e8a82d2001e2a8dd381f3be20ee7442e1d1178 100644
--- a/src/main/java/net/minecraft/world/entity/Entity.java
+++ b/src/main/java/net/minecraft/world/entity/Entity.java
-@@ -715,7 +715,11 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource {
+@@ -663,7 +663,11 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource {
}
public void checkBelowWorld() {
diff --git a/patches/unapplied/server/0036-Check-online-mode-before-converting-and-renaming-pla.patch b/patches/server/0035-Check-online-mode-before-converting-and-renaming-pla.patch
similarity index 100%
rename from patches/unapplied/server/0036-Check-online-mode-before-converting-and-renaming-pla.patch
rename to patches/server/0035-Check-online-mode-before-converting-and-renaming-pla.patch
diff --git a/patches/unapplied/server/0037-Always-tick-falling-blocks.patch b/patches/server/0036-Always-tick-falling-blocks.patch
similarity index 90%
rename from patches/unapplied/server/0037-Always-tick-falling-blocks.patch
rename to patches/server/0036-Always-tick-falling-blocks.patch
index 2e80c8ca6a..694e377a2c 100644
--- a/patches/unapplied/server/0037-Always-tick-falling-blocks.patch
+++ b/patches/server/0036-Always-tick-falling-blocks.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] Always tick falling blocks
diff --git a/src/main/java/org/spigotmc/ActivationRange.java b/src/main/java/org/spigotmc/ActivationRange.java
-index 6606a118e7bff01aa51440aea7540ec9feec6cc5..1d9ce6dae17ff572d4528971c69c63d0f85b313c 100644
+index ebd48f9977553174b14bdc7429c07d8352f5a297..d9149580408094784794bc0575a00bebe2e7b4d4 100644
--- a/src/main/java/org/spigotmc/ActivationRange.java
+++ b/src/main/java/org/spigotmc/ActivationRange.java
@@ -89,6 +89,7 @@ public class ActivationRange
diff --git a/patches/unapplied/server/0038-Configurable-end-credits.patch b/patches/server/0037-Configurable-end-credits.patch
similarity index 86%
rename from patches/unapplied/server/0038-Configurable-end-credits.patch
rename to patches/server/0037-Configurable-end-credits.patch
index 0b37e68c63..84af64e3f6 100644
--- a/patches/unapplied/server/0038-Configurable-end-credits.patch
+++ b/patches/server/0037-Configurable-end-credits.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Configurable end credits
diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java
-index 5a18f4649b64d47f429eb6c1dbb6238aab3eacd2..1136a3fe673680fcaca9b9768543ffada040153f 100644
+index b944cda955c5660d3a9b84e9c92c2b19337a027a..e978a91636192cd00ef8bab9b8411fda39aebbb7 100644
--- a/src/main/java/net/minecraft/server/level/ServerPlayer.java
+++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java
-@@ -1066,6 +1066,7 @@ public class ServerPlayer extends Player {
+@@ -1025,6 +1025,7 @@ public class ServerPlayer extends Player {
this.unRide();
this.serverLevel().removePlayerImmediately(this, Entity.RemovalReason.CHANGED_DIMENSION);
if (!this.wonGame) {
diff --git a/patches/unapplied/server/0039-Fix-lag-from-explosions-processing-dead-entities.patch b/patches/server/0038-Fix-lag-from-explosions-processing-dead-entities.patch
similarity index 85%
rename from patches/unapplied/server/0039-Fix-lag-from-explosions-processing-dead-entities.patch
rename to patches/server/0038-Fix-lag-from-explosions-processing-dead-entities.patch
index 0e8f302271..6f5230d060 100644
--- a/patches/unapplied/server/0039-Fix-lag-from-explosions-processing-dead-entities.patch
+++ b/patches/server/0038-Fix-lag-from-explosions-processing-dead-entities.patch
@@ -5,15 +5,15 @@ Subject: [PATCH] Fix lag from explosions processing dead entities
diff --git a/src/main/java/net/minecraft/world/level/Explosion.java b/src/main/java/net/minecraft/world/level/Explosion.java
-index 31bc6aa727a1828cd353a0bdf51e40baabb50203..e360022498b91a8371b33d84bf6fff96c503999d 100644
+index 280ee4747526c05a02d556908b8a3d59a4ccad9e..4f2e06dab92085edd8f98415272cf77952e4888f 100644
--- a/src/main/java/net/minecraft/world/level/Explosion.java
+++ b/src/main/java/net/minecraft/world/level/Explosion.java
-@@ -202,7 +202,7 @@ public class Explosion {
+@@ -203,7 +203,7 @@ public class Explosion {
int i1 = Mth.floor(this.y + (double) f2 + 1.0D);
int j1 = Mth.floor(this.z - (double) f2 - 1.0D);
int k1 = Mth.floor(this.z + (double) f2 + 1.0D);
- List list = this.level.getEntities(this.source, new AABB((double) i, (double) l, (double) j1, (double) j, (double) i1, (double) k1));
+ List list = this.level.getEntities(this.source, new AABB((double) i, (double) l, (double) j1, (double) j, (double) i1, (double) k1), (com.google.common.base.Predicate) entity -> entity.isAlive() && !entity.isSpectator()); // Paper - Fix lag from explosions processing dead entities
Vec3 vec3d = new Vec3(this.x, this.y, this.z);
+ Iterator iterator = list.iterator();
- for (int l1 = 0; l1 < list.size(); ++l1) {
diff --git a/patches/unapplied/server/0040-Optimize-explosions.patch b/patches/server/0039-Optimize-explosions.patch
similarity index 92%
rename from patches/unapplied/server/0040-Optimize-explosions.patch
rename to patches/server/0039-Optimize-explosions.patch
index 82db2602a5..57442bafdb 100644
--- a/patches/unapplied/server/0040-Optimize-explosions.patch
+++ b/patches/server/0039-Optimize-explosions.patch
@@ -10,10 +10,10 @@ This patch adds a per-tick cache that is used for storing and retrieving
an entity's exposure during an explosion.
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
-index be23196f7bf439c54218debb517dd3f37f6dea6f..ebfc20247ac5a548e6616a099b8885db9c7a8d25 100644
+index baf17f4fd1c3901b5f2c57c197721df7cf6e51cb..d57ac9e0b58ae30ade85c07a6d5d8af922ffea24 100644
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
-@@ -1403,6 +1403,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop 0 && this.random.nextInt(this.spigotConfig.thunderChance) == 0) { // Spigot
+ if (!this.paperConfig().environment.disableThunder && flag && this.isThundering() && this.spigotConfig.thunderChance > 0 && this.random.nextInt(this.spigotConfig.thunderChance) == 0) { // Spigot // Paper - disable thunder
- blockposition = this.findLightningTargetAround(this.getBlockRandomPos(j, 0, k, 15));
+ BlockPos blockposition = this.findLightningTargetAround(this.getBlockRandomPos(j, 0, k, 15));
+
if (this.isRainingAt(blockposition)) {
- DifficultyInstance difficultydamagescaler = this.getCurrentDifficultyAt(blockposition);
diff --git a/patches/server/0042-Disable-ice-and-snow.patch b/patches/server/0042-Disable-ice-and-snow.patch
new file mode 100644
index 0000000000..06ba40fcce
--- /dev/null
+++ b/patches/server/0042-Disable-ice-and-snow.patch
@@ -0,0 +1,24 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: Sudzzy
+Date: Wed, 2 Mar 2016 14:57:24 -0600
+Subject: [PATCH] Disable ice and snow
+
+
+diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java
+index 521da94115387efb389569fce0765dacd86e95c6..511f27358cad1fa067497914c61855ee6ea3846a 100644
+--- a/src/main/java/net/minecraft/server/level/ServerLevel.java
++++ b/src/main/java/net/minecraft/server/level/ServerLevel.java
+@@ -623,11 +623,13 @@ public class ServerLevel extends Level implements WorldGenLevel {
+
+ gameprofilerfiller.popPush("iceandsnow");
+
++ if (!this.paperConfig().environment.disableIceAndSnow) { // Paper
+ for (int l = 0; l < randomTickSpeed; ++l) {
+ if (this.random.nextInt(48) == 0) {
+ this.tickIceAndSnow(flag, this.getBlockRandomPos(j, 0, k, 15));
+ }
+ }
++ } // Paper
+
+ gameprofilerfiller.popPush("tickBlocks");
+ timings.chunkTicksBlocks.startTiming(); // Paper
diff --git a/patches/unapplied/server/0044-Configurable-mob-spawner-tick-rate.patch b/patches/server/0043-Configurable-mob-spawner-tick-rate.patch
similarity index 100%
rename from patches/unapplied/server/0044-Configurable-mob-spawner-tick-rate.patch
rename to patches/server/0043-Configurable-mob-spawner-tick-rate.patch
diff --git a/patches/server/0044-Implement-PlayerLocaleChangeEvent.patch b/patches/server/0044-Implement-PlayerLocaleChangeEvent.patch
new file mode 100644
index 0000000000..a6868bc957
--- /dev/null
+++ b/patches/server/0044-Implement-PlayerLocaleChangeEvent.patch
@@ -0,0 +1,56 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: Isaac Moore
+Date: Tue, 19 Apr 2016 14:09:31 -0500
+Subject: [PATCH] Implement PlayerLocaleChangeEvent
+
+
+diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java
+index e978a91636192cd00ef8bab9b8411fda39aebbb7..32ecdb19c377952b553297548c7f3ff32054ee2a 100644
+--- a/src/main/java/net/minecraft/server/level/ServerPlayer.java
++++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java
+@@ -214,7 +214,7 @@ public class ServerPlayer extends Player {
+ private int levitationStartTime;
+ private boolean disconnected;
+ private int requestedViewDistance;
+- public String language = "en_us"; // CraftBukkit - default
++ public String language = null; // CraftBukkit - default // Paper - default to null
+ public java.util.Locale adventure$locale = java.util.Locale.US; // Paper
+ @Nullable
+ private Vec3 startingToFallPosition;
+@@ -264,7 +264,7 @@ public class ServerPlayer extends Player {
+ this.lastActionTime = Util.getMillis();
+ this.recipeBook = new ServerRecipeBook();
+ this.requestedViewDistance = 2;
+- this.language = "en_us";
++ this.language = null; // Paper - default to null
+ this.lastSectionPos = SectionPos.of(0, 0, 0);
+ this.chunkTrackingView = ChunkTrackingView.EMPTY;
+ this.respawnDimension = Level.OVERWORLD;
+@@ -1818,9 +1818,10 @@ public class ServerPlayer extends Player {
+ PlayerChangedMainHandEvent event = new PlayerChangedMainHandEvent(this.getBukkitEntity(), getMainArm() == HumanoidArm.LEFT ? MainHand.LEFT : MainHand.RIGHT);
+ this.server.server.getPluginManager().callEvent(event);
+ }
+- if (!this.language.equals(clientOptions.language())) {
++ if (this.language == null || !this.language.equals(clientOptions.language())) { // Paper
+ PlayerLocaleChangeEvent event = new PlayerLocaleChangeEvent(this.getBukkitEntity(), clientOptions.language());
+ this.server.server.getPluginManager().callEvent(event);
++ this.server.server.getPluginManager().callEvent(new com.destroystokyo.paper.event.player.PlayerLocaleChangeEvent(this.getBukkitEntity(), this.language, clientOptions.language())); // Paper
+ }
+ // CraftBukkit end
+ this.language = clientOptions.language();
+diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
+index a6eca427d04cfbdfb8af277a72e5866e7c14d30f..a67a3f13c2b142205b76a6ff478a606fe7546925 100644
+--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
+@@ -2203,7 +2203,10 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
+
+ @Override
+ public String getLocale() {
+- return this.getHandle().language;
++ // Paper start - Locale change event
++ final String locale = this.getHandle().language;
++ return locale != null ? locale : "en_us";
++ // Paper end
+ }
+
+ // Paper start
diff --git a/patches/unapplied/server/0046-Add-BeaconEffectEvent.patch b/patches/server/0045-Add-BeaconEffectEvent.patch
similarity index 91%
rename from patches/unapplied/server/0046-Add-BeaconEffectEvent.patch
rename to patches/server/0045-Add-BeaconEffectEvent.patch
index 057cc87f40..55ce19b8a7 100644
--- a/patches/unapplied/server/0046-Add-BeaconEffectEvent.patch
+++ b/patches/server/0045-Add-BeaconEffectEvent.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Add BeaconEffectEvent
diff --git a/src/main/java/net/minecraft/world/level/block/entity/BeaconBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/BeaconBlockEntity.java
-index ff49285fe50e8361c2d4529bf1dda5b54a90e3fe..8b79df496e1fad57e8c5c0aa97d0d84ab0deed1e 100644
+index 9fb27f93a7ccbf64f9babf19f626d1f45b1c7103..18349957bd6d1a4bc21aff781a791f912dddff1d 100644
--- a/src/main/java/net/minecraft/world/level/block/entity/BeaconBlockEntity.java
+++ b/src/main/java/net/minecraft/world/level/block/entity/BeaconBlockEntity.java
-@@ -41,6 +41,10 @@ import net.minecraft.world.phys.AABB;
+@@ -43,6 +43,10 @@ import net.minecraft.world.phys.AABB;
import org.bukkit.craftbukkit.potion.CraftPotionUtil;
import org.bukkit.potion.PotionEffect;
// CraftBukkit end
@@ -19,7 +19,7 @@ index ff49285fe50e8361c2d4529bf1dda5b54a90e3fe..8b79df496e1fad57e8c5c0aa97d0d84a
public class BeaconBlockEntity extends BlockEntity implements MenuProvider, Nameable {
-@@ -280,15 +284,23 @@ public class BeaconBlockEntity extends BlockEntity implements MenuProvider, Name
+@@ -289,15 +293,23 @@ public class BeaconBlockEntity extends BlockEntity implements MenuProvider, Name
}
}
@@ -47,7 +47,7 @@ index ff49285fe50e8361c2d4529bf1dda5b54a90e3fe..8b79df496e1fad57e8c5c0aa97d0d84a
}
}
}
-@@ -311,10 +323,10 @@ public class BeaconBlockEntity extends BlockEntity implements MenuProvider, Name
+@@ -320,10 +332,10 @@ public class BeaconBlockEntity extends BlockEntity implements MenuProvider, Name
int j = BeaconBlockEntity.getLevel(beaconLevel);
List list = BeaconBlockEntity.getHumansInRange(world, pos, beaconLevel);
diff --git a/patches/unapplied/server/0047-Configurable-container-update-tick-rate.patch b/patches/server/0046-Configurable-container-update-tick-rate.patch
similarity index 81%
rename from patches/unapplied/server/0047-Configurable-container-update-tick-rate.patch
rename to patches/server/0046-Configurable-container-update-tick-rate.patch
index a9aa369b49..3106a4b62e 100644
--- a/patches/unapplied/server/0047-Configurable-container-update-tick-rate.patch
+++ b/patches/server/0046-Configurable-container-update-tick-rate.patch
@@ -5,18 +5,18 @@ Subject: [PATCH] Configurable container update tick rate
diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java
-index f157646156a659d0b87b1f72fd0d1d06d66bc543..9e182c4cdf54c9ca7701660df72052d5c8936a55 100644
+index 32ecdb19c377952b553297548c7f3ff32054ee2a..d90748aab21adf9c7f463e31e7d7eb5f9bc0bbbd 100644
--- a/src/main/java/net/minecraft/server/level/ServerPlayer.java
+++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java
-@@ -241,6 +241,7 @@ public class ServerPlayer extends Player {
+@@ -239,6 +239,7 @@ public class ServerPlayer extends Player {
+ private RemoteChatSession chatSession;
private int containerCounter;
- public int latency;
public boolean wonGame;
+ private int containerUpdateDelay; // Paper
// CraftBukkit start
public String displayName;
-@@ -672,7 +673,12 @@ public class ServerPlayer extends Player {
+@@ -631,7 +632,12 @@ public class ServerPlayer extends Player {
--this.invulnerableTime;
}
diff --git a/patches/unapplied/server/0048-Use-UserCache-for-player-heads.patch b/patches/server/0047-Use-UserCache-for-player-heads.patch
similarity index 76%
rename from patches/unapplied/server/0048-Use-UserCache-for-player-heads.patch
rename to patches/server/0047-Use-UserCache-for-player-heads.patch
index 9754d03580..d4024986af 100644
--- a/patches/unapplied/server/0048-Use-UserCache-for-player-heads.patch
+++ b/patches/server/0047-Use-UserCache-for-player-heads.patch
@@ -5,19 +5,19 @@ Subject: [PATCH] Use UserCache for player heads
diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaSkull.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaSkull.java
-index 30865eece58ba2f3c991f9d373a128ada3385b4f..85b9baad074634a2f21c15adbb393ebc5924bdd8 100644
+index 0a6003248178d239c8b9a81a558f6bcf1173f00a..f8e2315845b15af230f43521b53f943ee58b9117 100644
--- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaSkull.java
+++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaSkull.java
-@@ -208,7 +208,13 @@ class CraftMetaSkull extends CraftMetaItem implements SkullMeta {
+@@ -211,7 +211,13 @@ class CraftMetaSkull extends CraftMetaItem implements SkullMeta {
if (name == null) {
this.setProfile(null);
} else {
-- this.setProfile(new GameProfile(null, name));
+- this.setProfile(new CraftGameProfile(null, name));
+ // Paper start - Use Online Players Skull
+ GameProfile newProfile = null;
+ net.minecraft.server.level.ServerPlayer player = net.minecraft.server.MinecraftServer.getServer().getPlayerList().getPlayerByName(name);
+ if (player != null) newProfile = player.getGameProfile();
-+ if (newProfile == null) newProfile = new GameProfile(null, name);
++ if (newProfile == null) newProfile = new CraftGameProfile(null, name);
+ this.setProfile(newProfile);
+ // Paper end
}
diff --git a/patches/unapplied/server/0049-Disable-spigot-tick-limiters.patch b/patches/server/0048-Disable-spigot-tick-limiters.patch
similarity index 88%
rename from patches/unapplied/server/0049-Disable-spigot-tick-limiters.patch
rename to patches/server/0048-Disable-spigot-tick-limiters.patch
index f40564a8ea..0920c8b50e 100644
--- a/patches/unapplied/server/0049-Disable-spigot-tick-limiters.patch
+++ b/patches/server/0048-Disable-spigot-tick-limiters.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Disable spigot tick limiters
diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java
-index da553430864689c426ad2c1dd74ad7d1134ffbae..78041052d7ab2e6b60405ce7e02468458650db22 100644
+index 0a7a354c085655c243fdf94c7dc82cdc95b3987a..42e81640354c2679570823347b28ee1155e7a00e 100644
--- a/src/main/java/net/minecraft/world/level/Level.java
+++ b/src/main/java/net/minecraft/world/level/Level.java
-@@ -694,9 +694,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable {
+@@ -689,9 +689,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable {
// Spigot start
// Iterator iterator = this.blockEntityTickers.iterator();
int tilesThisCycle = 0;
diff --git a/patches/unapplied/server/0050-Add-PlayerInitialSpawnEvent.patch b/patches/server/0049-Add-PlayerInitialSpawnEvent.patch
similarity index 89%
rename from patches/unapplied/server/0050-Add-PlayerInitialSpawnEvent.patch
rename to patches/server/0049-Add-PlayerInitialSpawnEvent.patch
index 99d9a71065..10cdd4b026 100644
--- a/patches/unapplied/server/0050-Add-PlayerInitialSpawnEvent.patch
+++ b/patches/server/0049-Add-PlayerInitialSpawnEvent.patch
@@ -12,10 +12,10 @@ improve setPosition to use raw
public net.minecraft.world.entity.Entity setRot(FF)V
diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java
-index b40ddd8fb3e2d2bafaa2ece46714815d0d6d5f75..9e835d63e1592fc064b73c51eecd8b84cbedfa33 100644
+index b30128b77d2fe8a8c1db9b5746aab537a9a25430..fe200718aedcd71c6dc9b9cea10a844551a78324 100644
--- a/src/main/java/net/minecraft/server/players/PlayerList.java
+++ b/src/main/java/net/minecraft/server/players/PlayerList.java
-@@ -240,7 +240,7 @@ public abstract class PlayerList {
+@@ -228,7 +228,7 @@ public abstract class PlayerList {
// Spigot start - spawn location event
Player spawnPlayer = player.getBukkitEntity();
@@ -24,7 +24,7 @@ index b40ddd8fb3e2d2bafaa2ece46714815d0d6d5f75..9e835d63e1592fc064b73c51eecd8b84
this.cserver.getPluginManager().callEvent(ev);
Location loc = ev.getSpawnLocation();
-@@ -248,7 +248,10 @@ public abstract class PlayerList {
+@@ -236,7 +236,10 @@ public abstract class PlayerList {
player.spawnIn(worldserver1);
player.gameMode.setLevel((ServerLevel) player.level());
diff --git a/patches/unapplied/server/0051-Configurable-Disabling-Cat-Chest-Detection.patch b/patches/server/0050-Configurable-Disabling-Cat-Chest-Detection.patch
similarity index 100%
rename from patches/unapplied/server/0051-Configurable-Disabling-Cat-Chest-Detection.patch
rename to patches/server/0050-Configurable-Disabling-Cat-Chest-Detection.patch
diff --git a/patches/unapplied/server/0043-Disable-ice-and-snow.patch b/patches/unapplied/server/0043-Disable-ice-and-snow.patch
deleted file mode 100644
index 2edea71126..0000000000
--- a/patches/unapplied/server/0043-Disable-ice-and-snow.patch
+++ /dev/null
@@ -1,19 +0,0 @@
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: Sudzzy
-Date: Wed, 2 Mar 2016 14:57:24 -0600
-Subject: [PATCH] Disable ice and snow
-
-
-diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java
-index a2a7568499bddb3c515ef8155e6e7e827f2a5b97..e253531f5da93d2a5b328e1af6eef2a6d9a72bc1 100644
---- a/src/main/java/net/minecraft/server/level/ServerLevel.java
-+++ b/src/main/java/net/minecraft/server/level/ServerLevel.java
-@@ -864,7 +864,7 @@ public class ServerLevel extends Level implements WorldGenLevel {
- int l;
- int i1;
-
-- if (this.random.nextInt(16) == 0) {
-+ if (!this.paperConfig().environment.disableIceAndSnow && this.random.nextInt(16) == 0) { // Paper - Disable ice and snow
- blockposition = this.getHeightmapPos(Heightmap.Types.MOTION_BLOCKING, this.getBlockRandomPos(j, 0, k, 15));
- BlockPos blockposition1 = blockposition.below();
- Biome biomebase = (Biome) this.getBiome(blockposition).value();
diff --git a/patches/unapplied/server/0045-Implement-PlayerLocaleChangeEvent.patch b/patches/unapplied/server/0045-Implement-PlayerLocaleChangeEvent.patch
deleted file mode 100644
index 6879989dba..0000000000
--- a/patches/unapplied/server/0045-Implement-PlayerLocaleChangeEvent.patch
+++ /dev/null
@@ -1,48 +0,0 @@
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: Isaac Moore
-Date: Tue, 19 Apr 2016 14:09:31 -0500
-Subject: [PATCH] Implement PlayerLocaleChangeEvent
-
-
-diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java
-index 1136a3fe673680fcaca9b9768543ffada040153f..f157646156a659d0b87b1f72fd0d1d06d66bc543 100644
---- a/src/main/java/net/minecraft/server/level/ServerPlayer.java
-+++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java
-@@ -1853,7 +1853,7 @@ public class ServerPlayer extends Player {
- }
- }
-
-- public String locale = "en_us"; // CraftBukkit - add, lowercase
-+ public String locale = null; // CraftBukkit - add, lowercase // Paper - default to null
- public java.util.Locale adventure$locale = java.util.Locale.US; // Paper
- public void updateOptions(ServerboundClientInformationPacket packet) {
- // CraftBukkit start
-@@ -1861,9 +1861,10 @@ public class ServerPlayer extends Player {
- PlayerChangedMainHandEvent event = new PlayerChangedMainHandEvent(this.getBukkitEntity(), getMainArm() == HumanoidArm.LEFT ? MainHand.LEFT : MainHand.RIGHT);
- this.server.server.getPluginManager().callEvent(event);
- }
-- if (!this.locale.equals(packet.language)) {
-+ if (this.locale == null || !this.locale.equals(packet.language)) { // Paper - check for null
- PlayerLocaleChangeEvent event = new PlayerLocaleChangeEvent(this.getBukkitEntity(), packet.language);
- this.server.server.getPluginManager().callEvent(event);
-+ this.server.server.getPluginManager().callEvent(new com.destroystokyo.paper.event.player.PlayerLocaleChangeEvent(this.getBukkitEntity(), this.locale, packet.language)); // Paper
- }
- this.locale = packet.language;
- // Paper start
-diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
-index 1486d48e3c710ec733cd7cc6c07fb6e11d1e1d93..f5b05eb97f059cfb4d6d22d0a180c5fd8a203f66 100644
---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
-+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
-@@ -2229,8 +2229,10 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
-
- @Override
- public String getLocale() {
-- return this.getHandle().locale;
--
-+ // Paper start - Locale change event
-+ final String locale = this.getHandle().locale;
-+ return locale != null ? locale : "en_us";
-+ // Paper end
- }
-
- // Paper start
diff --git a/patches/unapplied/server/0019-Rewrite-chunk-system.patch b/patches/unapplied/skipped/0019-Rewrite-chunk-system.patch
similarity index 100%
rename from patches/unapplied/server/0019-Rewrite-chunk-system.patch
rename to patches/unapplied/skipped/0019-Rewrite-chunk-system.patch