Skip to content

Commit 0d022db

Browse files
committed
fix: trigger onJoin on spawn instead of during configuration
1 parent 0069937 commit 0d022db

File tree

3 files changed

+27
-5
lines changed

3 files changed

+27
-5
lines changed

gradle/wrapper/gradle-wrapper.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
distributionBase=GRADLE_USER_HOME
22
distributionPath=wrapper/dists
3-
distributionUrl=https\://services.gradle.org/distributions/gradle-8.8-bin.zip
3+
distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-bin.zip
44
networkTimeout=10000
55
validateDistributionUrl=true
66
zipStoreBase=GRADLE_USER_HOME

src/main/java/dev/emortal/minestom/gamesdk/internal/ProductionGameHandler.java

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import net.minestom.server.event.EventNode;
77
import net.minestom.server.event.player.AsyncPlayerConfigurationEvent;
88
import net.minestom.server.event.player.PlayerDisconnectEvent;
9+
import net.minestom.server.event.player.PlayerSpawnEvent;
910
import org.jetbrains.annotations.NotNull;
1011
import org.slf4j.Logger;
1112
import org.slf4j.LoggerFactory;
@@ -20,6 +21,7 @@ final class ProductionGameHandler {
2021

2122
EventNode<Event> eventNode = GameEventNodes.GAME_MANAGER;
2223
eventNode.addListener(AsyncPlayerConfigurationEvent.class, this::onJoin);
24+
eventNode.addListener(PlayerSpawnEvent.class, this::onSpawn);
2325
eventNode.addListener(PlayerDisconnectEvent.class, this::onLeave);
2426
}
2527

@@ -39,10 +41,28 @@ private void onJoin(@NotNull AsyncPlayerConfigurationEvent event) {
3941
return;
4042
}
4143

42-
GamePlayerTracker.addPlayer(game, player);
4344
event.setSpawningInstance(game.getSpawningInstance(player));
4445
}
4546

47+
void onSpawn(@NotNull PlayerSpawnEvent event) {
48+
Player player = event.getPlayer();
49+
50+
Game game = null;
51+
for (Game currentGame : this.gameManager.getGames()) {
52+
if (!currentGame.getCreationInfo().playerIds().contains(player.getUuid())) continue; // the game is not for this player
53+
54+
game = currentGame;
55+
break;
56+
}
57+
58+
if (game == null) {
59+
LOGGER.error("No game could be found for player {}", player.getUsername());
60+
return;
61+
}
62+
GamePlayerTracker.addPlayer(game, player);
63+
}
64+
65+
4666
private void onLeave(@NotNull PlayerDisconnectEvent event) {
4767
Player player = event.getPlayer();
4868

src/main/java/dev/emortal/minestom/gamesdk/internal/TestGameHandler.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -81,13 +81,15 @@ private static final class GameHolder {
8181
void onJoin(@NotNull AsyncPlayerConfigurationEvent event) {
8282
Player player = event.getPlayer();
8383

84-
this.players.add(player.getUuid());
85-
GamePlayerTracker.addPlayer(this.game, player);
86-
8784
event.setSpawningInstance(this.game.getSpawningInstance(player));
8885
}
8986

9087
void onFirstSpawn(@NotNull PlayerSpawnEvent event) {
88+
Player player = event.getPlayer();
89+
90+
this.players.add(player.getUuid());
91+
GamePlayerTracker.addPlayer(this.game, player);
92+
9193
event.getPlayer().sendMessage(Component.text("The server is in test mode. Use /gamesdk start to start a game."));
9294
}
9395

0 commit comments

Comments
 (0)