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.GameManager;
|
||||||
import com.alttd.ctf.game.GamePhase;
|
import com.alttd.ctf.game.GamePhase;
|
||||||
import com.alttd.ctf.game_class.GameClass;
|
import com.alttd.ctf.game_class.GameClass;
|
||||||
import com.alttd.ctf.game_class.creation.EngineerCreator;
|
import com.alttd.ctf.game_class.GameClassRetrieval;
|
||||||
import com.alttd.ctf.game_class.creation.FighterCreator;
|
|
||||||
import com.alttd.ctf.game_class.creation.TankCreator;
|
|
||||||
import com.alttd.ctf.gui.ClassSelectionGUI;
|
import com.alttd.ctf.gui.ClassSelectionGUI;
|
||||||
import com.alttd.ctf.team.TeamPlayer;
|
import com.alttd.ctf.team.TeamPlayer;
|
||||||
import com.github.yannicklamprecht.worldborder.api.WorldBorderApi;
|
import com.github.yannicklamprecht.worldborder.api.WorldBorderApi;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
|
@ -28,12 +25,7 @@ public class SelectClass extends SubCommand {
|
||||||
public SelectClass(GameManager gameManager, WorldBorderApi worldBorderApi) {
|
public SelectClass(GameManager gameManager, WorldBorderApi worldBorderApi) {
|
||||||
this.gameManager = gameManager;
|
this.gameManager = gameManager;
|
||||||
this.worldBorderApi = worldBorderApi;
|
this.worldBorderApi = worldBorderApi;
|
||||||
this.gameClasses = new HashMap<>();
|
gameClasses = GameClassRetrieval.getGameClassesForAllTeams(gameManager);
|
||||||
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()));
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,8 @@ import com.alttd.ctf.game.GameManager;
|
||||||
import com.alttd.ctf.game.GamePhase;
|
import com.alttd.ctf.game.GamePhase;
|
||||||
import com.alttd.ctf.game.GamePhaseExecutor;
|
import com.alttd.ctf.game.GamePhaseExecutor;
|
||||||
import com.alttd.ctf.game_class.GameClass;
|
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.Team;
|
||||||
import com.alttd.ctf.team.TeamColor;
|
import com.alttd.ctf.team.TeamColor;
|
||||||
import com.alttd.ctf.team.TeamPlayer;
|
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.MiniMessage;
|
||||||
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
|
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
|
||||||
@Slf4j
|
@Slf4j
|
||||||
|
|
@ -39,7 +44,7 @@ public class ClassSelectionPhase implements GamePhaseExecutor {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void start(Flag flag) {
|
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());
|
CircularIterator<Team> teamCircularIterator = new CircularIterator<>(gameManager.getTeams());
|
||||||
if (teamCircularIterator.hasNext()) {
|
if (teamCircularIterator.hasNext()) {
|
||||||
Bukkit.getOnlinePlayers().stream()
|
Bukkit.getOnlinePlayers().stream()
|
||||||
|
|
@ -53,6 +58,17 @@ public class ClassSelectionPhase implements GamePhaseExecutor {
|
||||||
log.warn("No teams to add players to");
|
log.warn("No teams to add players to");
|
||||||
}
|
}
|
||||||
teleportPlayersToStartingZone();
|
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() {
|
private void teleportPlayersToStartingZone() {
|
||||||
|
|
@ -75,12 +91,17 @@ public class ClassSelectionPhase implements GamePhaseExecutor {
|
||||||
public void end(GamePhase nextPhase) {
|
public void end(GamePhase nextPhase) {
|
||||||
gameManager.getTeams().forEach(team -> {
|
gameManager.getTeams().forEach(team -> {
|
||||||
GameClass defaultClass = defaultClassCreator.apply(team.getColor());
|
GameClass defaultClass = defaultClassCreator.apply(team.getColor());
|
||||||
team.getPlayers().forEach(player -> {
|
team.getPlayers().forEach(teamPlayer -> {
|
||||||
player.resetWorldBorder(Bukkit.getPlayer(player.getUuid()), worldBorderApi, nextPhase, team.getWorldBorderCenter());
|
Player player = Bukkit.getPlayer(teamPlayer.getUuid());
|
||||||
if (player.getGameClass() != null) {
|
if (player == null || !player.isOnline()) {
|
||||||
|
log.debug("Tried to reset world border for offline player");
|
||||||
return;
|
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