SteamWar/BungeeCore
Archiviert
13
2

Add some QOL to EventCommand and EventRescheduleCommand #520

Offen
YoyoNow möchte 4 Commits von QOLEventCommands nach master mergen
3 geänderte Dateien mit 64 neuen und 15 gelöschten Zeilen

@ -1 +1 @@
Subproject commit d000b8687d93eb43520bbf6685281099055eab9f
Subproject commit c702acb9d869c74d2d2da449e95b37e4c3c4fc22

Datei anzeigen

@ -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:
YoyoNow markierte diese Unterhaltung als gelöst Veraltet
Veraltet
Review

Bitte hier lieber EventFight anpassen, dass hasFinished auch bei ergebnis != 0 true zurück gibt. Das macht das ganze cleaner

Bitte hier lieber EventFight anpassen, dass hasFinished auch bei ergebnis != 0 true zurück gibt. Das macht das ganze cleaner
Veraltet
Review

Wollte ich aktuell nicht machen, wegen CommonCore update! Da bin ich mir nie ganz sicher, wie ich das richtig machen muss

Wollte ich aktuell nicht machen, wegen CommonCore update! Da bin ich mir nie ganz sicher, wie ich das richtig machen muss
Veraltet
Review

CommonCore ändern, Commiten, sobald es dort auf dem Master ist, Reload im Gitfenster und CommonCore-Commitnummer updaten

CommonCore ändern, Commiten, sobald es dort auf dem Master ist, Reload im Gitfenster und CommonCore-Commitnummer updaten
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);
Lixfel markierte diese Unterhaltung als gelöst
Review

Gibt Team.get(Name) nicht auch gelöschte teams zurück? (D.h. dieser Sonderfall unnötig)?

Gibt Team.get(Name) nicht auch gelöschte teams zurück? (D.h. dieser Sonderfall unnötig)?
Review

Nein tut es nicht

Nein tut es nicht
}
@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());
YoyoNow markierte diese Unterhaltung als gelöst Veraltet
Veraltet
Review

Siehe hasFinished

Siehe hasFinished
teams.add(team.getTeamKuerzel());
});
}
return teams;
}
};
}
@ClassMapper(value = Team.class, local = true)
YoyoNow markierte diese Unterhaltung als gelöst Veraltet
Veraltet
Review

Teams wird massenhaft Duplikate enthalten, ggf. ein Set verwenden, wenn das Backend das nicht ordentlich reduziert.

Teams wird massenhaft Duplikate enthalten, ggf. ein Set verwenden, wenn das Backend das nicht ordentlich reduziert.
public TypeMapper<Team> eventTeams() {
YoyoNow markierte diese Unterhaltung als gelöst
Review

Müsste der nicht local sein oder geht das auch ohne?

Müsste der nicht local sein oder geht das auch ohne?
Review

Guter Punkt ändere ich

Guter Punkt ändere ich
return eventTeam(eventFight -> {
if (eventFight.getStartTime().after(new Timestamp(System.currentTimeMillis()))) return Collections.emptyList();
YoyoNow markierte diese Unterhaltung als gelöst
Review

Funktioniert das so mit dem Timestamp?

Ansonsten über Instant.now().toTimestamp() konstruieren.

Funktioniert das so mit dem Timestamp? Ansonsten über Instant.now().toTimestamp() konstruieren.
Review

So hast du es schon beim EventStarter gemacht, deswegen so übernommen

So hast du es schon beim EventStarter gemacht, deswegen so übernommen
return List.of(eventFight.getTeamBlue(), eventFight.getTeamRed());
});
}
}

Datei anzeigen

@ -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)
YoyoNow markierte diese Unterhaltung als gelöst Veraltet
Veraltet
Review

Starke Codeduplication, bitte mit EventCommand generalisieren.

Starke Codeduplication, bitte mit EventCommand generalisieren.
Veraltet
Review

Ähm wie genau stellst du dir das vor? Tabcompleted beides nicht das gleiche, also klar das map könnte ich irgendwie generalisieren, aber den Rest?

Ähm wie genau stellst du dir das vor? Tabcompleted beides nicht das gleiche, also klar das map könnte ich irgendwie generalisieren, aber den Rest?
Veraltet
Review

Du hast halt einmal eine generische Condition (war das ein Predicate?) und einmal einen BiConsumer oder ähnlich?

Du hast halt einmal eine generische Condition (war das ein Predicate<?>?) und einmal einen BiConsumer oder ähnlich?
Veraltet
Review

Ich schaue es mir mal an ok

Ich schaue es mir mal an ok
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()));
}
}