mirror of
https://github.com/PaperMC/Paper.git
synced 2024-11-30 04:02:50 +01:00
ad9c58e103
Since 1.21.2, vanilla split relative teleportation flags into position and delta/velocity flags into separate enum entries. This highlighted a design flaw in the paper api addition for teleport flags, which just simply mirrored internals while also only being able to apply the delta/velocity part of a flag, given the teleport target is always absolute in the API. This patch proposes to simply no longer expose the non-velocity related flags to the API, instead marking the entire Relative enum as being purely velocity related, as non-velocity related flags are not useful to callers. This was done over simply exposing all internal flags, as another vanilla change to the internal enum would result in the same breakage. The newly proposed API *only* promises that the passed flags prevent the loss of velocity in the specific axis/context, which should be independent enough of vanillas specific implementation of this feature.
65 lines
3.5 KiB
Diff
65 lines
3.5 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: nostalfinals <yuu8583@proton.me>
|
|
Date: Mon, 8 Apr 2024 23:24:38 +0800
|
|
Subject: [PATCH] Added API to get player ha proxy address
|
|
|
|
|
|
diff --git a/src/main/java/net/minecraft/network/Connection.java b/src/main/java/net/minecraft/network/Connection.java
|
|
index ea16dfa718b526d6520d7fcfc21d28f972f1f2bf..4b9da6e2140b14f1e56056f5e9e94b2169d85501 100644
|
|
--- a/src/main/java/net/minecraft/network/Connection.java
|
|
+++ b/src/main/java/net/minecraft/network/Connection.java
|
|
@@ -153,6 +153,7 @@ public class Connection extends SimpleChannelInboundHandler<Packet<?>> {
|
|
this.stopReadingPackets = true;
|
|
}
|
|
// Paper end - packet limiter
|
|
+ @Nullable public SocketAddress haProxyAddress; // Paper - Add API to get player's proxy address
|
|
|
|
public Connection(PacketFlow side) {
|
|
this.receiving = side;
|
|
diff --git a/src/main/java/net/minecraft/server/network/ServerConnectionListener.java b/src/main/java/net/minecraft/server/network/ServerConnectionListener.java
|
|
index c62df32af11636ad408b584fcc590590ce4fb0d0..baed0bb80d44973f9323bbe536551182979caff2 100644
|
|
--- a/src/main/java/net/minecraft/server/network/ServerConnectionListener.java
|
|
+++ b/src/main/java/net/minecraft/server/network/ServerConnectionListener.java
|
|
@@ -144,6 +144,13 @@ public class ServerConnectionListener {
|
|
|
|
Connection connection = (Connection) channel.pipeline().get("packet_handler");
|
|
connection.address = socketaddr;
|
|
+
|
|
+ // Paper start - Add API to get player's proxy address
|
|
+ final String proxyAddress = message.destinationAddress();
|
|
+ final int proxyPort = message.destinationPort();
|
|
+
|
|
+ connection.haProxyAddress = new java.net.InetSocketAddress(proxyAddress, proxyPort);
|
|
+ // Paper end - Add API to get player's proxy address
|
|
}
|
|
} else {
|
|
super.channelRead(ctx, msg);
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
|
index 58d12409447903f855baa6beb149aa658bf7b1bb..766c1e80997d1bed99f4ebf9499eec60bf70a536 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
|
@@ -270,7 +270,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
|
|
|
|
@Override
|
|
public InetSocketAddress getAddress() {
|
|
- if (this.getHandle().connection.protocol() == null) return null;
|
|
+ if (this.getHandle().connection == null) return null;
|
|
|
|
SocketAddress addr = this.getHandle().connection.getRemoteAddress();
|
|
if (addr instanceof InetSocketAddress) {
|
|
@@ -280,6 +280,15 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
|
|
}
|
|
}
|
|
|
|
+ // Paper start - Add API to get player's proxy address
|
|
+ @Override
|
|
+ public @Nullable InetSocketAddress getHAProxyAddress() {
|
|
+ if (this.getHandle().connection == null) return null;
|
|
+
|
|
+ return this.getHandle().connection.connection.haProxyAddress instanceof final InetSocketAddress inetSocketAddress ? inetSocketAddress : null;
|
|
+ }
|
|
+ // Paper end - Add API to get player's proxy address
|
|
+
|
|
public interface TransferCookieConnection {
|
|
|
|
boolean isTransferred();
|