91ef740292
Upstream has released updates that appear to apply and compile correctly. This update has not been tested by PaperMC and as with ANY update, please do your own testing Spigot Changes: 4225eac0 SPIGOT-6423: Improve IP forwarding
57 Zeilen
4.0 KiB
Diff
57 Zeilen
4.0 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: kashike <kashike@vq.lc>
|
|
Date: Wed, 13 Apr 2016 20:21:38 -0700
|
|
Subject: [PATCH] Add handshake event to allow plugins to handle client
|
|
handshaking logic themselves
|
|
|
|
|
|
diff --git a/src/main/java/net/minecraft/server/network/HandshakeListener.java b/src/main/java/net/minecraft/server/network/HandshakeListener.java
|
|
index 9b24afa4f4fe41d2261b16aaecec2144ac7d049f..5047a742d2e6a9749aa7d37e761d023a3425944b 100644
|
|
--- a/src/main/java/net/minecraft/server/network/HandshakeListener.java
|
|
+++ b/src/main/java/net/minecraft/server/network/HandshakeListener.java
|
|
@@ -29,7 +29,7 @@ public class HandshakeListener implements PacketHandshakingInListener {
|
|
// CraftBukkit end
|
|
private static final IChatBaseComponent a = new ChatComponentText("Ignoring status request");
|
|
private final MinecraftServer b;
|
|
- private final NetworkManager c;
|
|
+ private final NetworkManager c; final NetworkManager getNetworkManager() { return this.c; } // Paper - OBFHELPER
|
|
|
|
public HandshakeListener(MinecraftServer minecraftserver, NetworkManager networkmanager) {
|
|
this.b = minecraftserver;
|
|
@@ -88,8 +88,34 @@ public class HandshakeListener implements PacketHandshakingInListener {
|
|
this.c.close(chatmessage);
|
|
} else {
|
|
this.c.setPacketListener(new LoginListener(this.b, this.c));
|
|
+ // Paper start - handshake event
|
|
+ boolean proxyLogicEnabled = org.spigotmc.SpigotConfig.bungee;
|
|
+ boolean handledByEvent = false;
|
|
+ // Try and handle the handshake through the event
|
|
+ if (com.destroystokyo.paper.event.player.PlayerHandshakeEvent.getHandlerList().getRegisteredListeners().length != 0) { // Hello? Can you hear me?
|
|
+ java.net.InetSocketAddress socketAddress = (java.net.InetSocketAddress) this.getNetworkManager().socketAddress;
|
|
+ com.destroystokyo.paper.event.player.PlayerHandshakeEvent event = new com.destroystokyo.paper.event.player.PlayerHandshakeEvent(packethandshakinginsetprotocol.hostname, socketAddress.getAddress().getHostAddress(), !proxyLogicEnabled);
|
|
+ if (event.callEvent()) {
|
|
+ // If we've failed somehow, let the client know so and go no further.
|
|
+ if (event.isFailed()) {
|
|
+ chatmessage = new ChatMessage(event.getFailMessage());
|
|
+ this.getNetworkManager().sendPacket(new PacketLoginOutDisconnect(chatmessage));
|
|
+ this.getNetworkManager().close(chatmessage);
|
|
+ return;
|
|
+ }
|
|
+
|
|
+ if (event.getServerHostname() != null) packethandshakinginsetprotocol.hostname = event.getServerHostname();
|
|
+ if (event.getSocketAddressHostname() != null) this.getNetworkManager().socketAddress = new java.net.InetSocketAddress(event.getSocketAddressHostname(), socketAddress.getPort());
|
|
+ this.getNetworkManager().spoofedUUID = event.getUniqueId();
|
|
+ this.getNetworkManager().spoofedProfile = gson.fromJson(event.getPropertiesJson(), com.mojang.authlib.properties.Property[].class);
|
|
+ handledByEvent = true; // Hooray, we did it!
|
|
+ }
|
|
+ }
|
|
+ // Don't try and handle default logic if it's been handled by the event.
|
|
+ if (!handledByEvent && proxyLogicEnabled) {
|
|
+ // Paper end
|
|
// Spigot Start
|
|
- if (org.spigotmc.SpigotConfig.bungee) {
|
|
+ //if (org.spigotmc.SpigotConfig.bungee) { // Paper - comment out, we check above!
|
|
String[] split = packethandshakinginsetprotocol.hostname.split("\00");
|
|
if ( ( split.length == 3 || split.length == 4 ) && ( HOST_PATTERN.matcher( split[1] ).matches() ) ) {
|
|
packethandshakinginsetprotocol.hostname = split[0];
|