Merge pull request 'Add QOL to EventCommand and EventRescheduleCommand' (#4) from QOLEventCommand into main

Reviewed-on: https://steamwar.de/devlabs/SteamWar/SteamWar/pulls/4
Reviewed-by: Lixfel <lixfel@steamwar.de>
This commit is contained in:
Lixfel
2024-08-06 13:46:24 +02:00
2 changed files with 65 additions and 16 deletions
@@ -19,19 +19,22 @@
package de.steamwar.velocitycore.commands;
import de.steamwar.velocitycore.EventStarter;
import de.steamwar.persistent.Subserver;
import de.steamwar.velocitycore.SubserverSystem;
import de.steamwar.command.PreviousArguments;
import de.steamwar.command.SWCommand;
import de.steamwar.command.TypeMapper;
import de.steamwar.command.TypeValidator;
import de.steamwar.messages.Chatter;
import de.steamwar.messages.PlayerChatter;
import de.steamwar.persistent.Subserver;
import de.steamwar.sql.*;
import de.steamwar.velocitycore.EventStarter;
import de.steamwar.velocitycore.SubserverSystem;
import java.sql.Timestamp;
import java.time.Instant;
import java.time.format.DateTimeFormatter;
import java.util.List;
import java.util.Set;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
public class EventCommand extends SWCommand {
@@ -50,17 +53,17 @@ public class EventCommand extends SWCommand {
sender.system("EVENT_NO_CURRENT");
List<Event> coming = Event.getComing();
if(coming.isEmpty())
if (coming.isEmpty())
return;
sender.system("EVENT_COMING");
Instant now = Instant.now();
DateTimeFormatter format = DateTimeFormatter.ofPattern(sender.parseToPlain("EVENT_DATE_FORMAT"));
for(Event e : coming){
for (Event e : coming) {
sender.prefixless("EVENT_COMING_EVENT", e.getStart().toLocalDateTime().format(format), e.getEnd().toLocalDateTime().format(format), e.getEventName());
if(now.isBefore(e.getDeadline().toInstant()))
if (now.isBefore(e.getDeadline().toInstant()))
sender.prefixless("EVENT_COMING_DEADLINE", e.getDeadline());
SchematicType schemType = e.getSchematicType();
@@ -68,7 +71,7 @@ public class EventCommand extends SWCommand {
sender.prefixless("EVENT_COMING_SCHEM_DEADLINE", schemType.getDeadline());
Set<Team> teams = TeamTeilnahme.getTeams(e.getEventID());
if(!teams.isEmpty())
if (!teams.isEmpty())
sender.prefixless("EVENT_COMING_TEAMS", teams.stream().map(team -> sender.parseToLegacy("EVENT_COMING_TEAM", team.getTeamColor(), team.getTeamKuerzel())).collect(Collectors.joining(" ")));
}
}
@@ -81,13 +84,13 @@ public class EventCommand extends SWCommand {
sender.system("EVENT_CURRENT_EVENT", currentEvent.getEventName());
DateTimeFormatter format = DateTimeFormatter.ofPattern(sender.parseToPlain("EVENT_TIME_FORMAT"));
for(EventFight fight : EventFight.getEvent(currentEvent.getEventID())){
for (EventFight fight : EventFight.getEvent(currentEvent.getEventID())) {
Team blue = Team.get(fight.getTeamBlue());
Team red = Team.get(fight.getTeamRed());
StringBuilder fline = new StringBuilder(sender.parseToLegacy("EVENT_CURRENT_FIGHT", fight.getStartTime().toLocalDateTime().format(format), blue.getTeamColor(), blue.getTeamKuerzel(), red.getTeamColor(), red.getTeamKuerzel()));
if(fight.hasFinished()){
switch(fight.getErgebnis()){
if (fight.hasFinished()) {
switch (fight.getErgebnis()) {
case 1:
fline.append(sender.parseToLegacy("EVENT_CURRENT_FIGHT_WIN", blue.getTeamColor(), blue.getTeamKuerzel()));
break;
@@ -106,7 +109,7 @@ public class EventCommand extends SWCommand {
@Register
public void eventWithTeam(@Validator(value = "noEvent", invert = true) PlayerChatter sender, @ErrorMessage("EVENT_NO_TEAM") Team team) {
Subserver eventArena = EventStarter.getEventServer().get(team.getTeamId());
if(eventArena == null || !Subserver.getServerList().contains(eventArena)){
if (eventArena == null || !Subserver.getServerList().contains(eventArena)) {
sender.system("EVENT_NO_FIGHT_TEAM");
return;
}
@@ -114,4 +117,39 @@ public class EventCommand extends SWCommand {
SubserverSystem.sendPlayer(eventArena, sender.getPlayer());
}
}
}
protected static TypeMapper<Team> eventTeam(Function<EventFight, List<Integer>> teamMapper) {
return new TypeMapper<>() {
@Override
public Team map(Chatter sender, PreviousArguments previousArguments, String s) {
if ("PUB".equalsIgnoreCase(s) || "public".equalsIgnoreCase(s)) {
return Team.get(0);
}
return Team.get(s);
}
@Override
public Collection<String> tabCompletes(Chatter sender, PreviousArguments previousArguments, String s) {
Set<String> teams = new HashSet<>();
Event currentEvent = Event.get();
for (EventFight fight : EventFight.getEvent(currentEvent.getEventID())) {
if (fight.hasFinished()) continue;
teamMapper.apply(fight).forEach(integer -> {
Team team = Team.get(integer);
teams.add(team.getTeamName());
teams.add(team.getTeamKuerzel());
});
}
return teams;
}
};
}
@ClassMapper(value = Team.class, local = true)
public TypeMapper<Team> eventTeams() {
return eventTeam(eventFight -> {
if (eventFight.getStartTime().after(new Timestamp(System.currentTimeMillis()))) return Collections.emptyList();
return List.of(eventFight.getTeamBlue(), eventFight.getTeamRed());
});
}
}
@@ -20,6 +20,7 @@
package de.steamwar.velocitycore.commands;
import de.steamwar.command.SWCommand;
import de.steamwar.command.TypeMapper;
import de.steamwar.messages.Chatter;
import de.steamwar.sql.Event;
import de.steamwar.sql.EventFight;
@@ -38,7 +39,7 @@ public class EventRescheduleCommand extends SWCommand {
}
@Register
public void reschedule(Chatter sender, Team teamBlue, Team teamRed) {
public void reschedule(Chatter sender, @Mapper("BLUE_TEAM") Team teamBlue, @Mapper("RED_TEAM") Team teamRed) {
Event event = Event.get();
if(event == null){
sender.system("EVENTRESCHEDULE_UNKNOWN_TEAM");
@@ -63,4 +64,14 @@ public class EventRescheduleCommand extends SWCommand {
sender.system("EVENTRESCHEDULE_NO_FIGHT");
}
}
@Mapper(value = "BLUE_TEAM", local = true)
public TypeMapper<Team> eventBlueTeams() {
return EventCommand.eventTeam(eventFight -> List.of(eventFight.getTeamBlue()));
}
@Mapper(value = "RED_TEAM", local = true)
public TypeMapper<Team> eventRedTeams() {
return EventCommand.eventTeam(eventFight -> List.of(eventFight.getTeamRed()));
}
}