Automatically show class selection when the phase starts
This commit is contained in:
parent
53de0fe217
commit
e93580bea9
|
|
@ -5,16 +5,13 @@ import com.alttd.ctf.config.Messages;
|
|||
import com.alttd.ctf.game.GameManager;
|
||||
import com.alttd.ctf.game.GamePhase;
|
||||
import com.alttd.ctf.game_class.GameClass;
|
||||
import com.alttd.ctf.game_class.creation.EngineerCreator;
|
||||
import com.alttd.ctf.game_class.creation.FighterCreator;
|
||||
import com.alttd.ctf.game_class.creation.TankCreator;
|
||||
import com.alttd.ctf.game_class.GameClassRetrieval;
|
||||
import com.alttd.ctf.gui.ClassSelectionGUI;
|
||||
import com.alttd.ctf.team.TeamPlayer;
|
||||
import com.github.yannicklamprecht.worldborder.api.WorldBorderApi;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
|
|
@ -28,12 +25,7 @@ public class SelectClass extends SubCommand {
|
|||
public SelectClass(GameManager gameManager, WorldBorderApi worldBorderApi) {
|
||||
this.gameManager = gameManager;
|
||||
this.worldBorderApi = worldBorderApi;
|
||||
this.gameClasses = new HashMap<>();
|
||||
gameManager.getTeams().forEach(team -> {
|
||||
gameClasses.computeIfAbsent(team.getId(), teamId -> new ArrayList<>()).add(FighterCreator.createFighter(team.getColor()));
|
||||
gameClasses.computeIfAbsent(team.getId(), teamId -> new ArrayList<>()).add(TankCreator.createTank(team.getColor()));
|
||||
gameClasses.computeIfAbsent(team.getId(), teamId -> new ArrayList<>()).add(EngineerCreator.createEngineer(team.getColor()));
|
||||
});
|
||||
gameClasses = GameClassRetrieval.getGameClassesForAllTeams(gameManager);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
|||
|
|
@ -5,6 +5,8 @@ import com.alttd.ctf.game.GameManager;
|
|||
import com.alttd.ctf.game.GamePhase;
|
||||
import com.alttd.ctf.game.GamePhaseExecutor;
|
||||
import com.alttd.ctf.game_class.GameClass;
|
||||
import com.alttd.ctf.game_class.GameClassRetrieval;
|
||||
import com.alttd.ctf.gui.ClassSelectionGUI;
|
||||
import com.alttd.ctf.team.Team;
|
||||
import com.alttd.ctf.team.TeamColor;
|
||||
import com.alttd.ctf.team.TeamPlayer;
|
||||
|
|
@ -14,8 +16,11 @@ import lombok.extern.slf4j.Slf4j;
|
|||
import net.kyori.adventure.text.minimessage.MiniMessage;
|
||||
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
|
||||
@Slf4j
|
||||
|
|
@ -39,7 +44,7 @@ public class ClassSelectionPhase implements GamePhaseExecutor {
|
|||
|
||||
@Override
|
||||
public void start(Flag flag) {
|
||||
Bukkit.broadcast(MiniMessage.miniMessage().deserialize("<green>Select your class</green>"));
|
||||
Bukkit.broadcast(MiniMessage.miniMessage().deserialize("<green>Select your class with <gold>/ctf selectclass</gold></green>"));
|
||||
CircularIterator<Team> teamCircularIterator = new CircularIterator<>(gameManager.getTeams());
|
||||
if (teamCircularIterator.hasNext()) {
|
||||
Bukkit.getOnlinePlayers().stream()
|
||||
|
|
@ -53,6 +58,17 @@ public class ClassSelectionPhase implements GamePhaseExecutor {
|
|||
log.warn("No teams to add players to");
|
||||
}
|
||||
teleportPlayersToStartingZone();
|
||||
HashMap<Integer, List<GameClass>> gameClassesForAllTeams = GameClassRetrieval.getGameClassesForAllTeams(gameManager);
|
||||
Bukkit.getOnlinePlayers().forEach(player -> {
|
||||
Optional<TeamPlayer> optionalTeamPlayer = gameManager.getTeamPlayer(player.getUniqueId());
|
||||
if (optionalTeamPlayer.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
TeamPlayer teamPlayer = optionalTeamPlayer.get();
|
||||
List<GameClass> gameClasses = gameClassesForAllTeams.get(teamPlayer.getTeam().getId());
|
||||
new ClassSelectionGUI(gameClasses, teamPlayer, worldBorderApi, GamePhase.CLASS_SELECTION)
|
||||
.open(player);
|
||||
});
|
||||
}
|
||||
|
||||
private void teleportPlayersToStartingZone() {
|
||||
|
|
@ -75,12 +91,17 @@ public class ClassSelectionPhase implements GamePhaseExecutor {
|
|||
public void end(GamePhase nextPhase) {
|
||||
gameManager.getTeams().forEach(team -> {
|
||||
GameClass defaultClass = defaultClassCreator.apply(team.getColor());
|
||||
team.getPlayers().forEach(player -> {
|
||||
player.resetWorldBorder(Bukkit.getPlayer(player.getUuid()), worldBorderApi, nextPhase, team.getWorldBorderCenter());
|
||||
if (player.getGameClass() != null) {
|
||||
team.getPlayers().forEach(teamPlayer -> {
|
||||
Player player = Bukkit.getPlayer(teamPlayer.getUuid());
|
||||
if (player == null || !player.isOnline()) {
|
||||
log.debug("Tried to reset world border for offline player");
|
||||
return;
|
||||
}
|
||||
defaultClass.apply(player, worldBorderApi, nextPhase, false);
|
||||
teamPlayer.resetWorldBorder(player, worldBorderApi, nextPhase, team.getWorldBorderCenter());
|
||||
if (teamPlayer.getGameClass() != null) {
|
||||
return;
|
||||
}
|
||||
defaultClass.apply(teamPlayer, worldBorderApi, nextPhase, false);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,31 @@
|
|||
package com.alttd.ctf.game_class;
|
||||
|
||||
import com.alttd.ctf.game.GameManager;
|
||||
import com.alttd.ctf.game_class.creation.EngineerCreator;
|
||||
import com.alttd.ctf.game_class.creation.FighterCreator;
|
||||
import com.alttd.ctf.game_class.creation.TankCreator;
|
||||
import com.alttd.ctf.team.Team;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
|
||||
public class GameClassRetrieval {
|
||||
|
||||
public static HashMap<Integer, List<GameClass>> getGameClassesForAllTeams(GameManager gameManager) {
|
||||
final HashMap<Integer, List<GameClass>> gameClasses = new HashMap<>();
|
||||
gameManager.getTeams().forEach(team -> {
|
||||
gameClasses.putAll(getGameClassesForTeam(team));
|
||||
});
|
||||
return gameClasses;
|
||||
}
|
||||
|
||||
public static HashMap<Integer, List<GameClass>> getGameClassesForTeam(Team team) {
|
||||
final HashMap<Integer, List<GameClass>> gameClasses = new HashMap<>();
|
||||
gameClasses.computeIfAbsent(team.getId(), teamId -> new ArrayList<>()).add(FighterCreator.createFighter(team.getColor()));
|
||||
gameClasses.computeIfAbsent(team.getId(), teamId -> new ArrayList<>()).add(TankCreator.createTank(team.getColor()));
|
||||
gameClasses.computeIfAbsent(team.getId(), teamId -> new ArrayList<>()).add(EngineerCreator.createEngineer(team.getColor()));
|
||||
return gameClasses;
|
||||
}
|
||||
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user