3
0
Mirror von https://github.com/GeyserMC/Geyser.git synchronisiert 2024-11-19 14:30:17 +01:00

Feat: Make connection data exposed in api less prone to throw errors (#4604)

* Feat: Make connection data exposed in api less prone to throw errors

* address reviews

* review
Dieser Commit ist enthalten in:
chris 2024-05-10 23:58:27 +02:00 committet von GitHub
Ursprung 627c2babe9
Commit e697eb3ae3
Es konnte kein GPG-Schlüssel zu dieser Signatur gefunden werden
GPG-Schlüssel-ID: B5690EEEBB952194
4 geänderte Dateien mit 35 neuen und 12 gelöschten Zeilen

Datei anzeigen

@ -46,13 +46,35 @@ public final class ConnectionRequestEvent implements Event, Cancellable {
this.proxyIp = proxyIp; this.proxyIp = proxyIp;
} }
/**
* The IP address of the client attempting to connect
*
* @return the IP address of the client attempting to connect
* @deprecated Use {@link #inetSocketAddress()} instead
*/
@NonNull @Deprecated(forRemoval = true)
public InetSocketAddress getInetSocketAddress() {
return ip;
}
/**
* The IP address of the proxy handling the connection. It will return null if there is no proxy.
*
* @return the IP address of the proxy handling the connection
* @deprecated Use {@link #proxyIp()} instead
*/
@Nullable @Deprecated(forRemoval = true)
public InetSocketAddress getProxyIp() {
return proxyIp;
}
/** /**
* The IP address of the client attempting to connect * The IP address of the client attempting to connect
* *
* @return the IP address of the client attempting to connect * @return the IP address of the client attempting to connect
*/ */
@NonNull @NonNull
public InetSocketAddress getInetSocketAddress() { public InetSocketAddress inetSocketAddress() {
return ip; return ip;
} }
@ -62,7 +84,7 @@ public final class ConnectionRequestEvent implements Event, Cancellable {
* @return the IP address of the proxy handling the connection * @return the IP address of the proxy handling the connection
*/ */
@Nullable @Nullable
public InetSocketAddress getProxyIp() { public InetSocketAddress proxyIp() {
return proxyIp; return proxyIp;
} }

Datei anzeigen

@ -25,11 +25,8 @@
package org.geysermc.geyser.network; package org.geysermc.geyser.network;
import io.netty.buffer.ByteBuf;
import io.netty.channel.Channel; import io.netty.channel.Channel;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.DefaultEventLoopGroup; import io.netty.channel.DefaultEventLoopGroup;
import io.netty.channel.SimpleChannelInboundHandler;
import io.netty.util.concurrent.DefaultThreadFactory; import io.netty.util.concurrent.DefaultThreadFactory;
import org.checkerframework.checker.nullness.qual.NonNull; import org.checkerframework.checker.nullness.qual.NonNull;
import org.cloudburstmc.protocol.bedrock.BedrockPeer; import org.cloudburstmc.protocol.bedrock.BedrockPeer;
@ -37,7 +34,6 @@ import org.cloudburstmc.protocol.bedrock.BedrockServerSession;
import org.cloudburstmc.protocol.bedrock.netty.codec.packet.BedrockPacketCodec; import org.cloudburstmc.protocol.bedrock.netty.codec.packet.BedrockPacketCodec;
import org.cloudburstmc.protocol.bedrock.netty.initializer.BedrockServerInitializer; import org.cloudburstmc.protocol.bedrock.netty.initializer.BedrockServerInitializer;
import org.geysermc.geyser.GeyserImpl; import org.geysermc.geyser.GeyserImpl;
import org.geysermc.geyser.api.event.bedrock.SessionInitializeEvent;
import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.session.GeyserSession;
import java.net.InetSocketAddress; import java.net.InetSocketAddress;
@ -72,7 +68,6 @@ public class GeyserServerInitializer extends BedrockServerInitializer {
channel.pipeline().addAfter(BedrockPacketCodec.NAME, InvalidPacketHandler.NAME, new InvalidPacketHandler(session)); channel.pipeline().addAfter(BedrockPacketCodec.NAME, InvalidPacketHandler.NAME, new InvalidPacketHandler(session));
bedrockServerSession.setPacketHandler(new UpstreamPacketHandler(this.geyser, session)); bedrockServerSession.setPacketHandler(new UpstreamPacketHandler(this.geyser, session));
this.geyser.eventBus().fire(new SessionInitializeEvent(session));
} catch (Throwable e) { } catch (Throwable e) {
// Error must be caught or it will be swallowed // Error must be caught or it will be swallowed
this.geyser.getLogger().error("Error occurred while initializing player!", e); this.geyser.getLogger().error("Error occurred while initializing player!", e);

Datei anzeigen

@ -54,6 +54,7 @@ import org.cloudburstmc.protocol.common.PacketSignal;
import org.cloudburstmc.protocol.common.util.Zlib; import org.cloudburstmc.protocol.common.util.Zlib;
import org.geysermc.geyser.Constants; import org.geysermc.geyser.Constants;
import org.geysermc.geyser.GeyserImpl; import org.geysermc.geyser.GeyserImpl;
import org.geysermc.geyser.api.event.bedrock.SessionInitializeEvent;
import org.geysermc.geyser.api.network.AuthType; import org.geysermc.geyser.api.network.AuthType;
import org.geysermc.geyser.api.pack.PackCodec; import org.geysermc.geyser.api.pack.PackCodec;
import org.geysermc.geyser.api.pack.ResourcePack; import org.geysermc.geyser.api.pack.ResourcePack;
@ -188,6 +189,9 @@ public class UpstreamPacketHandler extends LoggingPacketHandler {
return PacketSignal.HANDLED; return PacketSignal.HANDLED;
} }
// Fire SessionInitializeEvent here as we now know the client data
geyser.eventBus().fire(new SessionInitializeEvent(session));
PlayStatusPacket playStatus = new PlayStatusPacket(); PlayStatusPacket playStatus = new PlayStatusPacket();
playStatus.setStatus(PlayStatusPacket.Status.LOGIN_SUCCESS); playStatus.setStatus(PlayStatusPacket.Status.LOGIN_SUCCESS);
session.sendUpstreamPacket(playStatus); session.sendUpstreamPacket(playStatus);

Datei anzeigen

@ -1077,9 +1077,11 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource {
if (!closed) { if (!closed) {
loggedIn = false; loggedIn = false;
// Fire SessionDisconnectEvent
SessionDisconnectEvent disconnectEvent = new SessionDisconnectEvent(this, reason); SessionDisconnectEvent disconnectEvent = new SessionDisconnectEvent(this, reason);
if (authData != null && clientData != null) { // can occur if player disconnects before Bedrock auth finishes
// Fire SessionDisconnectEvent
geyser.getEventBus().fire(disconnectEvent); geyser.getEventBus().fire(disconnectEvent);
}
// Disconnect downstream if necessary // Disconnect downstream if necessary
if (downstream != null) { if (downstream != null) {
@ -1404,7 +1406,7 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource {
@Override @Override
public String name() { public String name() {
return null; return playerEntity != null ? javaUsername() : bedrockUsername();
} }
@Override @Override
@ -1941,12 +1943,12 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource {
@Override @Override
public @MonotonicNonNull String javaUsername() { public @MonotonicNonNull String javaUsername() {
return playerEntity.getUsername(); return playerEntity != null ? playerEntity.getUsername() : null;
} }
@Override @Override
public UUID javaUuid() { public UUID javaUuid() {
return playerEntity.getUuid(); return playerEntity != null ? playerEntity.getUuid() : null ;
} }
@Override @Override