@@ -117,6 +117,10 @@ public void previousServerIsFinished() {
117117 public void transferTo (ServerType type ) {
118118 new Thread (() -> {
119119 RegisteredServer originServer = playersOriginServer .get (player );
120+ if (originServer == null ) {
121+ player .getCurrentServer ().ifPresent (conn -> playersOriginServer .put (player , conn .getServer ()));
122+ originServer = playersOriginServer .get (player );
123+ }
120124 ServerType originServerType = GameManager .getTypeFromRegisteredServer (originServer );
121125
122126 playersGoalServerType .remove (player );
@@ -147,27 +151,36 @@ public void forceRemoveFromLimbo() {
147151 playersOriginServer .remove (player );
148152 }
149153
150- public void transferTo (RegisteredServer toTransferTo ) {
154+ public CompletableFuture <Void > transferTo (RegisteredServer toTransferTo ) {
155+ CompletableFuture <Void > future = new CompletableFuture <>();
151156 new Thread (() -> {
152- RegisteredServer originServer = playersOriginServer .get (player );
153- ServerType originServerType = GameManager .getTypeFromRegisteredServer (originServer );
154-
155- playersGoalServerType .remove (player );
156- playersOriginServer .remove (player );
157-
158- ServerType type = GameManager .getTypeFromRegisteredServer (toTransferTo );
159- UUID serverUUID = UUID .fromString (toTransferTo .getServerInfo ().getName ());
160-
161- if (originServer != null && originServerType != null ) {
162- RedisMessage .sendMessageToServer (serverUUID ,
163- FromProxyChannels .GIVE_PLAYERS_ORIGIN_TYPE ,
164- new JSONObject ().put ("uuid" , player .getUniqueId ().toString ())
165- .put ("origin-type" , originServerType .name ())
166- );
157+ try {
158+ RegisteredServer originServer = playersOriginServer .get (player );
159+ if (originServer == null ) {
160+ player .getCurrentServer ().ifPresent (conn -> playersOriginServer .put (player , conn .getServer ()));
161+ originServer = playersOriginServer .get (player );
162+ }
163+ ServerType originServerType = GameManager .getTypeFromRegisteredServer (originServer );
164+
165+ playersGoalServerType .remove (player );
166+ playersOriginServer .remove (player );
167+
168+ UUID serverUUID = UUID .fromString (toTransferTo .getServerInfo ().getName ());
169+
170+ if (originServer != null && originServerType != null ) {
171+ RedisMessage .sendMessageToServer (serverUUID ,
172+ FromProxyChannels .GIVE_PLAYERS_ORIGIN_TYPE ,
173+ new JSONObject ().put ("uuid" , player .getUniqueId ().toString ())
174+ .put ("origin-type" , originServerType .name ())
175+ );
176+ }
177+
178+ player .createConnectionRequest (toTransferTo ).connectWithIndication ();
179+ future .complete (null );
180+ } catch (Exception e ) {
181+ future .completeExceptionally (e );
167182 }
168-
169- GameManager .GameServer toTransferToAsGame = GameManager .getFromUUID (serverUUID );
170- player .createConnectionRequest (toTransferTo ).connectWithIndication ();
171183 }).start ();
184+ return future ;
172185 }
173186}
0 commit comments