Skip to content

Commit

Permalink
Some clean-ups and asserts for team state
Browse files Browse the repository at this point in the history
  • Loading branch information
Gegy committed Jun 9, 2024
1 parent c1d1d87 commit b6f9246
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 16 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -127,7 +127,7 @@ public GameTeamConfig getTeamConfig(GameTeamKey team) {
* @return {@code true} if player was successfully added
*/
public boolean addPlayerTo(PlayerRef player, GameTeamKey team) {
var lastTeam = this.playerToTeam.put(player.id(), team);
var lastTeam = this.playerToTeam.get(player.id());
if (lastTeam == team) {
return false;
}
Expand All @@ -136,6 +136,8 @@ public boolean addPlayerTo(PlayerRef player, GameTeamKey team) {
this.removePlayerFrom(player, lastTeam);
}

this.playerToTeam.put(player.id(), team);

var state = this.teamState(team);
if (state.allPlayers.add(player)) {
var entity = this.gameSpace.getPlayers().getEntity(player.id());
Expand Down Expand Up @@ -178,18 +180,20 @@ public boolean removePlayerFrom(ServerPlayerEntity player, GameTeamKey team) {
* @return {@code true} if the player was removed from this team
*/
public boolean removePlayerFrom(PlayerRef player, GameTeamKey team) {
this.playerToTeam.remove(player.id(), team);
if (!this.playerToTeam.remove(player.id(), team)) {
return false;
}

var state = this.teamState(team);
if (state.allPlayers.remove(player)) {
var entity = this.gameSpace.getPlayers().getEntity(player.id());
if (entity != null) {
this.removeOnlinePlayer(entity, state);
}
return true;
} else {
return false;
if (!state.allPlayers.remove(player)) {
throw new IllegalStateException("Player " + player + " was not in team " + team + ", but had a mapping");
}

var entity = this.gameSpace.getPlayers().getEntity(player.id());
if (entity != null) {
this.removeOnlinePlayer(entity, state);
}
return true;
}

/**
Expand Down Expand Up @@ -350,18 +354,20 @@ private void sendTeamsToPlayer(ServerPlayerEntity player) {
}

private void sendRemoveTeamsForPlayer(ServerPlayerEntity player) {
for (var state : this.teamToState.entrySet()) {
var data = state.getValue();

player.networkHandler.sendPacket(TeamS2CPacket.updateRemovedTeam(data.scoreboardTeam));
for (var state : this.teamToState.values()) {
player.networkHandler.sendPacket(TeamS2CPacket.updateRemovedTeam(state.scoreboardTeam));

for (var member : data.onlinePlayers) {
for (var member : state.onlinePlayers) {
player.networkHandler.sendPacket(this.resetPlayerName(member));
}
}
}

private void addOnlinePlayer(ServerPlayerEntity player, State state) {
if (!state.allPlayers.contains(PlayerRef.of(player))) {
throw new IllegalStateException("Tried to mark player " + player.getNameForScoreboard() + " as online in team " + state.team + ", but they are not in this team");
}

state.onlinePlayers.add(player);
state.scoreboardTeam.getPlayerList().add(player.getNameForScoreboard());

Expand All @@ -370,7 +376,9 @@ private void addOnlinePlayer(ServerPlayerEntity player, State state) {
}

private void removeOnlinePlayer(ServerPlayerEntity player, State state) {
state.onlinePlayers.remove(player);
if (!state.onlinePlayers.remove(player)) {
throw new IllegalStateException("Tried to mark player " + player.getNameForScoreboard() + " as offline in team " + state.team + ", but they were not online in this team");
}
state.scoreboardTeam.getPlayerList().remove(player.getNameForScoreboard());

this.sendPacketToAll(this.changePlayerTeam(player, state, TeamS2CPacket.Operation.REMOVE));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,8 @@ public final class GamePlayerEvents {
* <li>A new {@link GameActivity} is created, and all players are transferred</li>
* <p>
* This event will always be fired after {@link GameActivityEvents#CREATE} and before {@link GameActivityEvents#ENABLE}.
* <p>
* This event is invoked after the player has been added to the {@link GameSpace#getPlayers() game player set}.
*
* @see GamePlayerEvents#JOIN
*/
Expand All @@ -51,6 +53,8 @@ public final class GamePlayerEvents {
* <li>A {@link GameSpace} is closed or {@link GameActivity} replaced</li>
* <p>
* This event will always be fired before {@link GameActivityEvents#DESTROY} and after {@link GameActivityEvents#DISABLE}.
* <p>
* This event is invoked before the player is removed from the {@link GameSpace#getPlayers() game player set}.
*
* @see GamePlayerEvents#LEAVE
*/
Expand Down

0 comments on commit b6f9246

Please sign in to comment.