diff --git a/paper-server/src/org/bukkit/craftbukkit/CraftPlayer.java b/paper-server/src/org/bukkit/craftbukkit/CraftPlayer.java
new file mode 100644
index 0000000000..0b86306d3d
--- /dev/null
+++ b/paper-server/src/org/bukkit/craftbukkit/CraftPlayer.java
@@ -0,0 +1,25 @@
+
+package org.bukkit.craftbukkit;
+
+import net.minecraft.server.fi;
+import org.bukkit.Player;
+
+public class CraftPlayer implements Player {
+    private fi player;
+    private final String name;
+    private final CraftServer server;
+
+    public CraftPlayer(CraftServer serv, fi handle) {
+        player = handle;
+        name = player.aw;
+        server = serv;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public boolean isOnline() {
+        return server.server.g(name);
+    }
+}
diff --git a/paper-server/src/org/bukkit/craftbukkit/CraftServer.java b/paper-server/src/org/bukkit/craftbukkit/CraftServer.java
index 68680601f1..c275359ee9 100644
--- a/paper-server/src/org/bukkit/craftbukkit/CraftServer.java
+++ b/paper-server/src/org/bukkit/craftbukkit/CraftServer.java
@@ -1,25 +1,51 @@
 
 package org.bukkit.craftbukkit;
 
-import org.bukkit.Server;
-import net.minecraft.server.MinecraftServer;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import org.bukkit.*;
+import net.minecraft.server.*;
 
 public class CraftServer implements Server {
-    private final String name = "CraftBucket";
-    private String version;
-    MinecraftServer server;
+    private final String serverName = "CraftBucket";
+    private final String serverVersion;
+    private final HashMap<String, Player> playerCache = new HashMap<String, Player>();
 
-    protected CraftServer(MinecraftServer instance, String ver) {
-        server = instance;
-        version = ver;
+    protected final MinecraftServer console;
+    protected final hl server;
+
+    public CraftServer(MinecraftServer instance, String ver) {
+        serverVersion = ver;
+
+        console = instance;
+        server = console.f;
     }
 
     public String getName() {
-        return name;
+        return serverName;
     }
 
     public String getVersion() {
-        return version;
+        return serverVersion;
+    }
+
+    public Player[] getOnlinePlayers() {
+        List<fi> online = server.b;
+        Player[] players = new Player[online.size()];
+
+        for (int i = 0; i < players.length; i++) {
+            String name = online.get(i).aw;
+            
+            if (playerCache.containsKey(name)) {
+                players[i] = playerCache.get(name);
+            } else {
+                players[i] = new CraftPlayer(this, online.get(i));
+                playerCache.put(name, players[i]);
+            }
+        }
+
+        return players;
     }
 
 }