Skip to content

Commit bfaef43

Browse files
Allow users of the default client listener to decide whether to automatically follow transfer packets (#817)
1 parent 92acb01 commit bfaef43

File tree

2 files changed

+17
-8
lines changed

2 files changed

+17
-8
lines changed

protocol/src/main/java/org/geysermc/mcprotocollib/protocol/ClientListener.java

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -127,10 +127,12 @@ public void packetReceived(Session session, Packet packet) {
127127
} else if (packet instanceof ClientboundStartConfigurationPacket) {
128128
session.send(new ServerboundConfigurationAcknowledgedPacket());
129129
} else if (packet instanceof ClientboundTransferPacket transferPacket) {
130-
TcpClientSession newSession = new TcpClientSession(transferPacket.getHost(), transferPacket.getPort(), session.getPacketProtocol());
131-
newSession.setFlags(session.getFlags());
132-
session.disconnect("Transferring");
133-
newSession.connect(true, true);
130+
if (session.getFlag(MinecraftConstants.FOLLOW_TRANFERS, true)) {
131+
TcpClientSession newSession = new TcpClientSession(transferPacket.getHost(), transferPacket.getPort(), session.getPacketProtocol());
132+
newSession.setFlags(session.getFlags());
133+
session.disconnect("Transferring");
134+
newSession.connect(true, true);
135+
}
134136
}
135137
} else if (protocol.getState() == ProtocolState.CONFIGURATION) {
136138
if (packet instanceof ClientboundFinishConfigurationPacket) {
@@ -140,10 +142,12 @@ public void packetReceived(Session session, Packet packet) {
140142
session.send(new ServerboundSelectKnownPacks(Collections.emptyList()));
141143
}
142144
} else if (packet instanceof ClientboundTransferPacket transferPacket) {
143-
TcpClientSession newSession = new TcpClientSession(transferPacket.getHost(), transferPacket.getPort(), session.getPacketProtocol());
144-
newSession.setFlags(session.getFlags());
145-
session.disconnect("Transferring");
146-
newSession.connect(true, true);
145+
if (session.getFlag(MinecraftConstants.FOLLOW_TRANFERS, true)) {
146+
TcpClientSession newSession = new TcpClientSession(transferPacket.getHost(), transferPacket.getPort(), session.getPacketProtocol());
147+
newSession.setFlags(session.getFlags());
148+
session.disconnect("Transferring");
149+
newSession.connect(true, true);
150+
}
147151
}
148152
}
149153
}

protocol/src/main/java/org/geysermc/mcprotocollib/protocol/MinecraftConstants.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,11 @@ public final class MinecraftConstants {
5555
*/
5656
public static final Flag<Boolean> SEND_BLANK_KNOWN_PACKS_RESPONSE = new Flag<>("send-blank-known-packs-response", Boolean.class);
5757

58+
/**
59+
* Session flag for determining whether to create a new TcpClientSession when the Java server sends a ClientboundTransferPacket.
60+
*/
61+
public static final Flag<Boolean> FOLLOW_TRANFERS = new Flag<>("follow-transfers", Boolean.class);
62+
5863
// Server Key Constants
5964

6065
/**

0 commit comments

Comments
 (0)