diff --git a/patches/server/Fix-test-not-bootstrapping.patch b/patches/server/Fix-test-not-bootstrapping.patch
deleted file mode 100644
index b6d832e1e3..0000000000
--- a/patches/server/Fix-test-not-bootstrapping.patch
+++ /dev/null
@@ -1,24 +0,0 @@
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: Mariell Hoversholm <proximyst@proximyst.com>
-Date: Mon, 2 Aug 2021 08:52:21 +0200
-Subject: [PATCH] Fix test not bootstrapping
-
-Signed-off-by: Mariell Hoversholm <proximyst@proximyst.com>
-
-diff --git a/src/test/java/org/bukkit/enchantments/EnchantmentTargetTest.java b/src/test/java/org/bukkit/enchantments/EnchantmentTargetTest.java
-index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
---- a/src/test/java/org/bukkit/enchantments/EnchantmentTargetTest.java
-+++ b/src/test/java/org/bukkit/enchantments/EnchantmentTargetTest.java
-@@ -0,0 +0,0 @@ import net.minecraft.world.item.Item;
- import net.minecraft.world.item.enchantment.EnchantmentCategory;
- import org.bukkit.Material;
- import org.bukkit.craftbukkit.util.CraftMagicNumbers;
-+import org.bukkit.support.AbstractTestingBase;
- import org.junit.Assert;
- import org.junit.Test;
- 
--public class EnchantmentTargetTest {
-+public class EnchantmentTargetTest extends AbstractTestingBase { // Paper
- 
-     @Test
-     public void test() {
diff --git a/patches/server/Further-improve-server-tick-loop.patch b/patches/server/Further-improve-server-tick-loop.patch
index cd2cdb6f79..debf0da413 100644
--- a/patches/server/Further-improve-server-tick-loop.patch
+++ b/patches/server/Further-improve-server-tick-loop.patch
@@ -16,8 +16,8 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
 --- a/src/main/java/net/minecraft/server/MinecraftServer.java
 +++ b/src/main/java/net/minecraft/server/MinecraftServer.java
 @@ -0,0 +0,0 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
+     public OptionSet options;
      public org.bukkit.command.ConsoleCommandSender console;
-     public org.bukkit.command.RemoteConsoleCommandSender remoteConsole;
      public ConsoleReader reader;
 -    public static int currentTick = (int) (System.currentTimeMillis() / 50);
 +    public static int currentTick = 0; // Paper - Further improve tick loop
diff --git a/patches/server/Improve-logging-and-errors.patch b/patches/server/Improve-logging-and-errors.patch
index 614136e8db..4169c3a8fa 100644
--- a/patches/server/Improve-logging-and-errors.patch
+++ b/patches/server/Improve-logging-and-errors.patch
@@ -4,23 +4,6 @@ Date: Wed, 14 Dec 2022 15:52:11 -0800
 Subject: [PATCH] Improve logging and errors
 
 
-diff --git a/src/main/java/net/minecraft/server/dedicated/Settings.java b/src/main/java/net/minecraft/server/dedicated/Settings.java
-index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
---- a/src/main/java/net/minecraft/server/dedicated/Settings.java
-+++ b/src/main/java/net/minecraft/server/dedicated/Settings.java
-@@ -0,0 +0,0 @@ public abstract class Settings<T extends Settings<T>> {
-     }
- 
-     public static Properties loadFromFile(Path path) {
-+        // Paper start
-+        if (Files.notExists(path)) {
-+            LOGGER.info("Could not find existing {}. Creating with default values...", path.getFileName());
-+            return new Properties();
-+        }
-+        // Paper end
-         try {
-             Properties properties;
-             Properties properties1;
 diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
 index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
 --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
diff --git a/patches/server/Timings-v2.patch b/patches/server/Timings-v2.patch
index 8f3533fbc6..32afd52bb3 100644
--- a/patches/server/Timings-v2.patch
+++ b/patches/server/Timings-v2.patch
@@ -934,7 +934,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
 -import org.bukkit.craftbukkit.SpigotTimings; // Spigot
 +import co.aikar.timings.MinecraftTimings; // Paper
  import org.bukkit.event.server.ServerCommandEvent;
-+import org.bukkit.craftbukkit.util.Waitable;
++import org.bukkit.craftbukkit.util.Waitable; // Paper
  import org.bukkit.event.server.RemoteServerCommandEvent;
  // CraftBukkit end
  
@@ -957,21 +957,27 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
  
      @Override
 @@ -0,0 +0,0 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface
+     }
  
-     @Override
-     public String runCommand(String command) {
-+        Waitable[] waitableArray = new Waitable[1];
-         this.rconConsoleSource.prepareForCommand();
+     public String runCommand(RconConsoleSource rconConsoleSource, String s) {
++        Waitable[] waitableArray = new Waitable[1]; // Paper
+         rconConsoleSource.prepareForCommand();
++        final java.util.concurrent.atomic.AtomicReference<String> command = new java.util.concurrent.atomic.AtomicReference<>(s); // Paper
          this.executeBlocking(() -> {
-             // CraftBukkit start - fire RemoteServerCommandEvent
+             CommandSourceStack wrapper = rconConsoleSource.createCommandSourceStack();
+             RemoteServerCommandEvent event = new RemoteServerCommandEvent(rconConsoleSource.getBukkitSender(wrapper), s);
 @@ -0,0 +0,0 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface
              if (event.isCancelled()) {
                  return;
              }
+-            ConsoleInput serverCommand = new ConsoleInput(event.getCommand(), wrapper);
+-            server.dispatchServerCommand(event.getSender(), serverCommand);
++
 +            // Paper start
-+            if (command.toLowerCase().startsWith("timings") && command.toLowerCase().matches("timings (report|paste|get|merged|seperate)")) {
++            command.set(event.getCommand());
++            if (event.getCommand().toLowerCase().startsWith("timings") && event.getCommand().toLowerCase().matches("timings (report|paste|get|merged|seperate)")) {
 +                org.bukkit.command.BufferedCommandSender sender = new org.bukkit.command.BufferedCommandSender();
-+                Waitable<String> waitable = new Waitable<String>() {
++                Waitable<String> waitable = new Waitable<>() {
 +                    @Override
 +                    protected String evaluate() {
 +                        return sender.getBuffer();
@@ -981,10 +987,9 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
 +                co.aikar.timings.Timings.generateReport(new co.aikar.timings.TimingsReportListener(sender, waitable));
 +            } else {
 +            // Paper end
-             ConsoleInput serverCommand = new ConsoleInput(event.getCommand(), this.rconConsoleSource.createCommandSourceStack());
-             server.dispatchServerCommand(remoteConsole, serverCommand);
++                ConsoleInput serverCommand = new ConsoleInput(event.getCommand(), wrapper);
++                server.dispatchServerCommand(event.getSender(), serverCommand);
 +            } // Paper
-             // CraftBukkit end
          });
 +        // Paper start
 +        if (waitableArray[0] != null) {
@@ -993,17 +998,17 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
 +            try {
 +                return waitable.get();
 +            } catch (java.util.concurrent.ExecutionException e) {
-+                throw new RuntimeException("Exception processing rcon command " + command, e.getCause());
++                throw new RuntimeException("Exception processing rcon command " + command.get(), e.getCause());
 +            } catch (InterruptedException e) {
 +                Thread.currentThread().interrupt(); // Maintain interrupted state
-+                throw new RuntimeException("Interrupted processing rcon command " + command, e);
++                throw new RuntimeException("Interrupted processing rcon command " + command.get(), e);
 +            }
 +
 +        }
 +        // Paper end
-         return this.rconConsoleSource.getCommandResponse();
+         return rconConsoleSource.getCommandResponse();
+         // 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 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
 --- a/src/main/java/net/minecraft/server/level/ChunkMap.java
diff --git a/patches/server/Use-TerminalConsoleAppender-for-console-improvements.patch b/patches/server/Use-TerminalConsoleAppender-for-console-improvements.patch
index cab62c9dbc..7df23676f2 100644
--- a/patches/server/Use-TerminalConsoleAppender-for-console-improvements.patch
+++ b/patches/server/Use-TerminalConsoleAppender-for-console-improvements.patch
@@ -265,9 +265,9 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
  import net.minecraft.core.HolderLookup;
  import net.minecraft.resources.RegistryOps;
 @@ -0,0 +0,0 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
+     public org.bukkit.craftbukkit.CraftServer server;
      public OptionSet options;
      public org.bukkit.command.ConsoleCommandSender console;
-     public org.bukkit.command.RemoteConsoleCommandSender remoteConsole;
 -    public ConsoleReader reader;
 +    //public ConsoleReader reader; // Paper
      public static int currentTick = 0; // Paper - Further improve tick loop
diff --git a/patches/server/Use-a-Queue-for-Queueing-Commands.patch b/patches/server/Use-a-Queue-for-Queueing-Commands.patch
index dfe1e3de50..22e55d334e 100644
--- a/patches/server/Use-a-Queue-for-Queueing-Commands.patch
+++ b/patches/server/Use-a-Queue-for-Queueing-Commands.patch
@@ -17,7 +17,7 @@ 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 RconConsoleSource rconConsoleSource;
+     // public final RemoteControlCommandListener rconConsoleSource; // CraftBukkit - remove field
 @@ -0,0 +0,0 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface
              return;
          }
diff --git a/work/Bukkit b/work/Bukkit
index 82af5dc60e..6b34da8f0c 160000
--- a/work/Bukkit
+++ b/work/Bukkit
@@ -1 +1 @@
-Subproject commit 82af5dc60eae0a6223be15ea4f69c560521c97a9
+Subproject commit 6b34da8f0c34fb308c825d3e12abf9cf5bac6ab9
diff --git a/work/CraftBukkit b/work/CraftBukkit
index b76ceb4f5d..db4ba28978 160000
--- a/work/CraftBukkit
+++ b/work/CraftBukkit
@@ -1 +1 @@
-Subproject commit b76ceb4f5dbeeedb6e0cff3b4545779b137bc125
+Subproject commit db4ba289785418d608eeca8dec2013e513adf9ad
diff --git a/work/Spigot b/work/Spigot
index 94e187b577..d2eba2c820 160000
--- a/work/Spigot
+++ b/work/Spigot
@@ -1 +1 @@
-Subproject commit 94e187b577b93759e4f46e85c892049a6baa3bcc
+Subproject commit d2eba2c820b52b742eb542c6d2c4d76e3d743570