mirror of
https://github.com/barkeser2002/CatServer.git
synced 2026-09-25 14:26:00 +03:00
103 lines
6.1 KiB
Diff
103 lines
6.1 KiB
Diff
--- ../src-base/minecraft/net/minecraft/server/network/NetHandlerHandshakeTCP.java
|
|
+++ ../src-work/minecraft/net/minecraft/server/network/NetHandlerHandshakeTCP.java
|
|
@@ -8,9 +8,23 @@
|
|
import net.minecraft.server.MinecraftServer;
|
|
import net.minecraft.util.text.ITextComponent;
|
|
import net.minecraft.util.text.TextComponentString;
|
|
+import net.minecraftforge.fml.common.FMLCommonHandler;
|
|
+import org.apache.logging.log4j.LogManager;
|
|
+import org.spigotmc.SpigotConfig;
|
|
|
|
+import java.net.InetAddress;
|
|
+import java.net.InetSocketAddress;
|
|
+import java.util.HashMap;
|
|
+import java.util.Iterator;
|
|
+import java.util.Map;
|
|
+
|
|
public class NetHandlerHandshakeTCP implements INetHandlerHandshakeServer
|
|
{
|
|
+ private static final com.google.gson.Gson gson = new com.google.gson.Gson(); // Spigot
|
|
+ // CraftBukkit start - add fields
|
|
+ private static final HashMap<InetAddress, Long> throttleTracker = new HashMap<InetAddress, Long>();
|
|
+ private static int throttleCounter = 0;
|
|
+ // CraftBukkit end
|
|
private final MinecraftServer server;
|
|
private final NetworkManager networkManager;
|
|
|
|
@@ -28,22 +42,71 @@
|
|
{
|
|
case LOGIN:
|
|
this.networkManager.setConnectionState(EnumConnectionState.LOGIN);
|
|
+ TextComponentString textComponentString;
|
|
+ try{
|
|
+ long currentTime = System.currentTimeMillis();
|
|
+ long connectionThrottle = MinecraftServer.getServerInst().server.getConnectionThrottle();
|
|
+ InetAddress address = ((java.net.InetSocketAddress)this.networkManager.getRemoteAddress()).getAddress();
|
|
|
|
+ synchronized (throttleTracker){
|
|
+ if(throttleTracker.containsKey(address) && !"127.0.0.1".equals(address.getHostAddress()) && currentTime - throttleTracker.get(address) < connectionThrottle){
|
|
+ throttleTracker.put(address,currentTime);
|
|
+ textComponentString = new TextComponentString("Connection throttled! Please wait before reconnecting.");
|
|
+ this.networkManager.sendPacket(new SPacketDisconnect(textComponentString));
|
|
+ this.networkManager.closeChannel(textComponentString);
|
|
+ return;
|
|
+ }
|
|
+ throttleTracker.put(address,currentTime);
|
|
+ throttleCounter++;
|
|
+ if(throttleCounter > 200){
|
|
+ throttleCounter = 0;
|
|
+ Iterator iter = throttleTracker.entrySet().iterator();
|
|
+ while (iter.hasNext()){
|
|
+ Map.Entry<InetAddress,Long> entry = (Map.Entry<InetAddress, Long>) iter.next();
|
|
+ if(entry.getValue() > connectionThrottle){
|
|
+ iter.remove();
|
|
+ }
|
|
+ }
|
|
+ }
|
|
+ }
|
|
+ } catch (Throwable t){
|
|
+ LogManager.getLogger().debug("Failed to check connection throttle",t);
|
|
+ }
|
|
+
|
|
if (packetIn.getProtocolVersion() > 210)
|
|
{
|
|
- TextComponentString textcomponentstring = new TextComponentString("Outdated server! I\'m still on 1.10.2");
|
|
+ TextComponentString textcomponentstring = new TextComponentString( java.text.MessageFormat.format( org.spigotmc.SpigotConfig.outdatedServerMessage.replaceAll("'", "''"), "1.10.2" ) ); // Spigot
|
|
this.networkManager.sendPacket(new SPacketDisconnect(textcomponentstring));
|
|
this.networkManager.closeChannel(textcomponentstring);
|
|
}
|
|
else if (packetIn.getProtocolVersion() < 210)
|
|
{
|
|
- TextComponentString textcomponentstring1 = new TextComponentString("Outdated client! Please use 1.10.2");
|
|
- this.networkManager.sendPacket(new SPacketDisconnect(textcomponentstring1));
|
|
- this.networkManager.closeChannel(textcomponentstring1);
|
|
+ TextComponentString textcomponentstring = new TextComponentString( java.text.MessageFormat.format( org.spigotmc.SpigotConfig.outdatedClientMessage.replaceAll("'", "''"), "1.10.2" ) ); // Spigot
|
|
+ this.networkManager.sendPacket(new SPacketDisconnect(textcomponentstring));
|
|
+ this.networkManager.closeChannel(textcomponentstring);
|
|
}
|
|
else
|
|
{
|
|
this.networkManager.setNetHandler(new NetHandlerLoginServer(this.server, this.networkManager));
|
|
+ //Spigot Start
|
|
+ if(SpigotConfig.bungee){
|
|
+ String[] split = packetIn.ip.split("\00\\|", 2)[0].split("\00");
|
|
+ if(split.length == 3 || split.length == 4){
|
|
+ packetIn.ip = split[0];
|
|
+ networkManager.socketAddress = new InetSocketAddress(split[1],((InetSocketAddress)networkManager.getRemoteAddress()).getPort());
|
|
+ networkManager.spoofedUUID = com.mojang.util.UUIDTypeAdapter.fromString(split[2]);
|
|
+ }else{
|
|
+ textComponentString = new TextComponentString("If you wish to use IP forwarding, please enable it in your BungeeCord config as well!");
|
|
+ this.networkManager.sendPacket(new SPacketDisconnect(textComponentString));
|
|
+ this.networkManager.closeChannel(textComponentString);
|
|
+ return;
|
|
+ }
|
|
+ if(split.length == 4){
|
|
+ networkManager.spoofedProfile = gson.fromJson(split[3],com.mojang.authlib.properties.Property[].class);
|
|
+ }
|
|
+ }
|
|
+ //Spigot end
|
|
+ ((NetHandlerLoginServer)this.networkManager.getNetHandler()).hostname = packetIn.ip + ":" + packetIn.port; // CraftBukkit - set hostname
|
|
}
|
|
|
|
break;
|