Introduced JSON-based configuration handling for teams using Jackson and validation utilities. Added commands for reloading configurations and creating teams with support for saving and loading team data. Refactored related classes to integrate with the new system.
108 lines
4.1 KiB
Java
108 lines
4.1 KiB
Java
package com.alttd.ctf.commands.subcommands;
|
|
|
|
import com.alttd.ctf.commands.SubCommand;
|
|
import com.alttd.ctf.config.Messages;
|
|
import com.alttd.ctf.game.GameManager;
|
|
import com.alttd.ctf.team.Team;
|
|
import lombok.AllArgsConstructor;
|
|
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
|
|
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
|
|
import org.bukkit.Bukkit;
|
|
import org.bukkit.command.CommandSender;
|
|
import org.bukkit.entity.Player;
|
|
|
|
import java.util.List;
|
|
import java.util.Optional;
|
|
|
|
@AllArgsConstructor
|
|
public class ChangeTeam extends SubCommand {
|
|
|
|
private final GameManager gameManager;
|
|
|
|
@FunctionalInterface
|
|
private interface ChangeTeamConsumer {
|
|
int apply(Player player, Team team);
|
|
}
|
|
|
|
@Override
|
|
public int onCommand(CommandSender commandSender, String[] args) {
|
|
return handle(commandSender, args, (player, team) -> {
|
|
changeTeam(commandSender, player, team);
|
|
return 0;
|
|
});
|
|
}
|
|
|
|
private int handle(CommandSender commandSender, String[] args, ChangeTeamConsumer consumer) {
|
|
if (args.length != 3) {
|
|
return -1;
|
|
}
|
|
Player player = Bukkit.getPlayer(args[1]);
|
|
if (player == null) {
|
|
commandSender.sendRichMessage("<red>Please provide a valid player</red>");
|
|
return 1;
|
|
}
|
|
|
|
int teamId;
|
|
try {
|
|
teamId = Integer.parseInt(args[2]);
|
|
} catch (NumberFormatException e) {
|
|
commandSender.sendRichMessage(String.format("<red>Please enter a valid integer, %s is not a valid integer</red>", args[2]));
|
|
return 2;
|
|
}
|
|
Optional<Team> optionalTeam = gameManager.getTeams().stream().filter(team -> team.getId() == teamId).findFirst();
|
|
if (optionalTeam.isEmpty()) {
|
|
commandSender.sendRichMessage(String.format("<red>Please provide a valid team id %d is not a valid team id</red>", teamId));
|
|
return 3;
|
|
}
|
|
return consumer.apply(player, optionalTeam.get());
|
|
}
|
|
|
|
private void changeTeam(CommandSender commandSender, Player player, Team team) {
|
|
Optional<Team> optionalOldTeam = gameManager.getTeam(player.getUniqueId());
|
|
if (optionalOldTeam.isPresent()) {
|
|
moveBetweenTeams(commandSender, player, team, optionalOldTeam.get());
|
|
return;
|
|
}
|
|
gameManager.registerPlayer(team, player);
|
|
commandSender.sendRichMessage("<green><player> has been placed in <team>.</green>",
|
|
TagResolver.resolver(
|
|
Placeholder.component("player", player.displayName()),
|
|
Placeholder.component("team", team.getName())));
|
|
}
|
|
|
|
private void moveBetweenTeams(CommandSender commandSender, Player player, Team newTeam, Team oldTeam) {
|
|
if (oldTeam.equals(newTeam)) {
|
|
commandSender.sendRichMessage("<green><player> was already in <team>, nothing has changed.</green>",
|
|
TagResolver.resolver(
|
|
Placeholder.component("player", player.displayName()),
|
|
Placeholder.component("team", newTeam.getName())));
|
|
return;
|
|
}
|
|
gameManager.registerPlayer(newTeam, player);
|
|
commandSender.sendRichMessage("<green><player> has been moved from <old_team> to <new_team>.</green>",
|
|
TagResolver.resolver(
|
|
Placeholder.component("player", player.displayName()),
|
|
Placeholder.component("old_team", oldTeam.getName())),
|
|
Placeholder.component("new_team", newTeam.getName()));
|
|
}
|
|
|
|
@Override
|
|
public String getName() {
|
|
return "changeteam";
|
|
}
|
|
|
|
@Override
|
|
public List<String> getTabComplete(CommandSender commandSender, String[] args) {
|
|
return switch (args.length) {
|
|
case 2 -> Bukkit.getOnlinePlayers().stream().map(Player::getName).toList();
|
|
case 3 -> gameManager.getTeams().stream().map(Team::getId).map(Object::toString).toList();
|
|
default -> List.of();
|
|
};
|
|
}
|
|
|
|
@Override
|
|
public String getHelpMessage() {
|
|
return Messages.HELP.CHANGE_TEAM;
|
|
}
|
|
}
|