--- a/net/minecraft/server/rcon/thread/RemoteControlSession.java
+++ b/net/minecraft/server/rcon/thread/RemoteControlSession.java
@@ -11,6 +11,10 @@
 import net.minecraft.server.IMinecraftServer;
 import net.minecraft.server.rcon.StatusChallengeUtils;
 import org.slf4j.Logger;
+// CraftBukkit start
+import net.minecraft.server.dedicated.DedicatedServer;
+import net.minecraft.server.rcon.RemoteControlCommandListener;
+// CraftBukkit end
 
 public class RemoteControlSession extends RemoteConnectionThread {
 
@@ -24,11 +28,14 @@
     private final Socket client;
     private final byte[] buf = new byte[1460];
     private final String rconPassword;
-    private final IMinecraftServer serverInterface;
+    // CraftBukkit start
+    private final DedicatedServer serverInterface;
+    private final RemoteControlCommandListener rconConsoleSource;
+    // CraftBukkit end
 
     RemoteControlSession(IMinecraftServer iminecraftserver, String s, Socket socket) {
         super("RCON Client " + String.valueOf(socket.getInetAddress()));
-        this.serverInterface = iminecraftserver;
+        this.serverInterface = (DedicatedServer) iminecraftserver; // CraftBukkit
         this.client = socket;
 
         try {
@@ -38,11 +45,14 @@
         }
 
         this.rconPassword = s;
+        this.rconConsoleSource = new net.minecraft.server.rcon.RemoteControlCommandListener(this.serverInterface, socket.getRemoteSocketAddress()); // CraftBukkit
     }
 
     public void run() {
-        while (true) {
-            try {
+        // CraftBukkit start - decompile error: switch try / while statement
+        try {
+            while (true) {
+                // CraftBukkit end
                 if (!this.running) {
                     return;
                 }
@@ -71,7 +81,7 @@
                                 String s = StatusChallengeUtils.stringFromByteArray(this.buf, j, i);
 
                                 try {
-                                    this.sendCmdResponse(l, this.serverInterface.runCommand(s));
+                                    this.sendCmdResponse(l, this.serverInterface.runCommand(this.rconConsoleSource, s)); // CraftBukkit
                                 } catch (Exception exception) {
                                     this.sendCmdResponse(l, "Error executing: " + s + " (" + exception.getMessage() + ")");
                                 }
@@ -98,6 +108,7 @@
                             continue;
                     }
                 }
+        } // CraftBukkit - decompile error: switch try / while statement
             } catch (IOException ioexception) {
                 return;
             } catch (Exception exception1) {
@@ -109,8 +120,10 @@
                 this.running = false;
             }
 
-            return;
-        }
+            // CraftBukkit start - decompile error: switch try / while statement
+            // return;
+        // }
+        // CraftBukkit end
     }
 
     private void send(int i, int j, String s) throws IOException {
