From 34e7dc96a22aa8b7934b092662414efa05f5cd85 Mon Sep 17 00:00:00 2001 From: onebeastchris Date: Fri, 11 Jul 2025 03:15:30 +0200 Subject: [PATCH] Remove PlayerLoginEvent usage on Geyser-Spigot --- .../geyser/api/event/bedrock/SessionLoginEvent.java | 3 +++ .../platform/spigot/GeyserSpigotUpdateListener.java | 4 ++-- .../java/org/geysermc/geyser/session/GeyserSession.java | 9 ++++++--- 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/api/src/main/java/org/geysermc/geyser/api/event/bedrock/SessionLoginEvent.java b/api/src/main/java/org/geysermc/geyser/api/event/bedrock/SessionLoginEvent.java index 86a5ec6f8..9200c21f3 100644 --- a/api/src/main/java/org/geysermc/geyser/api/event/bedrock/SessionLoginEvent.java +++ b/api/src/main/java/org/geysermc/geyser/api/event/bedrock/SessionLoginEvent.java @@ -31,6 +31,7 @@ import org.geysermc.event.Cancellable; import org.geysermc.geyser.api.connection.GeyserConnection; import org.geysermc.geyser.api.event.connection.ConnectionEvent; import org.geysermc.geyser.api.network.RemoteServer; +import org.geysermc.geyser.api.util.PlatformType; import java.util.Map; import java.util.Objects; @@ -109,6 +110,8 @@ public final class SessionLoginEvent extends ConnectionEvent implements Cancella /** * Sets the {@link RemoteServer} to connect the session to. + * This method will only work as expected on {@link PlatformType#STANDALONE}, + * as on other Geyser platforms, the remote server is not determined by Geyser. * * @param remoteServer Sets the {@link RemoteServer} to connect to. */ diff --git a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserSpigotUpdateListener.java b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserSpigotUpdateListener.java index 8a8a43460..5856c8791 100644 --- a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserSpigotUpdateListener.java +++ b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserSpigotUpdateListener.java @@ -28,16 +28,16 @@ package org.geysermc.geyser.platform.spigot; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; -import org.bukkit.event.player.PlayerJoinEvent; import org.geysermc.geyser.GeyserImpl; import org.geysermc.geyser.Permissions; import org.geysermc.geyser.platform.spigot.command.SpigotCommandSource; import org.geysermc.geyser.util.VersionCheckUtils; +import org.spigotmc.event.player.PlayerSpawnLocationEvent; public final class GeyserSpigotUpdateListener implements Listener { @EventHandler - public void onPlayerJoin(final PlayerJoinEvent event) { + public void onPlayerSpawnLocation(final PlayerSpawnLocationEvent event) { if (GeyserImpl.getInstance().getConfig().isNotifyOnNewBedrockUpdate()) { final Player player = event.getPlayer(); if (player.hasPermission(Permissions.CHECK_UPDATE)) { diff --git a/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java b/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java index dceb5707a..2fd82e662 100644 --- a/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java +++ b/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java @@ -120,6 +120,7 @@ import org.geysermc.geyser.api.entity.type.player.GeyserPlayerEntity; import org.geysermc.geyser.api.event.bedrock.SessionDisconnectEvent; import org.geysermc.geyser.api.event.bedrock.SessionLoginEvent; import org.geysermc.geyser.api.network.RemoteServer; +import org.geysermc.geyser.api.util.PlatformType; import org.geysermc.geyser.command.CommandRegistry; import org.geysermc.geyser.command.GeyserCommandSource; import org.geysermc.geyser.configuration.EmoteOffhandWorkaroundOption; @@ -174,11 +175,11 @@ import org.geysermc.geyser.session.cache.SkullCache; import org.geysermc.geyser.session.cache.StructureBlockCache; import org.geysermc.geyser.session.cache.TagCache; import org.geysermc.geyser.session.cache.TeleportCache; -import org.geysermc.geyser.session.cache.waypoint.WaypointCache; import org.geysermc.geyser.session.cache.WorldBorder; import org.geysermc.geyser.session.cache.WorldCache; import org.geysermc.geyser.session.cache.registry.JavaRegistries; import org.geysermc.geyser.session.cache.tags.DialogTag; +import org.geysermc.geyser.session.cache.waypoint.WaypointCache; import org.geysermc.geyser.session.dialog.BuiltInDialog; import org.geysermc.geyser.session.dialog.Dialog; import org.geysermc.geyser.session.dialog.DialogManager; @@ -235,10 +236,10 @@ import java.util.Map; import java.util.Queue; import java.util.Set; import java.util.UUID; -import java.util.concurrent.CopyOnWriteArrayList; import java.util.concurrent.CompletableFuture; import java.util.concurrent.CompletionException; import java.util.concurrent.ConcurrentLinkedQueue; +import java.util.concurrent.CopyOnWriteArrayList; import java.util.concurrent.ScheduledFuture; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicInteger; @@ -1037,7 +1038,9 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource { } this.cookies = loginEvent.cookies(); - this.remoteServer = loginEvent.remoteServer(); + // Don't allow changing the remote server when it's not up to us + // Just imagine the chaos of using an integrated world manager for an external server :) + this.remoteServer = this.geyser.platformType() == PlatformType.STANDALONE ? loginEvent.remoteServer() : remoteServer; // Start ticking tickThread = tickEventLoop.scheduleAtFixedRate(this::tick, nanosecondsPerTick, nanosecondsPerTick, TimeUnit.NANOSECONDS);