Skip to content

Commit

Permalink
Make getSpawningInstance able to change per player
Browse files Browse the repository at this point in the history
BomBardyGamer committed Dec 23, 2023

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature. The key has expired.
1 parent 5fdd697 commit a4f51db
Showing 6 changed files with 16 additions and 9 deletions.
2 changes: 1 addition & 1 deletion src/main/java/dev/emortal/minestom/gamesdk/game/Game.java
Original file line number Diff line number Diff line change
@@ -58,7 +58,7 @@ protected Game(@NotNull GameCreationInfo creationInfo) {
*/
public abstract void onLeave(@NotNull Player player);

public abstract @NotNull Instance getSpawningInstance();
public abstract @NotNull Instance getSpawningInstance(@NotNull Player player);

public final @NotNull EventNode<Event> getEventNode() {
return this.eventNode;
Original file line number Diff line number Diff line change
@@ -84,7 +84,7 @@ private void movePlayersOnThisServer(@NotNull Game newGame, @NotNull Set<UUID> p
GamePlayerTracker.addPlayer(newGame, player);

// Increment after using the index
futures.add(player.setInstance(newGame.getSpawningInstance()));
futures.add(player.setInstance(newGame.getSpawningInstance(player)));
player.respawn();
}

Original file line number Diff line number Diff line change
@@ -101,7 +101,7 @@ private void kickAllRemainingPlayers(@NotNull Game game) {
if (!player.isOnline()) continue;

// The player may have been moved to a different game on the same server
if (player.getInstance() != game.getSpawningInstance()) continue;
if (player.getInstance() != game.getSpawningInstance(player)) continue;

player.kick(Component.text("The game ended but we weren't able to connect you to a lobby. Please reconnect.", NamedTextColor.RED));
}
Original file line number Diff line number Diff line change
@@ -40,7 +40,7 @@ private void onJoin(@NotNull PlayerLoginEvent event) {
}

GamePlayerTracker.addPlayer(game, player);
event.setSpawningInstance(game.getSpawningInstance());
event.setSpawningInstance(game.getSpawningInstance(player));
}

private void onLeave(@NotNull PlayerDisconnectEvent event) {
Original file line number Diff line number Diff line change
@@ -74,7 +74,7 @@ void onJoin(@NotNull PlayerLoginEvent event) {
this.players.add(player.getUuid());
GamePlayerTracker.addPlayer(this.game, player);

event.setSpawningInstance(this.game.getSpawningInstance());
event.setSpawningInstance(this.game.getSpawningInstance(player));
}

void onLeave(@NotNull Player player) {
Original file line number Diff line number Diff line change
@@ -4,6 +4,7 @@
import java.util.function.Predicate;

import dev.emortal.minestom.gamesdk.game.Game;
import net.minestom.server.entity.Player;
import net.minestom.server.event.Event;
import net.minestom.server.event.trait.InstanceEvent;
import net.minestom.server.event.trait.PlayerEvent;
@@ -22,13 +23,19 @@ public final class GameEventPredicates {

public static @NotNull Predicate<Event> inGame(@NotNull Game game) {
return event -> {
if (event instanceof PlayerEvent playerEvent) {
return game.getPlayers().contains(playerEvent.getPlayer());
if (!(event instanceof PlayerEvent playerEvent)) {
// No way to filter it - allow it through as it's probably a global event
return true;
}

Player player = playerEvent.getPlayer();
boolean isEventPlayerForGame = game.getPlayers().contains(player);

if (event instanceof InstanceEvent instanceEvent) {
return instanceEvent.getInstance() == game.getSpawningInstance();
return isEventPlayerForGame && instanceEvent.getInstance() == game.getSpawningInstance(player);
} else {
return isEventPlayerForGame;
}
return true;
};
}

0 comments on commit a4f51db

Please sign in to comment.