3
0

Initial commit (Forge 1291).

This commit is contained in:
gamerforEA
2015-03-22 20:38:04 +03:00
commit 16773ead6a
611 changed files with 64826 additions and 0 deletions

View File

@ -0,0 +1,122 @@
--- ../src-base/minecraft/net/minecraft/server/network/NetHandlerHandshakeTCP.java
+++ ../src-work/minecraft/net/minecraft/server/network/NetHandlerHandshakeTCP.java
@@ -3,6 +3,7 @@
import cpw.mods.fml.common.FMLCommonHandler;
import io.netty.util.concurrent.GenericFutureListener;
import net.minecraft.network.EnumConnectionState;
+import net.minecraft.network.INetHandler;
import net.minecraft.network.NetworkManager;
import net.minecraft.network.handshake.INetHandlerHandshakeServer;
import net.minecraft.network.handshake.client.C00Handshake;
@@ -11,8 +12,24 @@
import net.minecraft.util.ChatComponentText;
import net.minecraft.util.IChatComponent;
+
+// CraftBukkit start
+import java.net.InetAddress;
+import java.util.HashMap;
+// CraftBukkit end
+// Spigot start
+import com.mojang.authlib.properties.Property;
+import com.mojang.util.UUIDTypeAdapter;
+// Spigot end
+
public class NetHandlerHandshakeTCP implements INetHandlerHandshakeServer
{
+ private static final com.google.gson.Gson gson = new com.google.gson.Gson(); // Spigot
+ // CraftBukkit start
+ private static final HashMap<InetAddress, Long> throttleTracker = new HashMap<InetAddress, Long>();
+ private static int throttleCounter = 0;
+ // CraftBukkit end
+
private final MinecraftServer field_147387_a;
private final NetworkManager field_147386_b;
private static final String __OBFID = "CL_00001456";
@@ -39,6 +56,52 @@
this.field_147386_b.setConnectionState(EnumConnectionState.LOGIN);
ChatComponentText chatcomponenttext;
+ // CraftBukkit start
+ try
+ {
+ long currentTime = System.currentTimeMillis();
+ long connectionThrottle = MinecraftServer.getServer().server.getConnectionThrottle();
+ InetAddress address = ((java.net.InetSocketAddress) this.field_147386_b.getSocketAddress()).getAddress();
+
+ synchronized (throttleTracker)
+ {
+ if (throttleTracker.containsKey(address) && !"127.0.0.1".equals(address.getHostAddress()) && currentTime - throttleTracker.get(address) < connectionThrottle)
+ {
+ throttleTracker.put(address, currentTime);
+ chatcomponenttext = new ChatComponentText("Connection throttled! Please wait before reconnecting.");
+ this.field_147386_b.scheduleOutboundPacket(new S00PacketDisconnect(chatcomponenttext), new GenericFutureListener[0]);
+ this.field_147386_b.closeChannel(chatcomponenttext); // Should be close
+ return;
+ }
+
+ throttleTracker.put(address, currentTime);
+ throttleCounter++;
+
+ if (throttleCounter > 200)
+ {
+ throttleCounter = 0;
+ // Cleanup stale entries
+ java.util.Iterator iter = throttleTracker.entrySet().iterator();
+
+ while (iter.hasNext())
+ {
+ java.util.Map.Entry<InetAddress, Long> entry = (java.util.Map.Entry) iter.next();
+
+ if (entry.getValue() > connectionThrottle)
+ {
+ iter.remove();
+ }
+ }
+ }
+ }
+ }
+ catch (Throwable t)
+ {
+ org.apache.logging.log4j.LogManager.getLogger().debug("Failed to check connection throttle", t);
+ }
+
+ // CraftBukkit end
+
if (p_147383_1_.func_149595_d() > 5)
{
chatcomponenttext = new ChatComponentText("Outdated server! I\'m still on 1.7.10");
@@ -54,6 +117,33 @@
else
{
this.field_147386_b.setNetHandler(new NetHandlerLoginServer(this.field_147387_a, this.field_147386_b));
+
+ // Spigot Start
+ if (org.spigotmc.SpigotConfig.bungee)
+ {
+ String[] split = p_147383_1_.field_149598_b.split("\00");
+
+ if (split.length == 3 || split.length == 4)
+ {
+ p_147383_1_.field_149598_b = split[0];
+ field_147386_b.socketAddress = new java.net.InetSocketAddress(split[1], ((java.net.InetSocketAddress) field_147386_b.getSocketAddress()).getPort());
+ field_147386_b.spoofedUUID = UUIDTypeAdapter.fromString( split[2] );
+ }
+ else
+ {
+ chatcomponenttext = new ChatComponentText("If you wish to use IP forwarding, please enable it in your BungeeCord config as well!");
+ this.field_147386_b.scheduleOutboundPacket(new S00PacketDisconnect(chatcomponenttext), new GenericFutureListener[0]);
+ this.field_147386_b.closeChannel(chatcomponenttext);
+ return;
+ }
+
+ if (split.length == 4)
+ {
+ field_147386_b.spoofedProfile = gson.fromJson(split[3], Property[].class);
+ }
+ }
+ // Spigot End
+ ((NetHandlerLoginServer) this.field_147386_b.getNetHandler()).hostname = p_147383_1_.field_149598_b + ":" + p_147383_1_.field_149599_c; // CraftBukkit - set hostname
}
break;

View File

@ -0,0 +1,239 @@
--- ../src-base/minecraft/net/minecraft/server/network/NetHandlerLoginServer.java
+++ ../src-work/minecraft/net/minecraft/server/network/NetHandlerLoginServer.java
@@ -13,6 +13,7 @@
import java.util.UUID;
import java.util.concurrent.atomic.AtomicInteger;
import javax.crypto.SecretKey;
+
import net.minecraft.network.EnumConnectionState;
import net.minecraft.network.NetworkManager;
import net.minecraft.network.login.INetHandlerLoginServer;
@@ -29,6 +30,14 @@
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
+// CraftBukkit start
+import net.minecraft.entity.player.EntityPlayerMP;
+import org.bukkit.craftbukkit.util.Waitable;
+import org.bukkit.event.player.AsyncPlayerPreLoginEvent;
+import org.bukkit.event.player.PlayerPreLoginEvent;
+// CraftBukkit end
+import com.mojang.authlib.properties.Property;
+
public class NetHandlerLoginServer implements INetHandlerLoginServer
{
private static final AtomicInteger field_147331_b = new AtomicInteger(0);
@@ -37,16 +46,17 @@
private final byte[] field_147330_e = new byte[4];
private final MinecraftServer field_147327_f;
public final NetworkManager field_147333_a;
- private NetHandlerLoginServer.LoginState field_147328_g;
+ private LoginState field_147328_g;
private int field_147336_h;
private GameProfile field_147337_i;
private String field_147334_j;
private SecretKey field_147335_k;
+ public String hostname = ""; // CraftBukkit - add field
private static final String __OBFID = "CL_00001458";
public NetHandlerLoginServer(MinecraftServer p_i45298_1_, NetworkManager p_i45298_2_)
{
- this.field_147328_g = NetHandlerLoginServer.LoginState.HELLO;
+ this.field_147328_g = LoginState.HELLO;
this.field_147334_j = "";
this.field_147327_f = p_i45298_1_;
this.field_147333_a = p_i45298_2_;
@@ -55,7 +65,7 @@
public void onNetworkTick()
{
- if (this.field_147328_g == NetHandlerLoginServer.LoginState.READY_TO_ACCEPT)
+ if (this.field_147328_g == LoginState.READY_TO_ACCEPT)
{
this.func_147326_c();
}
@@ -81,24 +91,54 @@
}
}
+ // Spigot start
+ public void initUUID()
+ {
+ UUID uuid;
+ if ( field_147333_a.spoofedUUID != null )
+ {
+ uuid = field_147333_a.spoofedUUID;
+ } else
+ {
+ uuid = UUID.nameUUIDFromBytes( ( "OfflinePlayer:" + this.field_147337_i.getName() ).getBytes( Charsets.UTF_8 ) );
+ }
+
+ this.field_147337_i = new GameProfile( uuid, this.field_147337_i.getName() );
+
+ if (field_147333_a.spoofedProfile != null)
+ {
+ for ( Property property : field_147333_a.spoofedProfile )
+ {
+ this.field_147337_i.getProperties().put( property.getName(), property );
+ }
+ }
+ }
+ // Spigot end
+
public void func_147326_c()
{
+ // Spigot start - Moved to initUUID
+ /*
if (!this.field_147337_i.isComplete())
{
this.field_147337_i = this.func_152506_a(this.field_147337_i);
}
+ */
+ // Spigot end
- String s = this.field_147327_f.getConfigurationManager().allowUserToConnect(this.field_147333_a.getSocketAddress(), this.field_147337_i);
+ // CraftBukkit start - fire PlayerLoginEvent
+ EntityPlayerMP s = this.field_147327_f.getConfigurationManager().attemptLogin(this, this.field_147337_i, this.hostname);
- if (s != null)
+ if (s == null)
{
- this.func_147322_a(s);
+ // this.func_147322_a(s);
+ // CraftBukkit end
}
else
{
this.field_147328_g = NetHandlerLoginServer.LoginState.ACCEPTED;
this.field_147333_a.scheduleOutboundPacket(new S02PacketLoginSuccess(this.field_147337_i), new GenericFutureListener[0]);
- FMLNetworkHandler.fmlServerHandshake(this.field_147327_f.getConfigurationManager(), this.field_147333_a, this.field_147327_f.getConfigurationManager().createPlayerForUser(this.field_147337_i));
+ FMLNetworkHandler.fmlServerHandshake(this.field_147327_f.getConfigurationManager(), this.field_147333_a, this.field_147327_f.getConfigurationManager().processLogin(this.field_147337_i, s)); // CraftBukkit - add player reference
}
}
@@ -114,29 +154,29 @@
public void onConnectionStateTransition(EnumConnectionState p_147232_1_, EnumConnectionState p_147232_2_)
{
- Validate.validState(this.field_147328_g == NetHandlerLoginServer.LoginState.ACCEPTED || this.field_147328_g == NetHandlerLoginServer.LoginState.HELLO, "Unexpected change in protocol", new Object[0]);
+ Validate.validState(this.field_147328_g == LoginState.ACCEPTED || this.field_147328_g == LoginState.HELLO, "Unexpected change in protocol", new Object[0]);
Validate.validState(p_147232_2_ == EnumConnectionState.PLAY || p_147232_2_ == EnumConnectionState.LOGIN, "Unexpected protocol " + p_147232_2_, new Object[0]);
}
public void processLoginStart(C00PacketLoginStart p_147316_1_)
{
- Validate.validState(this.field_147328_g == NetHandlerLoginServer.LoginState.HELLO, "Unexpected hello packet", new Object[0]);
+ Validate.validState(this.field_147328_g == LoginState.HELLO, "Unexpected hello packet", new Object[0]);
this.field_147337_i = p_147316_1_.func_149304_c();
if (this.field_147327_f.isServerInOnlineMode() && !this.field_147333_a.isLocalChannel())
{
- this.field_147328_g = NetHandlerLoginServer.LoginState.KEY;
+ this.field_147328_g = LoginState.KEY;
this.field_147333_a.scheduleOutboundPacket(new S01PacketEncryptionRequest(this.field_147334_j, this.field_147327_f.getKeyPair().getPublic(), this.field_147330_e), new GenericFutureListener[0]);
}
else
{
- this.field_147328_g = NetHandlerLoginServer.LoginState.READY_TO_ACCEPT;
+ (new ThreadPlayerLookupUUID(this, "User Authenticator #" + field_147331_b.incrementAndGet())).start(); // Spigot
}
}
public void processEncryptionResponse(C01PacketEncryptionResponse p_147315_1_)
{
- Validate.validState(this.field_147328_g == NetHandlerLoginServer.LoginState.KEY, "Unexpected key packet", new Object[0]);
+ Validate.validState(this.field_147328_g == LoginState.KEY, "Unexpected key packet", new Object[0]);
PrivateKey privatekey = this.field_147327_f.getKeyPair().getPrivate();
if (!Arrays.equals(this.field_147330_e, p_147315_1_.func_149299_b(privatekey)))
@@ -148,51 +188,7 @@
this.field_147335_k = p_147315_1_.func_149300_a(privatekey);
this.field_147328_g = NetHandlerLoginServer.LoginState.AUTHENTICATING;
this.field_147333_a.enableEncryption(this.field_147335_k);
- (new Thread("User Authenticator #" + field_147331_b.incrementAndGet())
- {
- private static final String __OBFID = "CL_00001459";
- public void run()
- {
- GameProfile gameprofile = NetHandlerLoginServer.this.field_147337_i;
-
- try
- {
- String s = (new BigInteger(CryptManager.getServerIdHash(NetHandlerLoginServer.this.field_147334_j, NetHandlerLoginServer.this.field_147327_f.getKeyPair().getPublic(), NetHandlerLoginServer.this.field_147335_k))).toString(16);
- NetHandlerLoginServer.this.field_147337_i = NetHandlerLoginServer.this.field_147327_f.func_147130_as().hasJoinedServer(new GameProfile((UUID)null, gameprofile.getName()), s);
-
- if (NetHandlerLoginServer.this.field_147337_i != null)
- {
- NetHandlerLoginServer.logger.info("UUID of player " + NetHandlerLoginServer.this.field_147337_i.getName() + " is " + NetHandlerLoginServer.this.field_147337_i.getId());
- NetHandlerLoginServer.this.field_147328_g = NetHandlerLoginServer.LoginState.READY_TO_ACCEPT;
- }
- else if (NetHandlerLoginServer.this.field_147327_f.isSinglePlayer())
- {
- NetHandlerLoginServer.logger.warn("Failed to verify username but will let them in anyway!");
- NetHandlerLoginServer.this.field_147337_i = NetHandlerLoginServer.this.func_152506_a(gameprofile);
- NetHandlerLoginServer.this.field_147328_g = NetHandlerLoginServer.LoginState.READY_TO_ACCEPT;
- }
- else
- {
- NetHandlerLoginServer.this.func_147322_a("Failed to verify username!");
- NetHandlerLoginServer.logger.error("Username \'" + NetHandlerLoginServer.this.field_147337_i.getName() + "\' tried to join with an invalid session");
- }
- }
- catch (AuthenticationUnavailableException authenticationunavailableexception)
- {
- if (NetHandlerLoginServer.this.field_147327_f.isSinglePlayer())
- {
- NetHandlerLoginServer.logger.warn("Authentication servers are down but will let them in anyway!");
- NetHandlerLoginServer.this.field_147337_i = NetHandlerLoginServer.this.func_152506_a(gameprofile);
- NetHandlerLoginServer.this.field_147328_g = NetHandlerLoginServer.LoginState.READY_TO_ACCEPT;
- }
- else
- {
- NetHandlerLoginServer.this.func_147322_a("Authentication servers are down. Please try again later, sorry!");
- NetHandlerLoginServer.logger.error("Couldn\'t verify username because servers are unavailable");
- }
- }
- }
- }).start();
+ (new ThreadPlayerLookupUUID(this, "User Authenticator #" + field_147331_b.incrementAndGet())).start();
}
}
@@ -202,6 +198,37 @@
return new GameProfile(uuid, p_152506_1_.getName());
}
+ // Cauldron start - access methods for ThreadPlayerLookupUUID
+ static String getLoginServerId(NetHandlerLoginServer loginServer) {
+ return loginServer.field_147334_j;
+ }
+
+ static MinecraftServer getMinecraftServer(NetHandlerLoginServer loginServer) {
+ return loginServer.field_147327_f;
+ }
+
+ static SecretKey getSecretKey(NetHandlerLoginServer loginServer) {
+ return loginServer.field_147335_k;
+ }
+
+ static GameProfile processPlayerLoginGameProfile(NetHandlerLoginServer loginServer, GameProfile gameprofile) {
+ return loginServer.field_147337_i = gameprofile;
+ }
+
+ static GameProfile getGameProfile(NetHandlerLoginServer loginServer) {
+ return loginServer.field_147337_i;
+ }
+
+ static Logger getLogger() {
+ return logger;
+ }
+
+ static void setLoginState(NetHandlerLoginServer loginServer, LoginState state)
+ {
+ loginServer.field_147328_g = state;
+ }
+ // Cauldron end
+
static enum LoginState
{
HELLO,

View File

@ -0,0 +1,61 @@
--- ../src-base/minecraft/net/minecraft/server/network/NetHandlerStatusServer.java
+++ ../src-work/minecraft/net/minecraft/server/network/NetHandlerStatusServer.java
@@ -1,5 +1,6 @@
package net.minecraft.server.network;
+
import io.netty.util.concurrent.GenericFutureListener;
import net.minecraft.network.EnumConnectionState;
import net.minecraft.network.NetworkManager;
@@ -11,6 +12,13 @@
import net.minecraft.server.MinecraftServer;
import net.minecraft.util.IChatComponent;
+// CraftBukkit start
+import java.net.InetSocketAddress;
+import net.minecraft.network.ServerStatusResponse;
+import net.minecraft.util.ChatComponentText;
+import org.bukkit.craftbukkit.util.CraftIconCache;
+// CraftBukkit end
+
public class NetHandlerStatusServer implements INetHandlerStatusServer
{
private final MinecraftServer field_147314_a;
@@ -37,7 +45,36 @@
public void processServerQuery(C00PacketServerQuery p_147312_1_)
{
- this.field_147313_b.scheduleOutboundPacket(new S00PacketServerInfo(this.field_147314_a.func_147134_at()), new GenericFutureListener[0]);
+ // CraftBukkit start - fire ping event
+ class ServerListPingEvent extends org.bukkit.event.server.ServerListPingEvent
+ {
+ CraftIconCache icon = field_147314_a.server.getServerIcon();
+
+ ServerListPingEvent()
+ {
+ super(((InetSocketAddress) field_147313_b.getSocketAddress()).getAddress(), field_147314_a.getMOTD(), field_147314_a.getConfigurationManager().getCurrentPlayerCount(), field_147314_a.getConfigurationManager().getMaxPlayers());
+ }
+
+ @Override
+ public void setServerIcon(org.bukkit.util.CachedServerIcon icon)
+ {
+ if (!(icon instanceof CraftIconCache))
+ {
+ throw new IllegalArgumentException(icon + " was not created by " + org.bukkit.craftbukkit.CraftServer.class);
+ }
+
+ this.icon = (CraftIconCache) icon;
+ }
+ }
+ ServerListPingEvent event = new ServerListPingEvent();
+ this.field_147314_a.server.getPluginManager().callEvent(event);
+ ServerStatusResponse ping = new ServerStatusResponse();
+ ping.func_151320_a(event.icon.value);
+ ping.func_151315_a(new ChatComponentText(event.getMotd()));
+ ping.func_151319_a(new ServerStatusResponse.PlayerCountData(event.getMaxPlayers(), field_147314_a.getConfigurationManager().getCurrentPlayerCount()));
+ ping.func_151321_a(new ServerStatusResponse.MinecraftProtocolVersionIdentifier(field_147314_a.getServerModName() + " " + field_147314_a.getMinecraftVersion(), 5)); // TODO: Update when protocol changes
+ this.field_147313_b.scheduleOutboundPacket(new S00PacketServerInfo(ping), new GenericFutureListener[0]);
+ // CraftBukkit end
}
public void processPing(C01PacketPing p_147311_1_)