70ad51a80c
Upstream has released updates that appears to apply and compile correctly. This update has not been tested by PaperMC and as with ANY update, please do your own testing My recent work on serialization is now in CraftBukkit so was able to drop the patch and Paper is now consistent with upstream. Bukkit Changes: e2699636 Move API notes to more obvious location CraftBukkit Changes: 1b2830a3 SPIGOT-4441: Fix serializing Components to and from Legacy
137 lines
5.7 KiB
Diff
137 lines
5.7 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Minecrell <minecrell@minecrell.net>
|
|
Date: Tue, 10 Oct 2017 18:45:20 +0200
|
|
Subject: [PATCH] Expose client protocol version and virtual host
|
|
|
|
|
|
diff --git a/src/main/java/com/destroystokyo/paper/network/PaperNetworkClient.java b/src/main/java/com/destroystokyo/paper/network/PaperNetworkClient.java
|
|
new file mode 100644
|
|
index 0000000000000000000000000000000000000000..5caca6439d2135e34880d501397fe2ea197d7249
|
|
--- /dev/null
|
|
+++ b/src/main/java/com/destroystokyo/paper/network/PaperNetworkClient.java
|
|
@@ -0,0 +1,50 @@
|
|
+package com.destroystokyo.paper.network;
|
|
+
|
|
+import net.minecraft.server.NetworkManager;
|
|
+
|
|
+import java.net.InetSocketAddress;
|
|
+
|
|
+import javax.annotation.Nullable;
|
|
+
|
|
+public class PaperNetworkClient implements NetworkClient {
|
|
+
|
|
+ private final NetworkManager networkManager;
|
|
+
|
|
+ PaperNetworkClient(NetworkManager networkManager) {
|
|
+ this.networkManager = networkManager;
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public InetSocketAddress getAddress() {
|
|
+ return (InetSocketAddress) this.networkManager.getSocketAddress();
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public int getProtocolVersion() {
|
|
+ return this.networkManager.protocolVersion;
|
|
+ }
|
|
+
|
|
+ @Nullable
|
|
+ @Override
|
|
+ public InetSocketAddress getVirtualHost() {
|
|
+ return this.networkManager.virtualHost;
|
|
+ }
|
|
+
|
|
+ public static InetSocketAddress prepareVirtualHost(String host, int port) {
|
|
+ int len = host.length();
|
|
+
|
|
+ // FML appends a marker to the host to recognize FML clients (\0FML\0)
|
|
+ int pos = host.indexOf('\0');
|
|
+ if (pos >= 0) {
|
|
+ len = pos;
|
|
+ }
|
|
+
|
|
+ // When clients connect with a SRV record, their host contains a trailing '.'
|
|
+ if (len > 0 && host.charAt(len - 1) == '.') {
|
|
+ len--;
|
|
+ }
|
|
+
|
|
+ return InetSocketAddress.createUnresolved(host.substring(0, len), port);
|
|
+ }
|
|
+
|
|
+}
|
|
diff --git a/src/main/java/net/minecraft/server/HandshakeListener.java b/src/main/java/net/minecraft/server/HandshakeListener.java
|
|
index d0b9c6e3dcae76d802e095731c78fb9693982f90..8928d93e49bec174e86a2b451ac40f3946193009 100644
|
|
--- a/src/main/java/net/minecraft/server/HandshakeListener.java
|
|
+++ b/src/main/java/net/minecraft/server/HandshakeListener.java
|
|
@@ -15,6 +15,7 @@ public class HandshakeListener implements PacketHandshakingInListener {
|
|
|
|
private final MinecraftServer a;
|
|
private final NetworkManager b;
|
|
+ private NetworkManager getNetworkManager() { return b; } // Paper - OBFHELPER
|
|
|
|
public HandshakeListener(MinecraftServer minecraftserver, NetworkManager networkmanager) {
|
|
this.a = minecraftserver;
|
|
@@ -129,6 +130,10 @@ public class HandshakeListener implements PacketHandshakingInListener {
|
|
throw new UnsupportedOperationException("Invalid intention " + packethandshakinginsetprotocol.b());
|
|
}
|
|
|
|
+ // Paper start - NetworkClient implementation
|
|
+ this.getNetworkManager().protocolVersion = packethandshakinginsetprotocol.getProtocolVersion();
|
|
+ this.getNetworkManager().virtualHost = com.destroystokyo.paper.network.PaperNetworkClient.prepareVirtualHost(packethandshakinginsetprotocol.hostname, packethandshakinginsetprotocol.port);
|
|
+ // Paper end
|
|
}
|
|
|
|
@Override
|
|
diff --git a/src/main/java/net/minecraft/server/NetworkManager.java b/src/main/java/net/minecraft/server/NetworkManager.java
|
|
index 3ccf1663669c79a63a6b3a9f6dc17a6e25e91915..e2d8ed88f05bf8cb214329ea27ac2b67f43e071a 100644
|
|
--- a/src/main/java/net/minecraft/server/NetworkManager.java
|
|
+++ b/src/main/java/net/minecraft/server/NetworkManager.java
|
|
@@ -60,6 +60,10 @@ public class NetworkManager extends SimpleChannelInboundHandler<Packet<?>> {
|
|
private float s;
|
|
private int t;
|
|
private boolean u;
|
|
+ // Paper start - NetworkClient implementation
|
|
+ public int protocolVersion;
|
|
+ public java.net.InetSocketAddress virtualHost;
|
|
+ // Paper end
|
|
|
|
public NetworkManager(EnumProtocolDirection enumprotocoldirection) {
|
|
this.h = enumprotocoldirection;
|
|
diff --git a/src/main/java/net/minecraft/server/PacketHandshakingInSetProtocol.java b/src/main/java/net/minecraft/server/PacketHandshakingInSetProtocol.java
|
|
index 4f008e4723d2cb0bcabb2d5621203d63c40c4923..8545146fb1f093f821e3b966d9337049575c6773 100644
|
|
--- a/src/main/java/net/minecraft/server/PacketHandshakingInSetProtocol.java
|
|
+++ b/src/main/java/net/minecraft/server/PacketHandshakingInSetProtocol.java
|
|
@@ -35,6 +35,7 @@ public class PacketHandshakingInSetProtocol implements Packet<PacketHandshakingI
|
|
return this.d;
|
|
}
|
|
|
|
+ public int getProtocolVersion() { return c(); } // Paper - OBFHELPER
|
|
public int c() {
|
|
return this.a;
|
|
}
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
|
index a4afce71be0707c43700b73ae0107074448e3d4a..3d4a1065fbe38239743e485d078b76b47981baf1 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
|
@@ -182,6 +182,20 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
|
|
}
|
|
}
|
|
|
|
+ // Paper start - Implement NetworkClient
|
|
+ @Override
|
|
+ public int getProtocolVersion() {
|
|
+ if (getHandle().playerConnection == null) return -1;
|
|
+ return getHandle().playerConnection.networkManager.protocolVersion;
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public InetSocketAddress getVirtualHost() {
|
|
+ if (getHandle().playerConnection == null) return null;
|
|
+ return getHandle().playerConnection.networkManager.virtualHost;
|
|
+ }
|
|
+ // Paper end
|
|
+
|
|
@Override
|
|
public double getEyeHeight(boolean ignorePose) {
|
|
if (ignorePose) {
|