diff --git a/CommonCore b/CommonCore index d000b86..c702acb 160000 --- a/CommonCore +++ b/CommonCore @@ -1 +1 @@ -Subproject commit d000b8687d93eb43520bbf6685281099055eab9f +Subproject commit c702acb9d869c74d2d2da449e95b37e4c3c4fc22 diff --git a/src/de/steamwar/velocitycore/commands/EventCommand.java b/src/de/steamwar/velocitycore/commands/EventCommand.java index df90c02..76888c9 100644 --- a/src/de/steamwar/velocitycore/commands/EventCommand.java +++ b/src/de/steamwar/velocitycore/commands/EventCommand.java @@ -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 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 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 eventTeam(Function> 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 tabCompletes(Chatter sender, PreviousArguments previousArguments, String s) { + Set 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 eventTeams() { + return eventTeam(eventFight -> { + if (eventFight.getStartTime().after(new Timestamp(System.currentTimeMillis()))) return Collections.emptyList(); + return List.of(eventFight.getTeamBlue(), eventFight.getTeamRed()); + }); + } } diff --git a/src/de/steamwar/velocitycore/commands/EventRescheduleCommand.java b/src/de/steamwar/velocitycore/commands/EventRescheduleCommand.java index d639abd..61d5c8b 100644 --- a/src/de/steamwar/velocitycore/commands/EventRescheduleCommand.java +++ b/src/de/steamwar/velocitycore/commands/EventRescheduleCommand.java @@ -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 eventBlueTeams() { + return EventCommand.eventTeam(eventFight -> List.of(eventFight.getTeamBlue())); + } + + @Mapper(value = "RED_TEAM", local = true) + public TypeMapper eventRedTeams() { + return EventCommand.eventTeam(eventFight -> List.of(eventFight.getTeamRed())); + } }