diff --git a/proxy-bungeecord/src/main/kotlin/app/simplecloud/plugin/proxy/bungeecord/listener/ServerPreConnectListener.kt b/proxy-bungeecord/src/main/kotlin/app/simplecloud/plugin/proxy/bungeecord/listener/ServerPreConnectListener.kt index e22621b..c21a8fd 100644 --- a/proxy-bungeecord/src/main/kotlin/app/simplecloud/plugin/proxy/bungeecord/listener/ServerPreConnectListener.kt +++ b/proxy-bungeecord/src/main/kotlin/app/simplecloud/plugin/proxy/bungeecord/listener/ServerPreConnectListener.kt @@ -6,6 +6,7 @@ import kotlinx.coroutines.runBlocking import net.md_5.bungee.api.config.ServerInfo import net.md_5.bungee.api.connection.ProxiedPlayer import net.md_5.bungee.api.event.ServerConnectEvent +import net.md_5.bungee.api.event.ServerConnectEvent.Reason import net.md_5.bungee.api.plugin.Listener import net.md_5.bungee.event.EventHandler import net.md_5.bungee.event.EventPriority @@ -19,13 +20,20 @@ class ServerPreConnectListener( @EventHandler(priority = EventPriority.HIGH) fun handle(event: ServerConnectEvent) { - checkAllowProxyJoin(event.player, event) - if (event.isCancelled) { - return + if (isProxyJoin(event)) { + checkAllowProxyJoin(event.player, event) + if (event.isCancelled) { + return + } } + checkAllowServerSwitch(event.player, event, event.target) } + private fun isProxyJoin(event: ServerConnectEvent): Boolean { + return event.reason == Reason.JOIN_PROXY || event.player.server == null + } + private fun checkAllowProxyJoin(player: ProxiedPlayer, event: ServerConnectEvent) { val localState = plugin.proxyPlugin.joinStateHandler.localState val joinState = resolver.resolveJoinState(localState) diff --git a/proxy-shared/src/main/kotlin/app/simplecloud/plugin/proxy/shared/handler/JoinStateResolver.kt b/proxy-shared/src/main/kotlin/app/simplecloud/plugin/proxy/shared/handler/JoinStateResolver.kt index de7ec6b..8132093 100644 --- a/proxy-shared/src/main/kotlin/app/simplecloud/plugin/proxy/shared/handler/JoinStateResolver.kt +++ b/proxy-shared/src/main/kotlin/app/simplecloud/plugin/proxy/shared/handler/JoinStateResolver.kt @@ -13,6 +13,7 @@ class JoinStateResolver( private val identifier by lazy { ServerPatternIdentifier( "-", + "(?[a-zA-Z0-9_-]+)-(?\\d+)", cloudApi = proxyPlugin.api ) } diff --git a/proxy-velocity/src/main/kotlin/app/simplecloud/plugin/proxy/velocity/listener/ServerPreConnectListener.kt b/proxy-velocity/src/main/kotlin/app/simplecloud/plugin/proxy/velocity/listener/ServerPreConnectListener.kt index 92922ac..6aff58b 100644 --- a/proxy-velocity/src/main/kotlin/app/simplecloud/plugin/proxy/velocity/listener/ServerPreConnectListener.kt +++ b/proxy-velocity/src/main/kotlin/app/simplecloud/plugin/proxy/velocity/listener/ServerPreConnectListener.kt @@ -19,10 +19,13 @@ class ServerPreConnectListener( @Subscribe(order = PostOrder.EARLY) fun handle(event: ServerPreConnectEvent) { - checkAllowProxyJoin(event.player, event) - if (event.result.isAllowed.not()) { - return + if (event.previousServer == null) { + checkAllowProxyJoin(event.player, event) + if (event.result.isAllowed.not()) { + return + } } + checkAllowServerSwitch(event.player, event, event.originalServer) } @@ -67,7 +70,7 @@ class ServerPreConnectListener( } if (joinState.permission.join.isNotBlank() && !player.hasPermission(joinState.permission.join)) { - logger.info("Player ${player.username} does not have permission to join $serverName.") + logger.info("Player ${player.username} does not have permission to join $serverName. (JoinState: ${joinStateName}, Permission: ${joinState.permission.join})") denyAccess(player, proxyPlugin.messagesConfiguration.get().kick.noPermission, true, event) } }