mirror of
https://github.com/PaperMC/Paper.git
synced 2024-12-02 13:07:06 +01:00
41e6f20420
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 Bukkit Changes: fdff0cd4 PR-869: Add Enderman#teleport and Enderman#teleportTowards dfd86ee7 Improve sendSignChange and related documentation beced2b2 PR-867: Add Player#sendBlockUpdate to send tile entity updates CraftBukkit Changes: ad6d0cffb SPIGOT-7394: Fix another issue with sendSignChange 66c5ce4c7 SPIGOT-7391: Preserve vanilla sign json where not modified by event ae3824f94 PR-1204: Add Enderman#teleport and Enderman#teleportTowards 5863a2eae Fix sendSignChange not working 4a7eadc97 PR-1201: Add Player#sendBlockUpdate to send tile entity updates 789324e30 Work around issue placing decorated pots
116 lines
4.5 KiB
Diff
116 lines
4.5 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..a5a7624f1f372a26b982836cd31cff15e2589e9b
|
|
--- /dev/null
|
|
+++ b/src/main/java/com/destroystokyo/paper/network/PaperNetworkClient.java
|
|
@@ -0,0 +1,49 @@
|
|
+package com.destroystokyo.paper.network;
|
|
+
|
|
+import java.net.InetSocketAddress;
|
|
+
|
|
+import javax.annotation.Nullable;
|
|
+import net.minecraft.network.Connection;
|
|
+
|
|
+public class PaperNetworkClient implements NetworkClient {
|
|
+
|
|
+ private final Connection networkManager;
|
|
+
|
|
+ PaperNetworkClient(Connection networkManager) {
|
|
+ this.networkManager = networkManager;
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public InetSocketAddress getAddress() {
|
|
+ return (InetSocketAddress) this.networkManager.getRemoteAddress();
|
|
+ }
|
|
+
|
|
+ @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/network/Connection.java b/src/main/java/net/minecraft/network/Connection.java
|
|
index 18092ddfd000ef36f0e182ac064c2f667b1e611b..f2c5764a447d0895e90a5aa73ee28a9feb453483 100644
|
|
--- a/src/main/java/net/minecraft/network/Connection.java
|
|
+++ b/src/main/java/net/minecraft/network/Connection.java
|
|
@@ -116,6 +116,10 @@ public class Connection extends SimpleChannelInboundHandler<Packet<?>> {
|
|
}
|
|
}
|
|
// Paper end - add pending task queue
|
|
+ // Paper start - NetworkClient implementation
|
|
+ public int protocolVersion;
|
|
+ public java.net.InetSocketAddress virtualHost;
|
|
+ // Paper end
|
|
|
|
public Connection(PacketFlow side) {
|
|
this.receiving = side;
|
|
diff --git a/src/main/java/net/minecraft/server/network/ServerHandshakePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerHandshakePacketListenerImpl.java
|
|
index 77d7f070cce1a47e41b5d4f5a1cc8c778352a126..a3b610cb1ed97a635677bc46ccdf0463c9918585 100644
|
|
--- a/src/main/java/net/minecraft/server/network/ServerHandshakePacketListenerImpl.java
|
|
+++ b/src/main/java/net/minecraft/server/network/ServerHandshakePacketListenerImpl.java
|
|
@@ -157,6 +157,10 @@ public class ServerHandshakePacketListenerImpl implements ServerHandshakePacketL
|
|
throw new UnsupportedOperationException("Invalid intention " + packet.getIntention());
|
|
}
|
|
|
|
+ // Paper start - NetworkClient implementation
|
|
+ this.connection.protocolVersion = packet.getProtocolVersion();
|
|
+ this.connection.virtualHost = com.destroystokyo.paper.network.PaperNetworkClient.prepareVirtualHost(packet.hostName, packet.port);
|
|
+ // Paper end
|
|
}
|
|
|
|
@Override
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
|
index e63528f7e089515ee5db399142489d1d364e9d9b..c46c8a2203c7f54da54ae5d066dc3d25f993560a 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
|
@@ -278,6 +278,20 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
|
|
}
|
|
}
|
|
|
|
+ // Paper start - Implement NetworkClient
|
|
+ @Override
|
|
+ public int getProtocolVersion() {
|
|
+ if (getHandle().connection == null) return -1;
|
|
+ return getHandle().connection.connection.protocolVersion;
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public InetSocketAddress getVirtualHost() {
|
|
+ if (getHandle().connection == null) return null;
|
|
+ return getHandle().connection.connection.virtualHost;
|
|
+ }
|
|
+ // Paper end
|
|
+
|
|
@Override
|
|
public double getEyeHeight(boolean ignorePose) {
|
|
if (ignorePose) {
|