Skip to content

Commit 505faaa

Browse files
committed
feat: create prejoin phase
1 parent 0d022db commit 505faaa

File tree

4 files changed

+22
-12
lines changed

4 files changed

+22
-12
lines changed

Diff for: src/main/java/dev/emortal/minestom/gamesdk/game/Game.java

+9-3
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,8 @@
1515
import net.minestom.server.instance.Instance;
1616
import org.jetbrains.annotations.NotNull;
1717

18-
import java.time.Instant;
1918
import java.util.Collections;
2019
import java.util.HashSet;
21-
import java.util.List;
2220
import java.util.Set;
2321
import java.util.UUID;
2422
import java.util.concurrent.atomic.AtomicBoolean;
@@ -57,7 +55,15 @@ protected Game(@NotNull GameCreationInfo creationInfo) {
5755
public abstract void cleanUp();
5856

5957
/**
60-
* Called when a player logs in.
58+
* Called when a player is joining.
59+
*
60+
* <p>
61+
* Can be used to set spawn points, called <b>after</b> the player has been added to the players list..
62+
*/
63+
public abstract void onPreJoin(@NotNull Player player);
64+
65+
/**
66+
* Called when a player is fully spawned in.
6167
*
6268
* <p>
6369
* This is called <b>after</b> the player has been added to the players list.

Diff for: src/main/java/dev/emortal/minestom/gamesdk/internal/GamePlayerTracker.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ final class GamePlayerTracker {
88

99
static void addPlayer(@NotNull Game game, @NotNull Player player) {
1010
game.getPlayers().add(player);
11-
game.onJoin(player);
11+
game.onPreJoin(player);
1212
}
1313

1414
static void removePlayer(@NotNull Game game, @NotNull Player player) {

Diff for: src/main/java/dev/emortal/minestom/gamesdk/internal/ProductionGameHandler.java

+4-1
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,8 @@ private void onJoin(@NotNull AsyncPlayerConfigurationEvent event) {
4141
return;
4242
}
4343

44+
GamePlayerTracker.addPlayer(game, player);
45+
4446
event.setSpawningInstance(game.getSpawningInstance(player));
4547
}
4648

@@ -59,7 +61,8 @@ void onSpawn(@NotNull PlayerSpawnEvent event) {
5961
LOGGER.error("No game could be found for player {}", player.getUsername());
6062
return;
6163
}
62-
GamePlayerTracker.addPlayer(game, player);
64+
65+
game.onJoin(player);
6366
}
6467

6568

Diff for: src/main/java/dev/emortal/minestom/gamesdk/internal/TestGameHandler.java

+8-7
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ final class TestGameHandler {
3636

3737
EventNode<Event> eventNode = GameEventNodes.GAME_MANAGER;
3838
eventNode.addListener(AsyncPlayerConfigurationEvent.class, this::onJoin);
39+
eventNode.addListener(PlayerSpawnEvent.class, this::onPlayerSpawn);
3940
eventNode.addListener(PlayerDisconnectEvent.class, this::onLeave);
4041
}
4142

@@ -47,14 +48,12 @@ private void onJoin(@NotNull AsyncPlayerConfigurationEvent event) {
4748
this.holder.onJoin(event);
4849
}
4950

50-
private void onFirstPlayerSpawn(@NotNull PlayerSpawnEvent event) {
51-
if (!event.isFirstSpawn()) return;
52-
51+
private void onPlayerSpawn(@NotNull PlayerSpawnEvent event) {
5352
if (this.holder == null) {
5453
this.holder = new GameHolder(this.gameManager);
5554
}
5655

57-
this.holder.onFirstSpawn(event);
56+
this.holder.onSpawn(event);
5857
}
5958

6059
private void onLeave(@NotNull PlayerDisconnectEvent event) {
@@ -81,14 +80,16 @@ private static final class GameHolder {
8180
void onJoin(@NotNull AsyncPlayerConfigurationEvent event) {
8281
Player player = event.getPlayer();
8382

83+
this.players.add(player.getUuid());
84+
GamePlayerTracker.addPlayer(this.game, player);
85+
8486
event.setSpawningInstance(this.game.getSpawningInstance(player));
8587
}
8688

87-
void onFirstSpawn(@NotNull PlayerSpawnEvent event) {
89+
void onSpawn(@NotNull PlayerSpawnEvent event) {
8890
Player player = event.getPlayer();
8991

90-
this.players.add(player.getUuid());
91-
GamePlayerTracker.addPlayer(this.game, player);
92+
this.game.onJoin(player);
9293

9394
event.getPlayer().sendMessage(Component.text("The server is in test mode. Use /gamesdk start to start a game."));
9495
}

0 commit comments

Comments
 (0)