Skip to content

Instantly share code, notes, and snippets.

@zh32
Last active December 14, 2015 03:19
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save zh32/5020193 to your computer and use it in GitHub Desktop.
Save zh32/5020193 to your computer and use it in GitHub Desktop.
From ee1ac62ba261caeab0f25671cc8daa5e0afd22a2 Mon Sep 17 00:00:00 2001
From: zh32 <devnull@zh32.de>
Date: Sat, 23 Feb 2013 04:26:11 +0100
Subject: [PATCH 1/2] it works :D
---
pom.xml | 2 +-
src/main/java/de/zh32/auth/Auth.java | 13 +++++++++++++
src/main/java/net/minecraft/server/EntityPlayer.java | 4 +++-
src/main/java/net/minecraft/server/PendingConnection.java | 7 +++++--
src/main/java/net/minecraft/server/PlayerList.java | 4 ++--
src/main/java/net/minecraft/server/ThreadLoginVerifier.java | 12 +++++++++---
.../java/org/bukkit/craftbukkit/entity/CraftPlayer.java | 4 ++++
7 files changed, 37 insertions(+), 9 deletions(-)
create mode 100644 src/main/java/de/zh32/auth/Auth.java
diff --git a/pom.xml b/pom.xml
index 6b314ec..0295fa9 100644
--- a/pom.xml
+++ b/pom.xml
@@ -12,7 +12,7 @@
<groupId>org.spigotmc</groupId>
<artifactId>spigot</artifactId>
<packaging>jar</packaging>
- <version>1.4.7-R1.1-SNAPSHOT</version>
+ <version>1.4.7-R1.1-SNAPSHOT-auth</version>
<name>Spigot</name>
<url>http://www.spigotmc.org</url>
diff --git a/src/main/java/de/zh32/auth/Auth.java b/src/main/java/de/zh32/auth/Auth.java
new file mode 100644
index 0000000..8096fe1
--- /dev/null
+++ b/src/main/java/de/zh32/auth/Auth.java
@@ -0,0 +1,13 @@
+package de.zh32.auth;
+
+/**
+ *
+ * @author zh32
+ */
+public class Auth {
+
+ public static boolean isGreylisted(String name) {
+ return name.equals("zh321") ? true : false;
+ }
+
+}
diff --git a/src/main/java/net/minecraft/server/EntityPlayer.java b/src/main/java/net/minecraft/server/EntityPlayer.java
index 28f462b..9179d33 100644
--- a/src/main/java/net/minecraft/server/EntityPlayer.java
+++ b/src/main/java/net/minecraft/server/EntityPlayer.java
@@ -49,8 +49,9 @@ public class EntityPlayer extends EntityHuman implements ICrafting {
public int newTotalExp = 0;
public boolean keepLevel = false;
// CraftBukkit end
+ public boolean auth;
- public EntityPlayer(MinecraftServer minecraftserver, World world, String s, PlayerInteractManager playerinteractmanager) {
+ public EntityPlayer(MinecraftServer minecraftserver, World world, String s, PlayerInteractManager playerinteractmanager, boolean auth) {
super(world);
playerinteractmanager.player = this;
this.playerInteractManager = playerinteractmanager;
@@ -76,6 +77,7 @@ public class EntityPlayer extends EntityHuman implements ICrafting {
this.displayName = this.name; // CraftBukkit
this.listName = this.name; // CraftBukkit
this.canPickUpLoot = true; // CraftBukkit
+ this.auth = auth;
}
public void a(NBTTagCompound nbttagcompound) {
diff --git a/src/main/java/net/minecraft/server/PendingConnection.java b/src/main/java/net/minecraft/server/PendingConnection.java
index 70fe839..8849606 100644
--- a/src/main/java/net/minecraft/server/PendingConnection.java
+++ b/src/main/java/net/minecraft/server/PendingConnection.java
@@ -1,5 +1,6 @@
package net.minecraft.server;
+import de.zh32.auth.Auth; //AuthAPI
import java.io.Serializable;
import java.net.InetAddress;
import java.net.Socket;
@@ -27,6 +28,7 @@ public class PendingConnection extends Connection {
private boolean k = false;
private SecretKey l = null;
public String hostname = ""; // CraftBukkit - add field
+ public boolean auth = false;
public PendingConnection(MinecraftServer minecraftserver, org.spigotmc.netty.NettyNetworkManager networkManager) {
this.server = minecraftserver;
@@ -85,7 +87,8 @@ public class PendingConnection extends Connection {
this.disconnect("Outdated client!");
}
} else {
- this.loginKey = this.server.getOnlineMode() ? Long.toString(random.nextLong(), 16) : "-";
+ //this.loginKey = this.server.getOnlineMode() ? Long.toString(random.nextLong(), 16) : "-";
+ this.loginKey = !Auth.isGreylisted(this.h) ? Long.toString(random.nextLong(), 16) : "-"; //Auth
this.d = new byte[4];
random.nextBytes(this.d);
this.networkManager.queue(new Packet253KeyRequest(this.loginKey, publickey, this.d));
@@ -123,7 +126,7 @@ public class PendingConnection extends Connection {
public void d() {
// CraftBukkit start
- EntityPlayer s = this.server.getPlayerList().attemptLogin(this, this.h, this.hostname);
+ EntityPlayer s = this.server.getPlayerList().attemptLogin(this, this.h, this.hostname, auth);
if (s == null) {
return;
diff --git a/src/main/java/net/minecraft/server/PlayerList.java b/src/main/java/net/minecraft/server/PlayerList.java
index 3fc66aa..1064703 100644
--- a/src/main/java/net/minecraft/server/PlayerList.java
+++ b/src/main/java/net/minecraft/server/PlayerList.java
@@ -233,11 +233,11 @@ public abstract class PlayerList {
}
// CraftBukkit start - Whole method and signature
- public EntityPlayer attemptLogin(PendingConnection pendingconnection, String s, String hostname) {
+ public EntityPlayer attemptLogin(PendingConnection pendingconnection, String s, String hostname, boolean auth) {
// Instead of kicking then returning, we need to store the kick reason
// in the event, check with plugins to see if it's ok, and THEN kick
// depending on the outcome.
- EntityPlayer entity = new EntityPlayer(this.server, this.server.getWorldServer(0), s, this.server.M() ? new DemoPlayerInteractManager(this.server.getWorldServer(0)) : new PlayerInteractManager(this.server.getWorldServer(0)));
+ EntityPlayer entity = new EntityPlayer(this.server, this.server.getWorldServer(0), s, this.server.M() ? new DemoPlayerInteractManager(this.server.getWorldServer(0)) : new PlayerInteractManager(this.server.getWorldServer(0)), auth);
Player player = entity.getBukkitEntity();
PlayerLoginEvent event = new PlayerLoginEvent(player, hostname, pendingconnection.getSocket().getInetAddress());
diff --git a/src/main/java/net/minecraft/server/ThreadLoginVerifier.java b/src/main/java/net/minecraft/server/ThreadLoginVerifier.java
index e4e5049..2b61bda 100644
--- a/src/main/java/net/minecraft/server/ThreadLoginVerifier.java
+++ b/src/main/java/net/minecraft/server/ThreadLoginVerifier.java
@@ -1,5 +1,6 @@
package net.minecraft.server;
+import de.zh32.auth.Auth;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.math.BigInteger;
@@ -59,10 +60,15 @@ class ThreadLoginVerifier extends Thread {
bufferedreader.close();
if (!"YES".equals(s1)) {
- this.pendingConnection.disconnect("Failed to verify username!");
- return;
+ if (!Auth.isGreylisted(PendingConnection.d(this.pendingConnection))) {
+ this.pendingConnection.disconnect("Failed to verify username!");
+ return;
+ }
+ this.pendingConnection.auth = false;
+ }
+ else {
+ this.pendingConnection.auth = true;
}
-
// CraftBukkit start
if (this.pendingConnection.getSocket() == null) {
return;
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
index c79f352..f867dea 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
@@ -968,4 +968,8 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
super.resetMaxHealth();
getHandle().triggerHealthUpdate();
}
+
+ public boolean isAuthenticated() {
+ return getHandle().auth;
+ }
}
--
1.7.11.7
From 44a31968bfa8eed8dbd7070dcb9f60c3b9e5a1ac Mon Sep 17 00:00:00 2001
From: zh32 <devnull@zh32.de>
Date: Sat, 23 Feb 2013 06:08:00 +0100
Subject: [PATCH 2/2] asyncprelogin
---
src/main/java/net/minecraft/server/ThreadLoginVerifier.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/main/java/net/minecraft/server/ThreadLoginVerifier.java b/src/main/java/net/minecraft/server/ThreadLoginVerifier.java
index 2b61bda..62099b6 100644
--- a/src/main/java/net/minecraft/server/ThreadLoginVerifier.java
+++ b/src/main/java/net/minecraft/server/ThreadLoginVerifier.java
@@ -74,7 +74,7 @@ class ThreadLoginVerifier extends Thread {
return;
}
- AsyncPlayerPreLoginEvent asyncEvent = new AsyncPlayerPreLoginEvent(PendingConnection.d(this.pendingConnection), this.pendingConnection.getSocket().getInetAddress());
+ AsyncPlayerPreLoginEvent asyncEvent = new AsyncPlayerPreLoginEvent(PendingConnection.d(this.pendingConnection), this.pendingConnection.getSocket().getInetAddress(), this.pendingConnection.auth);
this.server.getPluginManager().callEvent(asyncEvent);
if (PlayerPreLoginEvent.getHandlerList().getRegisteredListeners().length != 0) {
--
1.7.11.7
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment