From 4af89290557b7ae346451c19734364077eb3e88a Mon Sep 17 00:00:00 2001
From: Jake Potrebic <jake.m.potrebic@gmail.com>
Date: Thu, 21 Sep 2023 15:01:00 -0700
Subject: [PATCH] some work

---
 ...ile-Entities-from-a-chunk-without-sn.patch |  0
 ...ies-option-to-debug-dupe-uuid-issues.patch |  0
 ...dd-Early-Warning-Feature-to-WatchDog.patch |  9 +-
 .../server/Add-More-Creeper-API.patch         |  0
 .../server/Add-PhantomPreSpawnEvent.patch     |  2 +-
 .../server/Add-TNTPrimeEvent.patch            |  0
 ...to-disable-ender-dragon-legacy-check.patch |  0
 .../Add-openSign-method-to-HumanEntity.patch  |  2 +-
 ...-ray-tracing-methods-to-LivingEntity.patch |  0
 patches/server/Adventure.patch                |  6 +-
 ...Allow-disabling-armour-stand-ticking.patch |  0
 ...Item-entities-with-World.spawnEntity.patch |  0
 .../server/AnvilDamageEvent.patch             |  0
 .../Block-Enderpearl-Travel-Exploit.patch     |  6 +-
 ...nd-make-tab-spam-limits-configurable.patch | 10 +--
 ...ServerListPingEvent-for-legacy-pings.patch | 69 ++++++++-------
 ...le-Alternative-LootPool-Luck-Formula.patch |  0
 ...le-speed-for-water-flowing-over-lava.patch |  0
 ...urable-sprint-interruption-on-attack.patch |  4 +-
 ...on-t-call-getItemMeta-on-hasItemMeta.patch |  0
 .../server/EnderDragon-Events.patch           |  0
 .../server/Enderman.teleportRandomly.patch    |  2 +-
 .../server/EndermanAttackPlayerEvent.patch    |  4 +-
 .../server/EndermanEscapeEvent.patch          | 10 +--
 .../server/Expand-Explosions-API.patch        |  0
 ...ld.spawnParticle-API-and-add-Builder.patch |  8 +-
 .../server/Fix-CraftEntity-hashCode.patch     |  0
 .../server/Fix-NBT-type-issues.patch          |  0
 ...-allowed-colored-signs-to-be-created.patch |  4 +-
 .../Flag-to-disable-the-channel-limit.patch   |  0
 ...KnockbackByEntityEvent-and-EntityPus.patch |  0
 ...lement-EntityTeleportEndGatewayEvent.patch |  0
 .../Implement-Expanded-ArmorStand-API.patch   |  0
 .../Implement-World.getEntity-UUID-API.patch  |  0
 .../Improve-BlockPosition-inlining.patch      |  0
 .../server/Improve-EntityShootBowEvent.patch  |  0
 .../server/Inventory-removeItemAnySlot.patch  |  0
 .../InventoryCloseEvent-Reason-API.patch      |  4 +-
 .../ItemStack-getMaxItemUseDuration.patch     |  0
 ...ivingEntity-Hand-Raised-Item-Use-API.patch |  0
 ...loadChunk-int-int-false-load-unconve.patch |  0
 ...ke-legacy-ping-handler-more-reliable.patch | 86 ++++++++++++-------
 ...e-shield-blocking-delay-configurable.patch |  0
 ...ptimize-BlockPosition-helper-methods.patch |  0
 .../Optimize-CraftBlockData-Creation.patch    |  0
 .../server/Optimize-MappedRegistry.patch      |  0
 ...t-armor-stands-from-doing-entity-loo.patch |  2 +-
 .../server/PlayerElytraBoostEvent.patch       |  0
 .../server/PlayerLaunchProjectileEvent.patch  |  0
 .../server/PlayerReadyArrowEvent.patch        |  0
 ...sted-Ice-from-loading-holding-chunks.patch |  4 +-
 ...ils-when-failing-to-save-player-data.patch |  0
 .../server/RangedEntity-API.patch             |  0
 ...nventory-when-cancelling-PlayerInter.patch |  2 +-
 ...Remove-unnecessary-itemmeta-handling.patch |  0
 ...default-mob-spawn-range-and-water-an.patch |  0
 .../server/SkeletonHorse-Additions.patch      |  0
 .../server/Slime-Pathfinder-Events.patch      | 23 ++---
 ...ed-flag-on-cancel-of-Explosion-Event.patch |  0
 ...r-to-keep-logging-IO-off-main-thread.patch |  4 +-
 .../Use-ConcurrentHashMap-in-JsonList.patch   |  0
 .../Use-a-Queue-for-Queueing-Commands.patch   |  8 +-
 .../Vanished-players-don-t-have-rights.patch  |  0
 .../server/Vex-get-setSummoner-API.patch      |  0
 .../server/WitchConsumePotionEvent.patch      |  4 +-
 .../server/WitchReadyPotionEvent.patch        |  0
 .../server/WitchThrowPotionEvent.patch        |  2 +-
 ...-more-information-to-Entity.toString.patch |  0
 68 files changed, 141 insertions(+), 134 deletions(-)
 rename patches/{unapplied => }/server/Ability-to-get-Tile-Entities-from-a-chunk-without-sn.patch (100%)
 rename patches/{unapplied => }/server/Add-Debug-Entities-option-to-debug-dupe-uuid-issues.patch (100%)
 rename patches/{unapplied => }/server/Add-Early-Warning-Feature-to-WatchDog.patch (94%)
 rename patches/{unapplied => }/server/Add-More-Creeper-API.patch (100%)
 rename patches/{unapplied => }/server/Add-PhantomPreSpawnEvent.patch (99%)
 rename patches/{unapplied => }/server/Add-TNTPrimeEvent.patch (100%)
 rename patches/{unapplied => }/server/Add-config-to-disable-ender-dragon-legacy-check.patch (100%)
 rename patches/{unapplied => }/server/Add-openSign-method-to-HumanEntity.patch (99%)
 rename patches/{unapplied => }/server/Add-ray-tracing-methods-to-LivingEntity.patch (100%)
 rename patches/{unapplied => }/server/Allow-disabling-armour-stand-ticking.patch (100%)
 rename patches/{unapplied => }/server/Allow-spawning-Item-entities-with-World.spawnEntity.patch (100%)
 rename patches/{unapplied => }/server/AnvilDamageEvent.patch (100%)
 rename patches/{unapplied => }/server/Block-Enderpearl-Travel-Exploit.patch (99%)
 rename patches/{unapplied => }/server/Break-up-and-make-tab-spam-limits-configurable.patch (89%)
 rename patches/{unapplied => }/server/Call-PaperServerListPingEvent-for-legacy-pings.patch (62%)
 rename patches/{unapplied => }/server/Configurable-Alternative-LootPool-Luck-Formula.patch (100%)
 rename patches/{unapplied => }/server/Configurable-speed-for-water-flowing-over-lava.patch (100%)
 rename patches/{unapplied => }/server/Configurable-sprint-interruption-on-attack.patch (99%)
 rename patches/{unapplied => }/server/Don-t-call-getItemMeta-on-hasItemMeta.patch (100%)
 rename patches/{unapplied => }/server/EnderDragon-Events.patch (100%)
 rename patches/{unapplied => }/server/Enderman.teleportRandomly.patch (99%)
 rename patches/{unapplied => }/server/EndermanAttackPlayerEvent.patch (99%)
 rename patches/{unapplied => }/server/EndermanEscapeEvent.patch (99%)
 rename patches/{unapplied => }/server/Expand-Explosions-API.patch (100%)
 rename patches/{unapplied => }/server/Expand-World.spawnParticle-API-and-add-Builder.patch (99%)
 rename patches/{unapplied => }/server/Fix-CraftEntity-hashCode.patch (100%)
 rename patches/{unapplied => }/server/Fix-NBT-type-issues.patch (100%)
 rename patches/{unapplied => }/server/Fix-exploit-that-allowed-colored-signs-to-be-created.patch (99%)
 rename patches/{unapplied => }/server/Flag-to-disable-the-channel-limit.patch (100%)
 rename patches/{unapplied => }/server/Implement-EntityKnockbackByEntityEvent-and-EntityPus.patch (100%)
 rename patches/{unapplied => }/server/Implement-EntityTeleportEndGatewayEvent.patch (100%)
 rename patches/{unapplied => }/server/Implement-Expanded-ArmorStand-API.patch (100%)
 rename patches/{unapplied => }/server/Implement-World.getEntity-UUID-API.patch (100%)
 rename patches/{unapplied => }/server/Improve-BlockPosition-inlining.patch (100%)
 rename patches/{unapplied => }/server/Improve-EntityShootBowEvent.patch (100%)
 rename patches/{unapplied => }/server/Inventory-removeItemAnySlot.patch (100%)
 rename patches/{unapplied => }/server/InventoryCloseEvent-Reason-API.patch (98%)
 rename patches/{unapplied => }/server/ItemStack-getMaxItemUseDuration.patch (100%)
 rename patches/{unapplied => }/server/LivingEntity-Hand-Raised-Item-Use-API.patch (100%)
 rename patches/{unapplied => }/server/Make-CraftWorld-loadChunk-int-int-false-load-unconve.patch (100%)
 rename patches/{unapplied => }/server/Make-legacy-ping-handler-more-reliable.patch (60%)
 rename patches/{unapplied => }/server/Make-shield-blocking-delay-configurable.patch (100%)
 rename patches/{unapplied => }/server/Optimize-BlockPosition-helper-methods.patch (100%)
 rename patches/{unapplied => }/server/Optimize-CraftBlockData-Creation.patch (100%)
 rename patches/{unapplied => }/server/Optimize-MappedRegistry.patch (100%)
 rename patches/{unapplied => }/server/Option-to-prevent-armor-stands-from-doing-entity-loo.patch (97%)
 rename patches/{unapplied => }/server/PlayerElytraBoostEvent.patch (100%)
 rename patches/{unapplied => }/server/PlayerLaunchProjectileEvent.patch (100%)
 rename patches/{unapplied => }/server/PlayerReadyArrowEvent.patch (100%)
 rename patches/{unapplied => }/server/Prevent-Frosted-Ice-from-loading-holding-chunks.patch (99%)
 rename patches/{unapplied => }/server/Print-Error-details-when-failing-to-save-player-data.patch (100%)
 rename patches/{unapplied => }/server/RangedEntity-API.patch (100%)
 rename patches/{unapplied => }/server/Refresh-player-inventory-when-cancelling-PlayerInter.patch (94%)
 rename patches/{unapplied => }/server/Remove-unnecessary-itemmeta-handling.patch (100%)
 rename patches/{unapplied => }/server/Restore-vanilla-default-mob-spawn-range-and-water-an.patch (100%)
 rename patches/{unapplied => }/server/SkeletonHorse-Additions.patch (100%)
 rename patches/{unapplied => }/server/Slime-Pathfinder-Events.patch (81%)
 rename patches/{unapplied => }/server/Unset-Ignited-flag-on-cancel-of-Explosion-Event.patch (100%)
 rename patches/{unapplied => }/server/Use-AsyncAppender-to-keep-logging-IO-off-main-thread.patch (94%)
 rename patches/{unapplied => }/server/Use-ConcurrentHashMap-in-JsonList.patch (100%)
 rename patches/{unapplied => }/server/Use-a-Queue-for-Queueing-Commands.patch (91%)
 rename patches/{unapplied => }/server/Vanished-players-don-t-have-rights.patch (100%)
 rename patches/{unapplied => }/server/Vex-get-setSummoner-API.patch (100%)
 rename patches/{unapplied => }/server/WitchConsumePotionEvent.patch (99%)
 rename patches/{unapplied => }/server/WitchReadyPotionEvent.patch (100%)
 rename patches/{unapplied => }/server/WitchThrowPotionEvent.patch (99%)
 rename patches/{unapplied => }/server/add-more-information-to-Entity.toString.patch (100%)

