|
25 | 25 | import java.util.Map;
|
26 | 26 | import java.util.Optional;
|
27 | 27 |
|
28 |
| -public record ImmediateRespawnBehavior(Optional<PlayerRole> role, Optional<PlayerRole> respawnAsRole, Optional<TemplatedText> deathMessage, boolean dropInventory, GameActionList<ServerPlayer> respawnAction, boolean spectateKiller) implements IGameBehavior { |
| 28 | +public record ImmediateRespawnBehavior(Optional<PlayerRole> role, Optional<PlayerRole> respawnAsRole, Optional<TemplatedText> deathMessage, boolean dropInventory, GameActionList<ServerPlayer> respawnAction, boolean spectateKiller, boolean clearKillTracker) implements IGameBehavior { |
29 | 29 | public static final MapCodec<ImmediateRespawnBehavior> CODEC = RecordCodecBuilder.mapCodec(i -> i.group(
|
30 | 30 | PlayerRole.CODEC.optionalFieldOf("role").forGetter(c -> c.role),
|
31 | 31 | PlayerRole.CODEC.optionalFieldOf("respawn_as").forGetter(c -> c.respawnAsRole),
|
32 | 32 | TemplatedText.CODEC.optionalFieldOf("death_message").forGetter(c -> c.deathMessage),
|
33 | 33 | Codec.BOOL.optionalFieldOf("drop_inventory", false).forGetter(c -> c.dropInventory),
|
34 | 34 | GameActionList.PLAYER_CODEC.optionalFieldOf("respawn_action", GameActionList.EMPTY).forGetter(c -> c.respawnAction),
|
35 |
| - Codec.BOOL.optionalFieldOf("spectate_killer", true).forGetter(c -> c.spectateKiller) |
| 35 | + Codec.BOOL.optionalFieldOf("spectate_killer", true).forGetter(c -> c.spectateKiller), |
| 36 | + Codec.BOOL.optionalFieldOf("clear_kill_tracker", false).forGetter(c -> c.clearKillTracker) |
36 | 37 | ).apply(i, ImmediateRespawnBehavior::new));
|
37 | 38 |
|
38 | 39 | @Override
|
@@ -76,6 +77,14 @@ private void respawnPlayer(IGamePhase game, ServerPlayer player, @Nullable Playe
|
76 | 77 | player.fallDistance = 0.0f;
|
77 | 78 |
|
78 | 79 | respawnAction.apply(game, GameActionContext.EMPTY, player);
|
| 80 | + |
| 81 | + if (clearKillTracker) { |
| 82 | + for (ServerPlayer otherPlayer : game.participants()) { |
| 83 | + if (otherPlayer.getKillCredit() == player) { |
| 84 | + otherPlayer.setLastHurtByPlayer(null); |
| 85 | + } |
| 86 | + } |
| 87 | + } |
79 | 88 | }
|
80 | 89 |
|
81 | 90 | private void sendDeathMessage(IGamePhase game, ServerPlayer player) {
|
|
0 commit comments