diff --git a/src/main/java/client/Client.java b/src/main/java/client/Client.java index 9b710ccd70..9b3377ed59 100644 --- a/src/main/java/client/Client.java +++ b/src/main/java/client/Client.java @@ -621,9 +621,11 @@ public class Client extends ChannelInboundHandlerAdapter { } else if (newState == LoginState.SERVER_TRANSITION) { loggedIn = false; inServerTransition = true; - } else { + } else if (newState == LoginState.LOGGED_IN) { loggedIn = true; inServerTransition = false; + } else { + throw new IllegalArgumentException("Invalid login state: " + newState); } } diff --git a/src/main/java/net/server/channel/handlers/PlayerLoggedinHandler.java b/src/main/java/net/server/channel/handlers/PlayerLoggedinHandler.java index f39a929592..331093ccf3 100644 --- a/src/main/java/net/server/channel/handlers/PlayerLoggedinHandler.java +++ b/src/main/java/net/server/channel/handlers/PlayerLoggedinHandler.java @@ -205,7 +205,7 @@ public final class PlayerLoggedinHandler extends AbstractPacketHandler { return; } - c.updateLoginState(LoginState.LOGGED_IN); + accountService.logIn(c); } finally { releaseAccount(accId); } diff --git a/src/main/java/service/AccountService.java b/src/main/java/service/AccountService.java index 25adf70c5d..38fef5d005 100644 --- a/src/main/java/service/AccountService.java +++ b/src/main/java/service/AccountService.java @@ -215,7 +215,8 @@ public class AccountService { public boolean logIn(Client c) { byte newState = LoginState.LOGGED_IN; - if (c.getLoginState() != LoginState.NOT_LOGGED_IN) { + int currentState = c.getLoginState(); + if (currentState != LoginState.NOT_LOGGED_IN && currentState != LoginState.SERVER_TRANSITION) { return false; }