diff --git a/patches/unapplied/server/Ability-to-get-Tile-Entities-from-a-chunk-without-sn.patch b/patches/server/Ability-to-get-Tile-Entities-from-a-chunk-without-sn.patch
similarity index 100%
rename from patches/unapplied/server/Ability-to-get-Tile-Entities-from-a-chunk-without-sn.patch
rename to patches/server/Ability-to-get-Tile-Entities-from-a-chunk-without-sn.patch
diff --git a/patches/unapplied/server/Add-Debug-Entities-option-to-debug-dupe-uuid-issues.patch b/patches/server/Add-Debug-Entities-option-to-debug-dupe-uuid-issues.patch
similarity index 100%
rename from patches/unapplied/server/Add-Debug-Entities-option-to-debug-dupe-uuid-issues.patch
rename to patches/server/Add-Debug-Entities-option-to-debug-dupe-uuid-issues.patch
diff --git a/patches/unapplied/server/Add-Early-Warning-Feature-to-WatchDog.patch b/patches/server/Add-Early-Warning-Feature-to-WatchDog.patch
similarity index 94%
rename from patches/unapplied/server/Add-Early-Warning-Feature-to-WatchDog.patch
rename to patches/server/Add-Early-Warning-Feature-to-WatchDog.patch
index 3ab1e65665..9ee27bb80b 100644
--- a/patches/unapplied/server/Add-Early-Warning-Feature-to-WatchDog.patch
+++ b/patches/server/Add-Early-Warning-Feature-to-WatchDog.patch
@@ -69,7 +69,7 @@ diff --git a/src/main/java/org/spigotmc/WatchdogThread.java b/src/main/java/org/
 index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
 --- a/src/main/java/org/spigotmc/WatchdogThread.java
 +++ b/src/main/java/org/spigotmc/WatchdogThread.java
-@@ -0,0 +0,0 @@ public final class WatchdogThread extends io.papermc.paper.util.TickThread // Pa
+@@ -0,0 +0,0 @@ public class WatchdogThread extends Thread
      private static WatchdogThread instance;
      private long timeoutTime;
      private boolean restart;
@@ -80,7 +80,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
      private volatile long lastTick;
      private volatile boolean stopping;
  
-@@ -0,0 +0,0 @@ public final class WatchdogThread extends io.papermc.paper.util.TickThread // Pa
+@@ -0,0 +0,0 @@ public class WatchdogThread extends Thread
          super( "Paper Watchdog Thread" );
          this.timeoutTime = timeoutTime;
          this.restart = restart;
@@ -89,7 +89,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
      }
  
      private static long monotonicMillis()
-@@ -0,0 +0,0 @@ public final class WatchdogThread extends io.papermc.paper.util.TickThread // Pa
+@@ -0,0 +0,0 @@ public class WatchdogThread extends Thread
          while ( !this.stopping )
          {
              //
@@ -110,7 +110,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
                  log.log( Level.SEVERE, "------------------------------" );
                  log.log( Level.SEVERE, "The server has stopped responding! This is (probably) not a Paper bug." ); // Paper
                  log.log( Level.SEVERE, "If you see a plugin in the Server thread dump below, then please report it to that author" );
-@@ -0,0 +0,0 @@ public final class WatchdogThread extends io.papermc.paper.util.TickThread // Pa
+@@ -0,0 +0,0 @@ public class WatchdogThread extends Thread
                      }
                  }
                  // Paper end
@@ -122,7 +122,6 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
 +                // Paper end - Different message for short timeout
                  log.log( Level.SEVERE, "------------------------------" );
                  log.log( Level.SEVERE, "Server thread dump (Look for plugins here before reporting to Paper!):" ); // Paper
-                 io.papermc.paper.chunk.system.scheduling.ChunkTaskScheduler.dumpAllChunkLoadInfo(isLongTimeout); // Paper // Paper - rewrite chunk system
                  WatchdogThread.dumpThread( ManagementFactory.getThreadMXBean().getThreadInfo( MinecraftServer.getServer().serverThread.getId(), Integer.MAX_VALUE ), log );
                  log.log( Level.SEVERE, "------------------------------" );
                  //
diff --git a/patches/unapplied/server/Add-More-Creeper-API.patch b/patches/server/Add-More-Creeper-API.patch
similarity index 100%
rename from patches/unapplied/server/Add-More-Creeper-API.patch
rename to patches/server/Add-More-Creeper-API.patch
diff --git a/patches/unapplied/server/Add-PhantomPreSpawnEvent.patch b/patches/server/Add-PhantomPreSpawnEvent.patch
similarity index 99%
rename from patches/unapplied/server/Add-PhantomPreSpawnEvent.patch
rename to patches/server/Add-PhantomPreSpawnEvent.patch
index e434be0cd2..a96d5ccf39 100644
--- a/patches/unapplied/server/Add-PhantomPreSpawnEvent.patch
+++ b/patches/server/Add-PhantomPreSpawnEvent.patch
@@ -33,7 +33,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
  
      @Override
 @@ -0,0 +0,0 @@ public class Phantom extends FlyingMob implements Enemy {
-         return (double) this.getEyeHeight();
+         return -0.125F;
      }
  
 +    // Paper start
diff --git a/patches/unapplied/server/Add-TNTPrimeEvent.patch b/patches/server/Add-TNTPrimeEvent.patch
similarity index 100%
rename from patches/unapplied/server/Add-TNTPrimeEvent.patch
rename to patches/server/Add-TNTPrimeEvent.patch
diff --git a/patches/unapplied/server/Add-config-to-disable-ender-dragon-legacy-check.patch b/patches/server/Add-config-to-disable-ender-dragon-legacy-check.patch
similarity index 100%
rename from patches/unapplied/server/Add-config-to-disable-ender-dragon-legacy-check.patch
rename to patches/server/Add-config-to-disable-ender-dragon-legacy-check.patch
diff --git a/patches/unapplied/server/Add-openSign-method-to-HumanEntity.patch b/patches/server/Add-openSign-method-to-HumanEntity.patch
similarity index 99%
rename from patches/unapplied/server/Add-openSign-method-to-HumanEntity.patch
rename to patches/server/Add-openSign-method-to-HumanEntity.patch
index f7987bbc88..49203f3802 100644
--- a/patches/unapplied/server/Add-openSign-method-to-HumanEntity.patch
+++ b/patches/server/Add-openSign-method-to-HumanEntity.patch
@@ -11,7 +11,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
 @@ -0,0 +0,0 @@ public class CraftHumanEntity extends CraftLivingEntity implements HumanEntity {
          }
      }
