|
|
|
@@ -19,6 +19,7 @@
|
|
|
|
|
|
|
|
|
|
package de.steamwar.velocitycore.commands;
|
|
|
|
|
|
|
|
|
|
import com.google.protobuf.MapEntry;
|
|
|
|
|
import de.steamwar.command.PreviousArguments;
|
|
|
|
|
import de.steamwar.command.SWCommand;
|
|
|
|
|
import de.steamwar.command.TypeMapper;
|
|
|
|
@@ -28,13 +29,18 @@ import de.steamwar.messages.Chatter;
|
|
|
|
|
import de.steamwar.messages.PlayerChatter;
|
|
|
|
|
import de.steamwar.persistent.Subserver;
|
|
|
|
|
import de.steamwar.sql.*;
|
|
|
|
|
import de.steamwar.sql.Event;
|
|
|
|
|
import de.steamwar.velocitycore.EventStarter;
|
|
|
|
|
import de.steamwar.velocitycore.SubserverSystem;
|
|
|
|
|
import net.kyori.adventure.text.Component;
|
|
|
|
|
import net.kyori.adventure.text.event.ClickEvent;
|
|
|
|
|
|
|
|
|
|
import java.awt.*;
|
|
|
|
|
import java.sql.Timestamp;
|
|
|
|
|
import java.time.Instant;
|
|
|
|
|
import java.time.format.DateTimeFormatter;
|
|
|
|
|
import java.util.*;
|
|
|
|
|
import java.util.List;
|
|
|
|
|
import java.util.function.Function;
|
|
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
|
|
|
@@ -82,35 +88,84 @@ public class EventCommand extends SWCommand {
|
|
|
|
|
|
|
|
|
|
@Register
|
|
|
|
|
public void eventOverview(@Validator(value = "noEvent", invert = true) Chatter sender) {
|
|
|
|
|
sender.system("EVENT_USAGE");
|
|
|
|
|
sender.system("EVENT_TEAM_USAGE");
|
|
|
|
|
|
|
|
|
|
Event currentEvent = Event.get();
|
|
|
|
|
sender.system("EVENT_CURRENT_EVENT", currentEvent.getEventName());
|
|
|
|
|
eventShowFightsPage(sender, currentEvent, 1);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
DateTimeFormatter format = DateTimeFormatter.ofPattern(sender.parseToPlain("EVENT_TIME_FORMAT"));
|
|
|
|
|
for (EventFight fight : EventFight.getEvent(currentEvent.getEventID())) {
|
|
|
|
|
Team blue = Team.byId(fight.getTeamBlue());
|
|
|
|
|
Team red = Team.byId(fight.getTeamRed());
|
|
|
|
|
StringBuilder fline = new StringBuilder(sender.parseToLegacy("EVENT_CURRENT_FIGHT", fight.getStartTime().toLocalDateTime().format(format), blue.getTeamColor(), blue.getTeamKuerzel(), red.getTeamColor(), red.getTeamKuerzel()));
|
|
|
|
|
@Register(value = "showtable", description = "EVENT_SHOW_TABLE_USAGE")
|
|
|
|
|
public void eventtable(Chatter sender, Event event) {
|
|
|
|
|
if (!Instant.now().isBefore(event.getEnd().toInstant())) return;
|
|
|
|
|
|
|
|
|
|
if (fight.hasFinished()) {
|
|
|
|
|
switch (fight.getErgebnis()) {
|
|
|
|
|
Map<Integer, Integer> Teampoints = new HashMap<>();
|
|
|
|
|
|
|
|
|
|
EventFight.getEvent(event.getEventID()).forEach(eventFight -> {
|
|
|
|
|
if (eventFight.hasFinished() && eventFight.getGroup().isPresent()) {
|
|
|
|
|
switch (eventFight.getErgebnis()) {
|
|
|
|
|
case 1:
|
|
|
|
|
fline.append(sender.parseToLegacy("EVENT_CURRENT_FIGHT_WIN", blue.getTeamColor(), blue.getTeamKuerzel()));
|
|
|
|
|
//win blue
|
|
|
|
|
Teampoints.put(eventFight.getTeamBlue(), Teampoints.getOrDefault(eventFight.getTeamBlue(), 0) + eventFight.getGroup().get().getPointsPerWin());
|
|
|
|
|
Teampoints.put(eventFight.getTeamRed(), Teampoints.getOrDefault(eventFight.getTeamRed(),0) + eventFight.getGroup().get().getPointsPerLoss());
|
|
|
|
|
break;
|
|
|
|
|
case 2:
|
|
|
|
|
fline.append(sender.parseToLegacy("EVENT_CURRENT_FIGHT_WIN", red.getTeamColor(), red.getTeamKuerzel()));
|
|
|
|
|
//win red
|
|
|
|
|
Teampoints.put(eventFight.getTeamBlue(), Teampoints.getOrDefault(eventFight.getTeamBlue(),0) + eventFight.getGroup().get().getPointsPerLoss());
|
|
|
|
|
Teampoints.put(eventFight.getTeamRed(), Teampoints.getOrDefault(eventFight.getTeamRed(),0) + eventFight.getGroup().get().getPointsPerWin());
|
|
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
fline.append(sender.parseToLegacy("EVENT_CURRENT_FIGHT_DRAW"));
|
|
|
|
|
//draw
|
|
|
|
|
Teampoints.put(eventFight.getTeamBlue(), Teampoints.getOrDefault(eventFight.getTeamBlue(),0) + eventFight.getGroup().get().getPointsPerDraw());
|
|
|
|
|
Teampoints.put(eventFight.getTeamRed(), Teampoints.getOrDefault(eventFight.getTeamRed(),0) + eventFight.getGroup().get().getPointsPerDraw());
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
Map<Integer, Integer> Teampointssortet = Teampoints.entrySet()
|
|
|
|
|
.stream()
|
|
|
|
|
.sorted(Map.Entry.comparingByValue())
|
|
|
|
|
.collect(Collectors.toMap(
|
|
|
|
|
Map.Entry::getKey,
|
|
|
|
|
Map.Entry::getValue,
|
|
|
|
|
(a , b) -> a,
|
|
|
|
|
LinkedHashMap::new
|
|
|
|
|
));
|
|
|
|
|
|
|
|
|
|
sender.prefixless("PLAIN_STRING", fline.toString());
|
|
|
|
|
for (Map.Entry<Integer, Integer> entry : Teampointssortet.entrySet()) {
|
|
|
|
|
Component finalmessage = sender.parse("EVENT_TEAM_TABLE",Team.byId(entry.getKey()).getTeamColor(), Team.byId(entry.getKey()).getTeamKuerzel(), Team.byId(entry.getKey()).getTeamName(), entry.getValue());
|
|
|
|
|
finalmessage = finalmessage.clickEvent(ClickEvent.runCommand("/team info " + Team.byId(entry.getKey()).getTeamName()));
|
|
|
|
|
sender.sendMessage(finalmessage);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Register
|
|
|
|
|
@Register(value = "showfights", description = "EVENT_SHOW_FIGHTS_USAGE")
|
|
|
|
|
public void eventShowFightsPage(Chatter sender, Event event, @AllowNull @OptionalValue("1") int page) {
|
|
|
|
|
if (!Instant.now().isBefore(event.getEnd().toInstant())) return;
|
|
|
|
|
int pagecount = sendEventPage(sender, event, page);
|
|
|
|
|
|
|
|
|
|
Integer nextpage = page + 1;
|
|
|
|
|
Integer prevpage = page - 1;
|
|
|
|
|
|
|
|
|
|
Component finalmessage;
|
|
|
|
|
|
|
|
|
|
Component pagenumber = sender.parse("UTIL_LIST_PAGE", page, pagecount);
|
|
|
|
|
|
|
|
|
|
if (pagecount != 0 && page != 1) {
|
|
|
|
|
finalmessage = sender.parse("UTIL_LIST_BACK_ARROW");
|
|
|
|
|
finalmessage = finalmessage.clickEvent(ClickEvent.runCommand("/event showfights " + event.getEventName() + " " + prevpage));
|
|
|
|
|
finalmessage = finalmessage.append(pagenumber);
|
|
|
|
|
} else {
|
|
|
|
|
finalmessage = pagenumber;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (pagecount != 0 && pagecount > page) {
|
|
|
|
|
Component nextbutton = sender.parse("UTIL_LIST_NEXT");
|
|
|
|
|
nextbutton = nextbutton.clickEvent(ClickEvent.runCommand("/event showfights " + event.getEventName() + " " + nextpage));
|
|
|
|
|
finalmessage = finalmessage.append(nextbutton);
|
|
|
|
|
}
|
|
|
|
|
sender.sendMessage(finalmessage);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Register(value = "team", description = "EVENT_TEAM_USAGE")
|
|
|
|
|
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)) {
|
|
|
|
@@ -122,6 +177,69 @@ public class EventCommand extends SWCommand {
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private int sendEventPage(Chatter sender, Event event, int page) {
|
|
|
|
|
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(sender.parseToPlain("EVENT_DATE_FORMAT"));
|
|
|
|
|
Map<String, List<EventFight>> dates = EventFight.getEvent(event.getEventID()).stream().collect(Collectors.groupingBy(p -> p.getStartTime().toLocalDateTime().format(dateTimeFormatter)));
|
|
|
|
|
if (dates.size() >= page) {
|
|
|
|
|
sender.system("EVENT_CURRENT_EVENT", event.getEventName());
|
|
|
|
|
DateTimeFormatter format = DateTimeFormatter.ofPattern(sender.parseToPlain("EVENT_TIME_FORMAT"));
|
|
|
|
|
for (EventFight eventFight : dates.get(dates.keySet().toArray()[page - 1])) {
|
|
|
|
|
Team blue = Team.byId(eventFight.getTeamBlue());
|
|
|
|
|
Team red = Team.byId(eventFight.getTeamRed());
|
|
|
|
|
Component finalfightline = sender.parse("EVENT_CURRENT_FIGHT_1", eventFight.getStartTime().toLocalDateTime().format(format), blue.getTeamColor(), blue.getTeamKuerzel());
|
|
|
|
|
finalfightline = finalfightline.clickEvent(ClickEvent.runCommand("/team info " + blue.getTeamName()));
|
|
|
|
|
Component vs = sender.parse("EVENT_CURRENT_FIGHT_VS");
|
|
|
|
|
finalfightline = finalfightline.append(vs);
|
|
|
|
|
Component redteam = sender.parse("EVENT_CURRENT_FIGHT_2", red.getTeamColor(), red.getTeamKuerzel());
|
|
|
|
|
redteam = redteam.clickEvent(ClickEvent.runCommand("/team info " + red.getTeamName()));
|
|
|
|
|
finalfightline = finalfightline.append(redteam);
|
|
|
|
|
|
|
|
|
|
if (eventFight.hasFinished()) {
|
|
|
|
|
Component ergebnis;
|
|
|
|
|
switch (eventFight.getErgebnis()) {
|
|
|
|
|
case 1:
|
|
|
|
|
ergebnis = sender.parse("EVENT_CURRENT_FIGHT_WIN", blue.getTeamColor(), blue.getTeamKuerzel());
|
|
|
|
|
break;
|
|
|
|
|
case 2:
|
|
|
|
|
ergebnis = sender.parse("EVENT_CURRENT_FIGHT_WIN", red.getTeamColor(), red.getTeamKuerzel());
|
|
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
ergebnis = sender.parse("EVENT_CURRENT_FIGHT_DRAW");
|
|
|
|
|
}
|
|
|
|
|
finalfightline = finalfightline.append(ergebnis);
|
|
|
|
|
}
|
|
|
|
|
sender.sendMessage(finalfightline);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return dates.size();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
protected static TypeMapper<Event> eventTypeMapper() {
|
|
|
|
|
return new TypeMapper<>() {
|
|
|
|
|
@Override
|
|
|
|
|
public Event map(Chatter sender, PreviousArguments previousArguments, String s) {
|
|
|
|
|
return Event.get(s);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public Collection<String> tabCompletes(Chatter sender, PreviousArguments previousArguments, String s) {
|
|
|
|
|
Set<String> events = new HashSet<>();
|
|
|
|
|
List<Event> allevents = Event.getAll();
|
|
|
|
|
for (Event event : allevents) {
|
|
|
|
|
if (!Instant.now().isAfter(event.getEnd().toInstant())) {
|
|
|
|
|
events.add(event.getEventName());
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return events;
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@ClassMapper(value = Event.class, local = true)
|
|
|
|
|
public TypeMapper<Event> eventMapper() {
|
|
|
|
|
return eventTypeMapper();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
protected static TypeMapper<Team> eventTeam(Function<EventFight, List<Integer>> teamMapper) {
|
|
|
|
|
return new TypeMapper<>() {
|
|
|
|
|
@Override
|
|
|
|
|