-
+ 
 +    // Paper start - move open sign method to HumanEntity
 +    @Override
 +    public void openSign(final org.bukkit.block.Sign sign, final org.bukkit.block.sign.Side side) {
diff --git a/patches/unapplied/server/Add-ray-tracing-methods-to-LivingEntity.patch b/patches/server/Add-ray-tracing-methods-to-LivingEntity.patch
similarity index 100%
rename from patches/unapplied/server/Add-ray-tracing-methods-to-LivingEntity.patch
rename to patches/server/Add-ray-tracing-methods-to-LivingEntity.patch
diff --git a/patches/server/Adventure.patch b/patches/server/Adventure.patch
index 6a519fc831..addf8e59f1 100644
--- a/patches/server/Adventure.patch
+++ b/patches/server/Adventure.patch
@@ -2239,10 +2239,6 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
  
      public ChatDecorator getChatDecorator() {
 -        return ChatDecorator.PLAIN;
--    }
--
--    public boolean logIPs() {
--        return true;
 +        // Paper start - moved to ChatPreviewProcessor
 +        return ChatDecorator.create((sender, commandSourceStack, message) -> {
 +            final io.papermc.paper.adventure.ChatDecorationProcessor processor = new io.papermc.paper.adventure.ChatDecorationProcessor(this, sender, commandSourceStack, message);
@@ -2251,7 +2247,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
 +        // Paper end
      }
  
-     public static record ReloadableResources(CloseableResourceManager resourceManager, ReloadableServerResources managers) implements AutoCloseable {
+     public boolean logIPs() {
 diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java
 index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java
diff --git a/patches/unapplied/server/Allow-disabling-armour-stand-ticking.patch b/patches/server/Allow-disabling-armour-stand-ticking.patch
similarity index 100%
rename from patches/unapplied/server/Allow-disabling-armour-stand-ticking.patch
rename to patches/server/Allow-disabling-armour-stand-ticking.patch
diff --git a/patches/unapplied/server/Allow-spawning-Item-entities-with-World.spawnEntity.patch b/patches/server/Allow-spawning-Item-entities-with-World.spawnEntity.patch
similarity index 100%
rename from patches/unapplied/server/Allow-spawning-Item-entities-with-World.spawnEntity.patch
rename to patches/server/Allow-spawning-Item-entities-with-World.spawnEntity.patch
diff --git a/patches/unapplied/server/AnvilDamageEvent.patch b/patches/server/AnvilDamageEvent.patch
similarity index 100%
rename from patches/unapplied/server/AnvilDamageEvent.patch
rename to patches/server/AnvilDamageEvent.patch
diff --git a/patches/unapplied/server/Block-Enderpearl-Travel-Exploit.patch b/patches/server/Block-Enderpearl-Travel-Exploit.patch
similarity index 99%
rename from patches/unapplied/server/Block-Enderpearl-Travel-Exploit.patch
rename to patches/server/Block-Enderpearl-Travel-Exploit.patch
index 782c9de524..6e87855cfb 100644
--- a/patches/unapplied/server/Block-Enderpearl-Travel-Exploit.patch
+++ b/patches/server/Block-Enderpearl-Travel-Exploit.patch
@@ -20,7 +20,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java
 +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java
 @@ -0,0 +0,0 @@ public class ServerLevel extends Level implements WorldGenLevel {
-
+ 
          public void onTickingEnd(Entity entity) {
              ServerLevel.this.entityTickList.remove(entity);
 +            // Paper start - Reset pearls when they stop being ticked
@@ -30,7 +30,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
 +            }
 +            // Paper end
          }
-
+ 
          public void onTrackingStart(Entity entity) {
 diff --git a/src/main/java/net/minecraft/world/entity/projectile/Projectile.java b/src/main/java/net/minecraft/world/entity/projectile/Projectile.java
 index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
@@ -42,5 +42,5 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
              this.cachedOwner = null;
 +            if (this instanceof ThrownEnderpearl && this.level() != null && this.level().paperConfig().fixes.disableUnloadedChunkEnderpearlExploit) { this.ownerUUID = null; } // Paper - Don't store shooter name for pearls to block enderpearl travel exploit
          }
-
+ 
          this.leftOwner = nbt.getBoolean("LeftOwner");
diff --git a/patches/unapplied/server/Break-up-and-make-tab-spam-limits-configurable.patch b/patches/server/Break-up-and-make-tab-spam-limits-configurable.patch
similarity index 89%
rename from patches/unapplied/server/Break-up-and-make-tab-spam-limits-configurable.patch
rename to patches/server/Break-up-and-make-tab-spam-limits-configurable.patch
index d829e343e2..5fee0f2536 100644
--- a/patches/unapplied/server/Break-up-and-make-tab-spam-limits-configurable.patch
+++ b/patches/server/Break-up-and-make-tab-spam-limits-configurable.patch
@@ -25,23 +25,23 @@ diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListener
 index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
 --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
 +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
-@@ -0,0 +0,0 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
-     private long keepAliveChallenge;
+@@ -0,0 +0,0 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
+     private int ackBlockChangesUpTo = -1;
      // CraftBukkit start - multithreaded fields
      private final AtomicInteger chatSpamTickCount = new AtomicInteger();
 +    private final java.util.concurrent.atomic.AtomicInteger tabSpamLimiter = new java.util.concurrent.atomic.AtomicInteger(); // Paper - configurable tab spam limits
      // CraftBukkit end
      private int dropSpamTickCount;
      private double firstGoodX;
-@@ -0,0 +0,0 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
-         this.server.getProfiler().pop();
+@@ -0,0 +0,0 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
+         this.keepConnectionAlive();
          // CraftBukkit start
          for (int spam; (spam = this.chatSpamTickCount.get()) > 0 && !this.chatSpamTickCount.compareAndSet(spam, spam - 1); ) ;
 +        if (tabSpamLimiter.get() > 0) tabSpamLimiter.getAndDecrement(); // Paper - split to seperate variable
          /* Use thread-safe field access instead
          if (this.chatSpamTickCount > 0) {
              --this.chatSpamTickCount;
-@@ -0,0 +0,0 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
+@@ -0,0 +0,0 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
      public void handleCustomCommandSuggestions(ServerboundCommandSuggestionPacket packet) {
          // PacketUtils.ensureRunningOnSameThread(packet, this, this.player.serverLevel()); // Paper - run this async
          // CraftBukkit start
diff --git a/patches/unapplied/server/Call-PaperServerListPingEvent-for-legacy-pings.patch b/patches/server/Call-PaperServerListPingEvent-for-legacy-pings.patch
similarity index 62%
rename from patches/unapplied/server/Call-PaperServerListPingEvent-for-legacy-pings.patch
rename to patches/server/Call-PaperServerListPingEvent-for-legacy-pings.patch
index 60baa6d282..78da339880 100644
--- a/patches/unapplied/server/Call-PaperServerListPingEvent-for-legacy-pings.patch
+++ b/patches/server/Call-PaperServerListPingEvent-for-legacy-pings.patch
@@ -90,61 +90,66 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
 --- a/src/main/java/net/minecraft/server/network/LegacyQueryHandler.java
 +++ b/src/main/java/net/minecraft/server/network/LegacyQueryHandler.java
 @@ -0,0 +0,0 @@ public class LegacyQueryHandler extends ChannelInboundHandlerAdapter {
-             MinecraftServer minecraftserver = this.serverConnectionListener.getServer();
-             int i = bytebuf.readableBytes();
-             String s;
--            org.bukkit.event.server.ServerListPingEvent event = org.bukkit.craftbukkit.event.CraftEventFactory.callServerListPingEvent(minecraftserver.server, inetsocketaddress.getAddress(), minecraftserver.getMotd(), minecraftserver.getPlayerCount(), minecraftserver.getMaxPlayers()); // CraftBukkit
-+            //org.bukkit.event.server.ServerListPingEvent event = org.bukkit.craftbukkit.event.CraftEventFactory.callServerListPingEvent(minecraftserver.server, inetsocketaddress.getAddress(), minecraftserver.getMotd(), minecraftserver.getPlayerCount(), minecraftserver.getMaxPlayers()); // CraftBukkit // Paper
-+            com.destroystokyo.paper.event.server.PaperServerListPingEvent event; // Paper
+                 SocketAddress socketaddress = channelhandlercontext.channel().remoteAddress();
+                 int i = bytebuf.readableBytes();
+                 String s = null; // Paper
+-                org.bukkit.event.server.ServerListPingEvent event = org.bukkit.craftbukkit.event.CraftEventFactory.callServerListPingEvent(socketaddress, this.server.getMotd(), this.server.getPlayerCount(), this.server.getMaxPlayers()); // CraftBukkit
++                // org.bukkit.event.server.ServerListPingEvent event = org.bukkit.craftbukkit.event.CraftEventFactory.callServerListPingEvent(socketaddress, this.server.getMotd(), this.server.getPlayerCount(), this.server.getMaxPlayers()); // CraftBukkit // Paper
++                com.destroystokyo.paper.event.server.PaperServerListPingEvent event; // Paper
  
-             switch (i) {
-                 case 0:
-                     LegacyQueryHandler.LOGGER.debug("Ping: (<1.3.x) from {}:{}", inetsocketaddress.getAddress(), inetsocketaddress.getPort());
--                    s = String.format(Locale.ROOT, "%s\u00a7%d\u00a7%d", event.getMotd(), event.getNumPlayers(), event.getMaxPlayers()); // CraftBukkit
+                 if (i == 0) {
+                     LegacyQueryHandler.LOGGER.debug("Ping: (<1.3.x) from {}", socketaddress);
+-                    s = LegacyQueryHandler.createVersion0Response(this.server, event); // CraftBukkit
++
 +                    // Paper start - Call PaperServerListPingEvent and use results
-+                    event = com.destroystokyo.paper.network.PaperLegacyStatusClient.processRequest(minecraftserver, inetsocketaddress, 39, null);
++                    event = com.destroystokyo.paper.network.PaperLegacyStatusClient.processRequest(net.minecraft.server.MinecraftServer.getServer(), (java.net.InetSocketAddress) socketaddress, 39, null);
 +                    if (event == null) {
 +                        channelhandlercontext.close();
-+                        break;
++                        bytebuf.release();
++                        flag = false;
++                        return;
 +                    }
 +                    s = String.format(Locale.ROOT, "%s\u00a7%d\u00a7%d", com.destroystokyo.paper.network.PaperLegacyStatusClient.getUnformattedMotd(event), event.getNumPlayers(), event.getMaxPlayers());
-                     this.sendFlushAndClose(channelhandlercontext, this.createReply(s));
 +                    // Paper end
-                     break;
-                 case 1:
+                     LegacyQueryHandler.sendFlushAndClose(channelhandlercontext, LegacyQueryHandler.createLegacyDisconnectPacket(channelhandlercontext.alloc(), s));
+                 } else {
                      if (bytebuf.readUnsignedByte() != 1) {
 @@ -0,0 +0,0 @@ public class LegacyQueryHandler extends ChannelInboundHandlerAdapter {
+                         LegacyQueryHandler.LOGGER.debug("Ping: (1.4-1.5.x) from {}", socketaddress);
                      }
  
-                     LegacyQueryHandler.LOGGER.debug("Ping: (1.4-1.5.x) from {}:{}", inetsocketaddress.getAddress(), inetsocketaddress.getPort());
--                    s = String.format(Locale.ROOT, "\u00a71\u0000%d\u0000%s\u0000%s\u0000%d\u0000%d", 127, minecraftserver.getServerVersion(), event.getMotd(), event.getNumPlayers(), event.getMaxPlayers()); // CraftBukkit
-+                    // Paper start - Call PaperServerListPingEvent and use results
-+                    event = com.destroystokyo.paper.network.PaperLegacyStatusClient.processRequest(minecraftserver, inetsocketaddress, 127, null); // Paper
-+                    if (event == null) {
-+                        channelhandlercontext.close();
-+                        break;
+-                    if (s == null) s = LegacyQueryHandler.createVersion1Response(this.server, event); // CraftBukkit // Paper
++                    if (s == null) {
++                        // Paper start - Call PaperServerListPingEvent and use results
++                        event = com.destroystokyo.paper.network.PaperLegacyStatusClient.processRequest(net.minecraft.server.MinecraftServer.getServer(), (java.net.InetSocketAddress) socketaddress, 127, null); // Paper
++                        if (event == null) {
++                            channelhandlercontext.close();
++                            bytebuf.release();
++                            flag = false;
++                            return;
++                        }
++                        s = String.format(Locale.ROOT, "\u00a71\u0000%d\u0000%s\u0000%s\u0000%d\u0000%d", new Object[] { event.getProtocolVersion(), this.server.getServerVersion(), event.getMotd(), event.getNumPlayers(), event.getMaxPlayers()}); // CraftBukkit
++                        // Paper end
 +                    }
-+                    s = String.format(Locale.ROOT, "\u00a71\u0000%d\u0000%s\u0000%s\u0000%d\u0000%d", new Object[] { event.getProtocolVersion(), minecraftserver.getServerVersion(), event.getMotd(), event.getNumPlayers(), event.getMaxPlayers()}); // CraftBukkit
-+                    // Paper end
-                     this.sendFlushAndClose(channelhandlercontext, this.createReply(s));
-                     break;
-                 default:
+                     LegacyQueryHandler.sendFlushAndClose(channelhandlercontext, LegacyQueryHandler.createLegacyDisconnectPacket(channelhandlercontext.alloc(), s));
+                 }
+ 
 @@ -0,0 +0,0 @@ public class LegacyQueryHandler extends ChannelInboundHandlerAdapter {
  
          LOGGER.debug("Ping: (1.6) from {}", ctx.channel().remoteAddress());
  
 -        String response = String.format("\u00a71\u0000%d\u0000%s\u0000%s\u0000%d\u0000%d",
--                Byte.MAX_VALUE, server.getServerVersion(), server.getMotd(), server.getPlayerCount(), server.getMaxPlayers());
-+        InetSocketAddress virtualHost = com.destroystokyo.paper.network.PaperNetworkClient.prepareVirtualHost(host, port);
+-            Byte.MAX_VALUE, server.getServerVersion(), server.getMotd(), server.getPlayerCount(), server.getMaxPlayers());
++        java.net.InetSocketAddress virtualHost = com.destroystokyo.paper.network.PaperNetworkClient.prepareVirtualHost(host, port);
 +        com.destroystokyo.paper.event.server.PaperServerListPingEvent event = com.destroystokyo.paper.network.PaperLegacyStatusClient.processRequest(
-+                server, (InetSocketAddress) ctx.channel().remoteAddress(), protocolVersion, virtualHost);
++                server, (java.net.InetSocketAddress) ctx.channel().remoteAddress(), protocolVersion, virtualHost);
 +        if (event == null) {
 +            ctx.close();
-+            return;
++            return null;
 +        }
 +
 +        String response = String.format("\u00a71\u0000%d\u0000%s\u0000%s\u0000%d\u0000%d", event.getProtocolVersion(), event.getVersion(),
 +            com.destroystokyo.paper.network.PaperLegacyStatusClient.getMotd(event), event.getNumPlayers(), event.getMaxPlayers());
-         this.sendFlushAndClose(ctx, this.createReply(response));
+         return response;
      }
  
diff --git a/patches/unapplied/server/Configurable-Alternative-LootPool-Luck-Formula.patch b/patches/server/Configurable-Alternative-LootPool-Luck-Formula.patch
similarity index 100%
rename from patches/unapplied/server/Configurable-Alternative-LootPool-Luck-Formula.patch
rename to patches/server/Configurable-Alternative-LootPool-Luck-Formula.patch
diff --git a/patches/unapplied/server/Configurable-speed-for-water-flowing-over-lava.patch b/patches/server/Configurable-speed-for-water-flowing-over-lava.patch
similarity index 100%
rename from patches/unapplied/server/Configurable-speed-for-water-flowing-over-lava.patch
rename to patches/server/Configurable-speed-for-water-flowing-over-lava.patch
diff --git a/patches/unapplied/server/Configurable-sprint-interruption-on-attack.patch b/patches/server/Configurable-sprint-interruption-on-attack.patch
similarity index 99%
rename from patches/unapplied/server/Configurable-sprint-interruption-on-attack.patch
rename to patches/server/Configurable-sprint-interruption-on-attack.patch
index fcb3946b0b..0f7d80c74f 100644
--- a/patches/unapplied/server/Configurable-sprint-interruption-on-attack.patch
+++ b/patches/server/Configurable-sprint-interruption-on-attack.patch
@@ -11,7 +11,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
 +++ b/src/main/java/net/minecraft/world/entity/player/Player.java
 @@ -0,0 +0,0 @@ public abstract class Player extends LivingEntity {
                              }
-
+ 
                              this.setDeltaMovement(this.getDeltaMovement().multiply(0.6D, 1.0D, 0.6D));
 -                            this.setSprinting(false);
 +                            // Paper start - Configuration option to disable automatic sprint interruption
@@ -20,5 +20,5 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
 +                            }
 +                            // Paper end
                          }
-
+ 
                          if (flag3) {
diff --git a/patches/unapplied/server/Don-t-call-getItemMeta-on-hasItemMeta.patch b/patches/server/Don-t-call-getItemMeta-on-hasItemMeta.patch
similarity index 100%
rename from patches/unapplied/server/Don-t-call-getItemMeta-on-hasItemMeta.patch
rename to patches/server/Don-t-call-getItemMeta-on-hasItemMeta.patch
diff --git a/patches/unapplied/server/EnderDragon-Events.patch b/patches/server/EnderDragon-Events.patch
similarity index 100%
rename from patches/unapplied/server/EnderDragon-Events.patch
rename to patches/server/EnderDragon-Events.patch
diff --git a/patches/unapplied/server/Enderman.teleportRandomly.patch b/patches/server/Enderman.teleportRandomly.patch
similarity index 99%
rename from patches/unapplied/server/Enderman.teleportRandomly.patch
rename to patches/server/Enderman.teleportRandomly.patch
index 6ccedc4a74..401ce56230 100644
--- a/patches/unapplied/server/Enderman.teleportRandomly.patch
+++ b/patches/server/Enderman.teleportRandomly.patch
@@ -12,7 +12,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
 @@ -0,0 +0,0 @@ public class CraftEnderman extends CraftMonster implements Enderman {
          super(server, entity);
      }
-
+ 
 +    @Override public boolean teleportRandomly() { return getHandle().teleport(); } // Paper
      @Override
      public MaterialData getCarriedMaterial() {
diff --git a/patches/unapplied/server/EndermanAttackPlayerEvent.patch b/patches/server/EndermanAttackPlayerEvent.patch
similarity index 99%
rename from patches/unapplied/server/EndermanAttackPlayerEvent.patch
rename to patches/server/EndermanAttackPlayerEvent.patch
index 72e97e5299..f7000ae0ea 100644
--- a/patches/unapplied/server/EndermanAttackPlayerEvent.patch
+++ b/patches/server/EndermanAttackPlayerEvent.patch
@@ -14,7 +14,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
 @@ -0,0 +0,0 @@ public class EnderMan extends Monster implements NeutralMob {
          this.readPersistentAngerSaveData(this.level(), nbt);
      }
-
+ 
 -    boolean isLookingAtMe(Player player) {
 +    // Paper start - EndermanAttackPlayerEvent
 +    private boolean isLookingAtMe(Player player) {
@@ -26,5 +26,5 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
 +    private boolean isLookingAtMe_check(Player player) {
 +        // Paper end
          ItemStack itemstack = (ItemStack) player.getInventory().armor.get(3);
-
+ 
          if (itemstack.is(Blocks.CARVED_PUMPKIN.asItem())) {
diff --git a/patches/unapplied/server/EndermanEscapeEvent.patch b/patches/server/EndermanEscapeEvent.patch
similarity index 99%
rename from patches/unapplied/server/EndermanEscapeEvent.patch
rename to patches/server/EndermanEscapeEvent.patch
index 8a1e6ba822..21976b9f4f 100644
--- a/patches/unapplied/server/EndermanEscapeEvent.patch
+++ b/patches/server/EndermanEscapeEvent.patch
@@ -14,7 +14,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
 @@ -0,0 +0,0 @@ public class EnderMan extends Monster implements NeutralMob {
          this.setTarget(target, EntityTargetEvent.TargetReason.UNKNOWN, true);
      }
-
+ 
 +    // Paper start
 +    private boolean tryEscape(com.destroystokyo.paper.event.entity.EndermanEscapeEvent.Reason reason) {
 +        return new com.destroystokyo.paper.event.entity.EndermanEscapeEvent((org.bukkit.craftbukkit.entity.CraftEnderman) this.getBukkitEntity(), reason).callEvent();
@@ -27,7 +27,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
 @@ -0,0 +0,0 @@ public class EnderMan extends Monster implements NeutralMob {
          if (this.level().isDay() && this.tickCount >= this.targetChangeTime + 600) {
              float f = this.getLightLevelDependentMagicValue();
-
+ 
 -            if (f > 0.5F && this.level().canSeeSky(this.blockPosition()) && this.random.nextFloat() * 30.0F < (f - 0.4F) * 2.0F) {
 +            if (f > 0.5F && this.level().canSeeSky(this.blockPosition()) && this.random.nextFloat() * 30.0F < (f - 0.4F) * 2.0F && this.tryEscape(com.destroystokyo.paper.event.entity.EndermanEscapeEvent.Reason.RUNAWAY)) { // Paper
                  this.setTarget((LivingEntity) null);
@@ -36,7 +36,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
 @@ -0,0 +0,0 @@ public class EnderMan extends Monster implements NeutralMob {
              } else {
                  flag1 = flag && this.hurtWithCleanWater(source, (ThrownPotion) source.getDirectEntity(), amount);
-
+ 
 +                if (this.tryEscape(com.destroystokyo.paper.event.entity.EndermanEscapeEvent.Reason.INDIRECT)) { // Paper start
                  for (int i = 0; i < 64; ++i) {
                      if (this.teleport()) {
@@ -44,7 +44,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
                      }
                  }
 +                } // Paper end
-
+ 
                  return flag1;
              }
 @@ -0,0 +0,0 @@ public class EnderMan extends Monster implements NeutralMob {
@@ -55,4 +55,4 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
 +                        if (this.target.distanceToSqr((Entity) this.enderman) < 16.0D && this.enderman.tryEscape(com.destroystokyo.paper.event.entity.EndermanEscapeEvent.Reason.STARE)) { // Paper
                              this.enderman.teleport();
                          }
-
+ 
diff --git a/patches/unapplied/server/Expand-Explosions-API.patch b/patches/server/Expand-Explosions-API.patch
similarity index 100%
rename from patches/unapplied/server/Expand-Explosions-API.patch
rename to patches/server/Expand-Explosions-API.patch
diff --git a/patches/unapplied/server/Expand-World.spawnParticle-API-and-add-Builder.patch b/patches/server/Expand-World.spawnParticle-API-and-add-Builder.patch
similarity index 99%
rename from patches/unapplied/server/Expand-World.spawnParticle-API-and-add-Builder.patch
rename to patches/server/Expand-World.spawnParticle-API-and-add-Builder.patch
index aaeccd1bb7..a6997032bd 100644
--- a/patches/unapplied/server/Expand-World.spawnParticle-API-and-add-Builder.patch
+++ b/patches/server/Expand-World.spawnParticle-API-and-add-Builder.patch
@@ -15,7 +15,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
 +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java
 @@ -0,0 +0,0 @@ public class ServerLevel extends Level implements WorldGenLevel {
      }
-
+ 
      public <T extends ParticleOptions> int sendParticles(ServerPlayer sender, T t0, double d0, double d1, double d2, int i, double d3, double d4, double d5, double d6, boolean force) {
 +        // Paper start - Particle API Expansion
 +        return sendParticles(players, sender, t0, d0, d1, d2, i, d3, d4, d5, d6, force);
@@ -25,20 +25,20 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
          ClientboundLevelParticlesPacket packetplayoutworldparticles = new ClientboundLevelParticlesPacket(t0, force, d0, d1, d2, (float) d3, (float) d4, (float) d5, (float) d6, i);
          // CraftBukkit end
          int j = 0;
-
+ 
 -        for (int k = 0; k < this.players.size(); ++k) {
 -            ServerPlayer entityplayer = (ServerPlayer) this.players.get(k);
 +        for (Player entityhuman : receivers) { // Paper - Particle API Expansion
 +            ServerPlayer entityplayer = (ServerPlayer) entityhuman; // Paper - Particle API Expansion
              if (sender != null && !entityplayer.getBukkitEntity().canSee(sender.getBukkitEntity())) continue; // CraftBukkit
-
+ 
              if (this.sendParticles(entityplayer, force, d0, d1, d2, packetplayoutworldparticles)) { // CraftBukkit
 diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
 index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
 --- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
 +++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
 @@ -0,0 +0,0 @@ public class CraftWorld extends CraftRegionAccessor implements World {
-
+ 
      @Override
      public <T> void spawnParticle(Particle particle, double x, double y, double z, int count, double offsetX, double offsetY, double offsetZ, double extra, T data, boolean force) {
 -        if (data != null) {
diff --git a/patches/unapplied/server/Fix-CraftEntity-hashCode.patch b/patches/server/Fix-CraftEntity-hashCode.patch
similarity index 100%
rename from patches/unapplied/server/Fix-CraftEntity-hashCode.patch
rename to patches/server/Fix-CraftEntity-hashCode.patch
diff --git a/patches/unapplied/server/Fix-NBT-type-issues.patch b/patches/server/Fix-NBT-type-issues.patch
similarity index 100%
rename from patches/unapplied/server/Fix-NBT-type-issues.patch
rename to patches/server/Fix-NBT-type-issues.patch
diff --git a/patches/unapplied/server/Fix-exploit-that-allowed-colored-signs-to-be-created.patch b/patches/server/Fix-exploit-that-allowed-colored-signs-to-be-created.patch
similarity index 99%
rename from patches/unapplied/server/Fix-exploit-that-allowed-colored-signs-to-be-created.patch
rename to patches/server/Fix-exploit-that-allowed-colored-signs-to-be-created.patch
index 3049ac44a4..1abb23d4e9 100644
--- a/patches/unapplied/server/Fix-exploit-that-allowed-colored-signs-to-be-created.patch
+++ b/patches/server/Fix-exploit-that-allowed-colored-signs-to-be-created.patch
@@ -10,7 +10,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
 +++ b/src/main/java/net/minecraft/world/level/block/entity/SignBlockEntity.java
 @@ -0,0 +0,0 @@ public class SignBlockEntity extends BlockEntity implements CommandSource { // C
              Style chatmodifier = signtext.getMessage(i, entityhuman.isTextFilteringEnabled()).getStyle();
-
+ 
              if (entityhuman.isTextFilteringEnabled()) {
 -                signtext = signtext.setMessage(i, Component.literal(filteredtext.filteredOrEmpty()).setStyle(chatmodifier));
 +                signtext = signtext.setMessage(i, Component.literal(net.minecraft.SharedConstants.filterText(filteredtext.filteredOrEmpty())).setStyle(chatmodifier)); // Paper - filter sign text to chat only
@@ -19,4 +19,4 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
 +                signtext = signtext.setMessage(i, Component.literal(net.minecraft.SharedConstants.filterText(filteredtext.raw())).setStyle(chatmodifier), Component.literal(net.minecraft.SharedConstants.filterText(filteredtext.filteredOrEmpty())).setStyle(chatmodifier)); // Paper - filter sign text to chat only
              }
          }
-
+ 
diff --git a/patches/unapplied/server/Flag-to-disable-the-channel-limit.patch b/patches/server/Flag-to-disable-the-channel-limit.patch
similarity index 100%
rename from patches/unapplied/server/Flag-to-disable-the-channel-limit.patch
rename to patches/server/Flag-to-disable-the-channel-limit.patch
diff --git a/patches/unapplied/server/Implement-EntityKnockbackByEntityEvent-and-EntityPus.patch b/patches/server/Implement-EntityKnockbackByEntityEvent-and-EntityPus.patch
similarity index 100%
rename from patches/unapplied/server/Implement-EntityKnockbackByEntityEvent-and-EntityPus.patch
rename to patches/server/Implement-EntityKnockbackByEntityEvent-and-EntityPus.patch
diff --git a/patches/unapplied/server/Implement-EntityTeleportEndGatewayEvent.patch b/patches/server/Implement-EntityTeleportEndGatewayEvent.patch
similarity index 100%
rename from patches/unapplied/server/Implement-EntityTeleportEndGatewayEvent.patch
rename to patches/server/Implement-EntityTeleportEndGatewayEvent.patch
diff --git a/patches/unapplied/server/Implement-Expanded-ArmorStand-API.patch b/patches/server/Implement-Expanded-ArmorStand-API.patch
similarity index 100%
rename from patches/unapplied/server/Implement-Expanded-ArmorStand-API.patch
rename to patches/server/Implement-Expanded-ArmorStand-API.patch
diff --git a/patches/unapplied/server/Implement-World.getEntity-UUID-API.patch b/patches/server/Implement-World.getEntity-UUID-API.patch
similarity index 100%
rename from patches/unapplied/server/Implement-World.getEntity-UUID-API.patch
rename to patches/server/Implement-World.getEntity-UUID-API.patch
diff --git a/patches/unapplied/server/Improve-BlockPosition-inlining.patch b/patches/server/Improve-BlockPosition-inlining.patch
similarity index 100%
rename from patches/unapplied/server/Improve-BlockPosition-inlining.patch
rename to patches/server/Improve-BlockPosition-inlining.patch
diff --git a/patches/unapplied/server/Improve-EntityShootBowEvent.patch b/patches/server/Improve-EntityShootBowEvent.patch
similarity index 100%
rename from patches/unapplied/server/Improve-EntityShootBowEvent.patch
rename to patches/server/Improve-EntityShootBowEvent.patch
diff --git a/patches/unapplied/server/Inventory-removeItemAnySlot.patch b/patches/server/Inventory-removeItemAnySlot.patch
similarity index 100%
rename from patches/unapplied/server/Inventory-removeItemAnySlot.patch
rename to patches/server/Inventory-removeItemAnySlot.patch
diff --git a/patches/unapplied/server/InventoryCloseEvent-Reason-API.patch b/patches/server/InventoryCloseEvent-Reason-API.patch
similarity index 98%
rename from patches/unapplied/server/InventoryCloseEvent-Reason-API.patch
rename to patches/server/InventoryCloseEvent-Reason-API.patch
index d29aa77b13..cf13cb2ce7 100644
--- a/patches/unapplied/server/InventoryCloseEvent-Reason-API.patch
+++ b/patches/server/InventoryCloseEvent-Reason-API.patch
@@ -86,7 +86,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
  import org.bukkit.event.inventory.InventoryCreativeEvent;
  import org.bukkit.event.inventory.InventoryType.SlotType;
  import org.bukkit.event.inventory.SmithItemEvent;
-@@ -0,0 +0,0 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
+@@ -0,0 +0,0 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
  
      @Override
      public void handleContainerClose(ServerboundContainerClosePacket packet) {
@@ -115,7 +115,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
 +            entityplayer.closeContainer(org.bukkit.event.inventory.InventoryCloseEvent.Reason.DISCONNECT); // Paper
          }
  
-         PlayerQuitEvent playerQuitEvent = new PlayerQuitEvent(entityplayer.getBukkitEntity(), net.kyori.adventure.text.Component.translatable("multiplayer.player.left", net.kyori.adventure.text.format.NamedTextColor.YELLOW, io.papermc.paper.configuration.GlobalConfiguration.get().messages.useDisplayNameInQuitMessage ? entityplayer.getBukkitEntity().displayName() : PaperAdventure.asAdventure(entityplayer.getDisplayName()))); // Paper - Adventure
+         PlayerQuitEvent playerQuitEvent = new PlayerQuitEvent(entityplayer.getBukkitEntity(), net.kyori.adventure.text.Component.translatable("multiplayer.player.left", net.kyori.adventure.text.format.NamedTextColor.YELLOW, io.papermc.paper.configuration.GlobalConfiguration.get().messages.useDisplayNameInQuitMessage ? entityplayer.getBukkitEntity().displayName() : io.papermc.paper.adventure.PaperAdventure.asAdventure(entityplayer.getDisplayName()))); // Paper - Adventure
 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 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
 --- a/src/main/java/net/minecraft/world/entity/player/Player.java
diff --git a/patches/unapplied/server/ItemStack-getMaxItemUseDuration.patch b/patches/server/ItemStack-getMaxItemUseDuration.patch
similarity index 100%
rename from patches/unapplied/server/ItemStack-getMaxItemUseDuration.patch
rename to patches/server/ItemStack-getMaxItemUseDuration.patch
diff --git a/patches/unapplied/server/LivingEntity-Hand-Raised-Item-Use-API.patch b/patches/server/LivingEntity-Hand-Raised-Item-Use-API.patch
similarity index 100%
rename from patches/unapplied/server/LivingEntity-Hand-Raised-Item-Use-API.patch
rename to patches/server/LivingEntity-Hand-Raised-Item-Use-API.patch
diff --git a/patches/unapplied/server/Make-CraftWorld-loadChunk-int-int-false-load-unconve.patch b/patches/server/Make-CraftWorld-loadChunk-int-int-false-load-unconve.patch
similarity index 100%
rename from patches/unapplied/server/Make-CraftWorld-loadChunk-int-int-false-load-unconve.patch
rename to patches/server/Make-CraftWorld-loadChunk-int-int-false-load-unconve.patch
diff --git a/patches/unapplied/server/Make-legacy-ping-handler-more-reliable.patch b/patches/server/Make-legacy-ping-handler-more-reliable.patch
similarity index 60%
rename from patches/unapplied/server/Make-legacy-ping-handler-more-reliable.patch
rename to patches/server/Make-legacy-ping-handler-more-reliable.patch
index 8946529dbc..49c400c0ff 100644
--- a/patches/unapplied/server/Make-legacy-ping-handler-more-reliable.patch
+++ b/patches/server/Make-legacy-ping-handler-more-reliable.patch
@@ -32,13 +32,13 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
 --- a/src/main/java/net/minecraft/server/network/LegacyQueryHandler.java
 +++ b/src/main/java/net/minecraft/server/network/LegacyQueryHandler.java
 @@ -0,0 +0,0 @@ public class LegacyQueryHandler extends ChannelInboundHandlerAdapter {
+ 
      private static final Logger LOGGER = LogUtils.getLogger();
-     public static final int FAKE_PROTOCOL_VERSION = 127;
-     private final ServerConnectionListener serverConnectionListener;
+     private final ServerInfo server;
 +    private ByteBuf buf; // Paper
  
-     public LegacyQueryHandler(ServerConnectionListener networkIo) {
-         this.serverConnectionListener = networkIo;
+     public LegacyQueryHandler(ServerInfo server) {
+         this.server = server;
 @@ -0,0 +0,0 @@ public class LegacyQueryHandler extends ChannelInboundHandlerAdapter {
      public void channelRead(ChannelHandlerContext channelhandlercontext, Object object) {
          ByteBuf bytebuf = (ByteBuf) object;
@@ -57,26 +57,46 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
          boolean flag = true;
  
 @@ -0,0 +0,0 @@ public class LegacyQueryHandler extends ChannelInboundHandlerAdapter {
-                     this.sendFlushAndClose(channelhandlercontext, this.createReply(s));
-                     break;
-                 default:
-+                // Paper start - Replace with improved version below
-+                if (bytebuf.readUnsignedByte() != 0x01 || bytebuf.readUnsignedByte() != 0xFA) return;
-+                readLegacy1_6(channelhandlercontext, bytebuf);
-+                /*
-                     boolean flag1 = bytebuf.readUnsignedByte() == 1;
  
-                     flag1 &= bytebuf.readUnsignedByte() == 250;
+                 SocketAddress socketaddress = channelhandlercontext.channel().remoteAddress();
+                 int i = bytebuf.readableBytes();
+-                String s;
++                String s = null; // Paper
+                 org.bukkit.event.server.ServerListPingEvent event = org.bukkit.craftbukkit.event.CraftEventFactory.callServerListPingEvent(socketaddress, this.server.getMotd(), this.server.getPlayerCount(), this.server.getMaxPlayers()); // CraftBukkit
+ 
+                 if (i == 0) {
 @@ -0,0 +0,0 @@ public class LegacyQueryHandler extends ChannelInboundHandlerAdapter {
-                     } finally {
-                         bytebuf1.release();
                      }
-+                */ // Paper end - Replace with improved version below
-             }
  
-             bytebuf.release();
+                     if (bytebuf.isReadable()) {
+-                        if (!LegacyQueryHandler.readCustomPayloadPacket(bytebuf)) {
+-                            return;
++                        // Paper start - Replace with improved version below
++                        if (bytebuf.readUnsignedByte() != 250) {
++                            s = this.readLegacy1_6(channelhandlercontext, bytebuf);
++                            if (s == null) {
++                                return;
++                            }
+                         }
+-
+-                        LegacyQueryHandler.LOGGER.debug("Ping: (1.6) from {}", socketaddress);
++                        // if (!LegacyQueryHandler.readCustomPayloadPacket(bytebuf)) {
++                        //     return;
++                        // }
++                        //
++                        // LegacyQueryHandler.LOGGER.debug("Ping: (1.6) from {}", socketaddress);
++                        // Paper end
+                     } else {
+                         LegacyQueryHandler.LOGGER.debug("Ping: (1.4-1.5.x) from {}", socketaddress);
+                     }
+ 
+-                    s = LegacyQueryHandler.createVersion1Response(this.server, event); // CraftBukkit
++                    if (s == null) s = LegacyQueryHandler.createVersion1Response(this.server, event); // CraftBukkit // Paper
+                     LegacyQueryHandler.sendFlushAndClose(channelhandlercontext, LegacyQueryHandler.createLegacyDisconnectPacket(channelhandlercontext.alloc(), s));
+                 }
+ 
 @@ -0,0 +0,0 @@ public class LegacyQueryHandler extends ChannelInboundHandlerAdapter {
- 
+         }
      }
  
 +    // Paper start
@@ -86,12 +106,12 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
 +            return null;
 +        }
 +
-+        String result = buf.toString(buf.readerIndex(), size, StandardCharsets.UTF_16BE);
++        String result = buf.toString(buf.readerIndex(), size, java.nio.charset.StandardCharsets.UTF_16BE);
 +        buf.skipBytes(size); // toString doesn't increase readerIndex automatically
 +        return result;
 +    }
 +
-+    private void readLegacy1_6(ChannelHandlerContext ctx, ByteBuf part) {
++    private String readLegacy1_6(ChannelHandlerContext ctx, ByteBuf part) {
 +        ByteBuf buf = this.buf;
 +
 +        if (buf == null) {
@@ -104,35 +124,35 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
 +        buf.writeBytes(part);
 +
 +        if (!buf.isReadable(Short.BYTES + Short.BYTES + Byte.BYTES + Short.BYTES + Integer.BYTES)) {
-+            return;
++            return null;
 +        }
 +
 +        String s = readLegacyString(buf);
 +        if (s == null) {
-+            return;
++            return null;
 +        }
 +
 +        if (!s.equals("MC|PingHost")) {
 +            removeHandler(ctx);
-+            return;
++            return null;
 +        }
 +
 +        if (!buf.isReadable(Short.BYTES) || !buf.isReadable(buf.readShort())) {
-+            return;
++            return null;
 +        }
 +
-+        MinecraftServer server = this.serverConnectionListener.getServer();
++        net.minecraft.server.MinecraftServer server = net.minecraft.server.MinecraftServer.getServer();
 +        int protocolVersion = buf.readByte();
 +        String host = readLegacyString(buf);
 +        if (host == null) {
 +            removeHandler(ctx);
-+            return;
++            return null;
 +        }
 +        int port = buf.readInt();
 +
 +        if (buf.isReadable()) {
 +            removeHandler(ctx);
-+            return;
++            return null;
 +        }
 +
 +        buf.release();
@@ -141,8 +161,8 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
 +        LOGGER.debug("Ping: (1.6) from {}", ctx.channel().remoteAddress());
 +
 +        String response = String.format("\u00a71\u0000%d\u0000%s\u0000%s\u0000%d\u0000%d",
-+                Byte.MAX_VALUE, server.getServerVersion(), server.getMotd(), server.getPlayerCount(), server.getMaxPlayers());
-+        this.sendFlushAndClose(ctx, this.createReply(response));
++            Byte.MAX_VALUE, server.getServerVersion(), server.getMotd(), server.getPlayerCount(), server.getMaxPlayers());
++        return response;
 +    }
 +
 +    private void removeHandler(ChannelHandlerContext ctx) {
@@ -163,6 +183,6 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
 +    }
 +    // Paper end
 +
-     private void sendFlushAndClose(ChannelHandlerContext ctx, ByteBuf buf) {
-         ctx.pipeline().firstContext().writeAndFlush(buf).addListener(ChannelFutureListener.CLOSE);
-     }
+     // CraftBukkit start
+     private static String createVersion0Response(ServerInfo serverinfo, org.bukkit.event.server.ServerListPingEvent event) {
+         return String.format(Locale.ROOT, "%s\u00a7%d\u00a7%d", event.getMotd(), event.getNumPlayers(), event.getMaxPlayers());
diff --git a/patches/unapplied/server/Make-shield-blocking-delay-configurable.patch b/patches/server/Make-shield-blocking-delay-configurable.patch
similarity index 100%
rename from patches/unapplied/server/Make-shield-blocking-delay-configurable.patch
rename to patches/server/Make-shield-blocking-delay-configurable.patch
diff --git a/patches/unapplied/server/Optimize-BlockPosition-helper-methods.patch b/patches/server/Optimize-BlockPosition-helper-methods.patch
similarity index 100%
rename from patches/unapplied/server/Optimize-BlockPosition-helper-methods.patch
rename to patches/server/Optimize-BlockPosition-helper-methods.patch
diff --git a/patches/unapplied/server/Optimize-CraftBlockData-Creation.patch b/patches/server/Optimize-CraftBlockData-Creation.patch
similarity index 100%
rename from patches/unapplied/server/Optimize-CraftBlockData-Creation.patch
rename to patches/server/Optimize-CraftBlockData-Creation.patch
diff --git a/patches/unapplied/server/Optimize-MappedRegistry.patch b/patches/server/Optimize-MappedRegistry.patch
similarity index 100%
rename from patches/unapplied/server/Optimize-MappedRegistry.patch
rename to patches/server/Optimize-MappedRegistry.patch
diff --git a/patches/unapplied/server/Option-to-prevent-armor-stands-from-doing-entity-loo.patch b/patches/server/Option-to-prevent-armor-stands-from-doing-entity-loo.patch
similarity index 97%
rename from patches/unapplied/server/Option-to-prevent-armor-stands-from-doing-entity-loo.patch
rename to patches/server/Option-to-prevent-armor-stands-from-doing-entity-loo.patch
index 04e66a7d69..5367c3e760 100644
--- a/patches/unapplied/server/Option-to-prevent-armor-stands-from-doing-entity-loo.patch
+++ b/patches/server/Option-to-prevent-armor-stands-from-doing-entity-loo.patch
@@ -14,8 +14,8 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
      protected void pushEntities() {
 +        if (!this.level().paperConfig().entities.armorStands.doCollisionEntityLookups) return; // Paper
          List<Entity> list = this.level().getEntities((Entity) this, this.getBoundingBox(), ArmorStand.RIDABLE_MINECARTS);
+         Iterator iterator = list.iterator();
  
-         for (int i = 0; i < list.size(); ++i) {
 diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java
 index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
 --- a/src/main/java/net/minecraft/world/level/Level.java
diff --git a/patches/unapplied/server/PlayerElytraBoostEvent.patch b/patches/server/PlayerElytraBoostEvent.patch
similarity index 100%
rename from patches/unapplied/server/PlayerElytraBoostEvent.patch
rename to patches/server/PlayerElytraBoostEvent.patch
diff --git a/patches/unapplied/server/PlayerLaunchProjectileEvent.patch b/patches/server/PlayerLaunchProjectileEvent.patch
similarity index 100%
rename from patches/unapplied/server/PlayerLaunchProjectileEvent.patch
rename to patches/server/PlayerLaunchProjectileEvent.patch
diff --git a/patches/unapplied/server/PlayerReadyArrowEvent.patch b/patches/server/PlayerReadyArrowEvent.patch
similarity index 100%
rename from patches/unapplied/server/PlayerReadyArrowEvent.patch
rename to patches/server/PlayerReadyArrowEvent.patch
diff --git a/patches/unapplied/server/Prevent-Frosted-Ice-from-loading-holding-chunks.patch b/patches/server/Prevent-Frosted-Ice-from-loading-holding-chunks.patch
similarity index 99%
rename from patches/unapplied/server/Prevent-Frosted-Ice-from-loading-holding-chunks.patch
rename to patches/server/Prevent-Frosted-Ice-from-loading-holding-chunks.patch
index e79041e9d6..5d4b50178e 100644
--- a/patches/unapplied/server/Prevent-Frosted-Ice-from-loading-holding-chunks.patch
+++ b/patches/server/Prevent-Frosted-Ice-from-loading-holding-chunks.patch
@@ -10,7 +10,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
 --- a/src/main/java/net/minecraft/world/level/block/FrostedIceBlock.java
 +++ b/src/main/java/net/minecraft/world/level/block/FrostedIceBlock.java
 @@ -0,0 +0,0 @@ public class FrostedIceBlock extends IceBlock {
-
+ 
              for(Direction direction : Direction.values()) {
                  mutableBlockPos.setWithOffset(pos, direction);
 -                BlockState blockState = world.getBlockState(mutableBlockPos);
@@ -20,7 +20,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
                      world.scheduleTick(mutableBlockPos, this, Mth.nextInt(random, world.paperConfig().environment.frostedIce.delay.min, world.paperConfig().environment.frostedIce.delay.max)); // Paper - use configurable min/max delay
                  }
 @@ -0,0 +0,0 @@ public class FrostedIceBlock extends IceBlock {
-
+ 
          for(Direction direction : Direction.values()) {
              mutableBlockPos.setWithOffset(pos, direction);
 -            if (world.getBlockState(mutableBlockPos).is(this)) {
diff --git a/patches/unapplied/server/Print-Error-details-when-failing-to-save-player-data.patch b/patches/server/Print-Error-details-when-failing-to-save-player-data.patch
similarity index 100%
rename from patches/unapplied/server/Print-Error-details-when-failing-to-save-player-data.patch
rename to patches/server/Print-Error-details-when-failing-to-save-player-data.patch
diff --git a/patches/unapplied/server/RangedEntity-API.patch b/patches/server/RangedEntity-API.patch
similarity index 100%
rename from patches/unapplied/server/RangedEntity-API.patch
rename to patches/server/RangedEntity-API.patch
diff --git a/patches/unapplied/server/Refresh-player-inventory-when-cancelling-PlayerInter.patch b/patches/server/Refresh-player-inventory-when-cancelling-PlayerInter.patch
similarity index 94%
rename from patches/unapplied/server/Refresh-player-inventory-when-cancelling-PlayerInter.patch
rename to patches/server/Refresh-player-inventory-when-cancelling-PlayerInter.patch
index 145137f320..0f488a6899 100644
--- a/patches/unapplied/server/Refresh-player-inventory-when-cancelling-PlayerInter.patch
+++ b/patches/server/Refresh-player-inventory-when-cancelling-PlayerInter.patch
@@ -19,7 +19,7 @@ diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListener
 index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
 --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
 +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
-@@ -0,0 +0,0 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
+@@ -0,0 +0,0 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
                              }
  
                              if (event.isCancelled()) {
diff --git a/patches/unapplied/server/Remove-unnecessary-itemmeta-handling.patch b/patches/server/Remove-unnecessary-itemmeta-handling.patch
similarity index 100%
rename from patches/unapplied/server/Remove-unnecessary-itemmeta-handling.patch
rename to patches/server/Remove-unnecessary-itemmeta-handling.patch
diff --git a/patches/unapplied/server/Restore-vanilla-default-mob-spawn-range-and-water-an.patch b/patches/server/Restore-vanilla-default-mob-spawn-range-and-water-an.patch
similarity index 100%
rename from patches/unapplied/server/Restore-vanilla-default-mob-spawn-range-and-water-an.patch
rename to patches/server/Restore-vanilla-default-mob-spawn-range-and-water-an.patch
diff --git a/patches/unapplied/server/SkeletonHorse-Additions.patch b/patches/server/SkeletonHorse-Additions.patch
similarity index 100%
rename from patches/unapplied/server/SkeletonHorse-Additions.patch
rename to patches/server/SkeletonHorse-Additions.patch
diff --git a/patches/unapplied/server/Slime-Pathfinder-Events.patch b/patches/server/Slime-Pathfinder-Events.patch
similarity index 81%
rename from patches/unapplied/server/Slime-Pathfinder-Events.patch
rename to patches/server/Slime-Pathfinder-Events.patch
index cd26f623f2..28b902961d 100644
--- a/patches/unapplied/server/Slime-Pathfinder-Events.patch
+++ b/patches/server/Slime-Pathfinder-Events.patch
@@ -8,19 +8,6 @@ diff --git a/src/main/java/net/minecraft/world/entity/monster/Slime.java b/src/m
 index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
 --- a/src/main/java/net/minecraft/world/entity/monster/Slime.java
 +++ b/src/main/java/net/minecraft/world/entity/monster/Slime.java
-@@ -0,0 +0,0 @@ import net.minecraft.world.level.ServerLevelAccessor;
- import net.minecraft.world.level.WorldGenLevel;
- import net.minecraft.world.level.levelgen.WorldgenRandom;
- import net.minecraft.world.phys.Vec3;
-+// Paper start
-+import com.destroystokyo.paper.event.entity.SlimeChangeDirectionEvent;
-+import com.destroystokyo.paper.event.entity.SlimeSwimEvent;
-+import com.destroystokyo.paper.event.entity.SlimeTargetLivingEntityEvent;
-+import com.destroystokyo.paper.event.entity.SlimeWanderEvent;
-+// Paper end
- // CraftBukkit start
- import java.util.ArrayList;
- import java.util.List;
 @@ -0,0 +0,0 @@ public class Slime extends Mob implements Enemy {
      @Override
      public void addAdditionalSaveData(CompoundTag nbt) {
@@ -46,7 +33,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
          @Override
          public boolean canUse() {
 -            return (this.slime.isInWater() || this.slime.isInLava()) && this.slime.getMoveControl() instanceof Slime.SlimeMoveControl;
-+            return (this.slime.isInWater() || this.slime.isInLava()) && this.slime.getMoveControl() instanceof Slime.SlimeMoveControl && this.slime.canWander && new SlimeSwimEvent((org.bukkit.entity.Slime) this.slime.getBukkitEntity()).callEvent(); // Paper
++            return (this.slime.isInWater() || this.slime.isInLava()) && this.slime.getMoveControl() instanceof Slime.SlimeMoveControl && this.slime.canWander && new com.destroystokyo.paper.event.entity.SlimeSwimEvent((org.bukkit.entity.Slime) this.slime.getBukkitEntity()).callEvent(); // Paper
          }
  
          @Override
@@ -62,7 +49,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
 +            if (!this.slime.canAttack(entityliving)) {
 +                return false;
 +            }
-+            return this.slime.getMoveControl() instanceof Slime.SlimeMoveControl && this.slime.canWander && new SlimeTargetLivingEntityEvent((org.bukkit.entity.Slime) this.slime.getBukkitEntity(), (org.bukkit.entity.LivingEntity) entityliving.getBukkitEntity()).callEvent();
++            return this.slime.getMoveControl() instanceof Slime.SlimeMoveControl && this.slime.canWander && new com.destroystokyo.paper.event.entity.SlimeTargetLivingEntityEvent((org.bukkit.entity.Slime) this.slime.getBukkitEntity(), (org.bukkit.entity.LivingEntity) entityliving.getBukkitEntity()).callEvent();
 +            // Paper end
          }
  
@@ -79,7 +66,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
 +            if (!this.slime.canAttack(entityliving)) {
 +                return false;
 +            }
-+            return --this.growTiredTimer > 0 && this.slime.canWander && new SlimeTargetLivingEntityEvent((org.bukkit.entity.Slime) this.slime.getBukkitEntity(), (org.bukkit.entity.LivingEntity) entityliving.getBukkitEntity()).callEvent();
++            return --this.growTiredTimer > 0 && this.slime.canWander && new com.destroystokyo.paper.event.entity.SlimeTargetLivingEntityEvent((org.bukkit.entity.Slime) this.slime.getBukkitEntity(), (org.bukkit.entity.LivingEntity) entityliving.getBukkitEntity()).callEvent();
 +            // Paper end
          }
  
@@ -112,7 +99,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
                  this.nextRandomizeTime = this.adjustedTickDelay(40 + this.slime.getRandom().nextInt(60));
                  this.chosenDegrees = (float) this.slime.getRandom().nextInt(360);
 +                // Paper start
-+                SlimeChangeDirectionEvent event = new SlimeChangeDirectionEvent((org.bukkit.entity.Slime) this.slime.getBukkitEntity(), this.chosenDegrees);
++                com.destroystokyo.paper.event.entity.SlimeChangeDirectionEvent event = new com.destroystokyo.paper.event.entity.SlimeChangeDirectionEvent((org.bukkit.entity.Slime) this.slime.getBukkitEntity(), this.chosenDegrees);
 +                if (!this.slime.canWander || !event.callEvent()) return;
 +                this.chosenDegrees = event.getNewYaw();
 +                // Paper end
@@ -124,7 +111,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
          @Override
          public boolean canUse() {
 -            return !this.slime.isPassenger();
-+            return !this.slime.isPassenger() && this.slime.canWander && new SlimeWanderEvent((org.bukkit.entity.Slime) this.slime.getBukkitEntity()).callEvent(); // Paper
++            return !this.slime.isPassenger() && this.slime.canWander && new com.destroystokyo.paper.event.entity.SlimeWanderEvent((org.bukkit.entity.Slime) this.slime.getBukkitEntity()).callEvent(); // Paper
          }
  
          @Override
diff --git a/patches/unapplied/server/Unset-Ignited-flag-on-cancel-of-Explosion-Event.patch b/patches/server/Unset-Ignited-flag-on-cancel-of-Explosion-Event.patch
similarity index 100%
rename from patches/unapplied/server/Unset-Ignited-flag-on-cancel-of-Explosion-Event.patch
rename to patches/server/Unset-Ignited-flag-on-cancel-of-Explosion-Event.patch
diff --git a/patches/unapplied/server/Use-AsyncAppender-to-keep-logging-IO-off-main-thread.patch b/patches/server/Use-AsyncAppender-to-keep-logging-IO-off-main-thread.patch
similarity index 94%
rename from patches/unapplied/server/Use-AsyncAppender-to-keep-logging-IO-off-main-thread.patch
rename to patches/server/Use-AsyncAppender-to-keep-logging-IO-off-main-thread.patch
index 5d27e7ca4b..9e30552a50 100644
--- a/patches/unapplied/server/Use-AsyncAppender-to-keep-logging-IO-off-main-thread.patch
+++ b/patches/server/Use-AsyncAppender-to-keep-logging-IO-off-main-thread.patch
@@ -10,8 +10,8 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
 +++ b/build.gradle.kts
 @@ -0,0 +0,0 @@ dependencies {
      implementation("commons-lang:commons-lang:2.6")
-     runtimeOnly("org.xerial:sqlite-jdbc:3.42.0.0")
-     runtimeOnly("com.mysql:mysql-connector-j:8.0.33")
+     runtimeOnly("org.xerial:sqlite-jdbc:3.43.0.0")
+     runtimeOnly("com.mysql:mysql-connector-j:8.1.0")
 +    runtimeOnly("com.lmax:disruptor:3.4.4") // Paper
  
      runtimeOnly("org.apache.maven:maven-resolver-provider:3.8.5")
diff --git a/patches/unapplied/server/Use-ConcurrentHashMap-in-JsonList.patch b/patches/server/Use-ConcurrentHashMap-in-JsonList.patch
similarity index 100%
rename from patches/unapplied/server/Use-ConcurrentHashMap-in-JsonList.patch
rename to patches/server/Use-ConcurrentHashMap-in-JsonList.patch
diff --git a/patches/unapplied/server/Use-a-Queue-for-Queueing-Commands.patch b/patches/server/Use-a-Queue-for-Queueing-Commands.patch
similarity index 91%
rename from patches/unapplied/server/Use-a-Queue-for-Queueing-Commands.patch
rename to patches/server/Use-a-Queue-for-Queueing-Commands.patch
index 22e55d334e..bb951685c9 100644
--- a/patches/unapplied/server/Use-a-Queue-for-Queueing-Commands.patch
+++ b/patches/server/Use-a-Queue-for-Queueing-Commands.patch
@@ -17,11 +17,11 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
 +    private final java.util.Queue<ConsoleInput> serverCommandQueue = new java.util.concurrent.ConcurrentLinkedQueue<>(); // Paper - use a proper queuemmands
      @Nullable
      private QueryThreadGs4 queryThreadGs4;
-     // public final RemoteControlCommandListener rconConsoleSource; // CraftBukkit - remove field
+     // private final RemoteControlCommandListener rconConsoleSource; // CraftBukkit - remove field
 @@ -0,0 +0,0 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface
-             return;
-         }
-         // Paper end - rewrite chunk system
+     }
+ 
+     public void handleConsoleInput(String command, CommandSourceStack commandSource) {
 -        this.consoleInput.add(new ConsoleInput(command, commandSource));
 +        this.serverCommandQueue.add(new ConsoleInput(command, commandSource)); // Paper - use proper queue
      }
diff --git a/patches/unapplied/server/Vanished-players-don-t-have-rights.patch b/patches/server/Vanished-players-don-t-have-rights.patch
similarity index 100%
rename from patches/unapplied/server/Vanished-players-don-t-have-rights.patch
rename to patches/server/Vanished-players-don-t-have-rights.patch
diff --git a/patches/unapplied/server/Vex-get-setSummoner-API.patch b/patches/server/Vex-get-setSummoner-API.patch
similarity index 100%
rename from patches/unapplied/server/Vex-get-setSummoner-API.patch
rename to patches/server/Vex-get-setSummoner-API.patch
diff --git a/patches/unapplied/server/WitchConsumePotionEvent.patch b/patches/server/WitchConsumePotionEvent.patch
similarity index 99%
rename from patches/unapplied/server/WitchConsumePotionEvent.patch
rename to patches/server/WitchConsumePotionEvent.patch
index 522dbf6915..c6402c6777 100644
--- a/patches/unapplied/server/WitchConsumePotionEvent.patch
+++ b/patches/server/WitchConsumePotionEvent.patch
@@ -10,7 +10,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
 --- a/src/main/java/net/minecraft/world/entity/monster/Witch.java
 +++ b/src/main/java/net/minecraft/world/entity/monster/Witch.java
 @@ -0,0 +0,0 @@ public class Witch extends Raider implements RangedAttackMob {
-
+ 
                      this.setItemSlot(EquipmentSlot.MAINHAND, ItemStack.EMPTY);
                      if (itemstack.is(Items.POTION)) {
 -                        List<MobEffectInstance> list = PotionUtils.getMobEffects(itemstack);
@@ -19,6 +19,6 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
 +
 +                        List<MobEffectInstance> list = event.callEvent() ? PotionUtils.getMobEffects(org.bukkit.craftbukkit.inventory.CraftItemStack.asNMSCopy(event.getPotion())) : null;
 +                        // Paper end
-
+ 
                          if (list != null) {
                              Iterator iterator = list.iterator();
diff --git a/patches/unapplied/server/WitchReadyPotionEvent.patch b/patches/server/WitchReadyPotionEvent.patch
similarity index 100%
rename from patches/unapplied/server/WitchReadyPotionEvent.patch
rename to patches/server/WitchReadyPotionEvent.patch
diff --git a/patches/unapplied/server/WitchThrowPotionEvent.patch b/patches/server/WitchThrowPotionEvent.patch
similarity index 99%
rename from patches/unapplied/server/WitchThrowPotionEvent.patch
rename to patches/server/WitchThrowPotionEvent.patch
index 6d1f4d5da2..98c23bf492 100644
--- a/patches/unapplied/server/WitchThrowPotionEvent.patch
+++ b/patches/server/WitchThrowPotionEvent.patch
@@ -12,7 +12,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
 @@ -0,0 +0,0 @@ public class Witch extends Raider implements RangedAttackMob {
                  potionregistry = Potions.WEAKNESS;
              }
-
+ 
 +            // Paper start
 +            ItemStack potion = PotionUtils.setPotion(new ItemStack(Items.SPLASH_POTION), potionregistry);
 +            com.destroystokyo.paper.event.entity.WitchThrowPotionEvent event = new com.destroystokyo.paper.event.entity.WitchThrowPotionEvent((org.bukkit.entity.Witch) this.getBukkitEntity(), (org.bukkit.entity.LivingEntity) target.getBukkitEntity(), org.bukkit.craftbukkit.inventory.CraftItemStack.asCraftMirror(potion));
diff --git a/patches/unapplied/server/add-more-information-to-Entity.toString.patch b/patches/server/add-more-information-to-Entity.toString.patch
similarity index 100%
rename from patches/unapplied/server/add-more-information-to-Entity.toString.patch
rename to patches/server/add-more-information-to-Entity.toString.patch