forked from SteamWar/SteamWar
Add funktion to show next events and formatet the fights in pages
This commit is contained in:
@@ -272,6 +272,8 @@ CHALLENGE_ACCEPT_HOVER = §aAccept challenge
|
|||||||
EVENT_TIME_FORMAT = HH:mm
|
EVENT_TIME_FORMAT = HH:mm
|
||||||
EVENT_DATE_FORMAT = dd.MM.
|
EVENT_DATE_FORMAT = dd.MM.
|
||||||
EVENT_USAGE = §8/§7event §8[§eTeam§8] - §7To teleport to a fight
|
EVENT_USAGE = §8/§7event §8[§eTeam§8] - §7To teleport to a fight
|
||||||
|
EVENT_TEAM_USAGE = §8/§7event team §8[§eTeam§8] - §7To teleport to a fight
|
||||||
|
EVENT_SHOW_USAGE = §8/§7event show §8[§eEvent§8] - §7To show the fights of that Event
|
||||||
EVENT_NO_TEAM = §cThis team does not exist
|
EVENT_NO_TEAM = §cThis team does not exist
|
||||||
EVENT_NO_FIGHT_TEAM = §cThis team has no current fight
|
EVENT_NO_FIGHT_TEAM = §cThis team has no current fight
|
||||||
EVENT_NO_CURRENT = §cThere is no event taking place currently
|
EVENT_NO_CURRENT = §cThere is no event taking place currently
|
||||||
@@ -751,3 +753,9 @@ DC_SCHEMUPLOAD_IGNORED = Skipping `{0}`, not a schematic file.
|
|||||||
DC_SCHEMUPLOAD_INVCHAR = `{0}` has invalid characters in its name.
|
DC_SCHEMUPLOAD_INVCHAR = `{0}` has invalid characters in its name.
|
||||||
DC_SCHEMUPLOAD_SUCCESS = `{0}` was uploaded successfully.
|
DC_SCHEMUPLOAD_SUCCESS = `{0}` was uploaded successfully.
|
||||||
DC_SCHEMUPLOAD_ERROR = An error has occured during the upload of `{0}`. For more information ask a Developer.
|
DC_SCHEMUPLOAD_ERROR = An error has occured during the upload of `{0}`. For more information ask a Developer.
|
||||||
|
|
||||||
|
UTIL_LIST_BACK_ARROW = §8««
|
||||||
|
UTIL_LIST_BACK_ARROW_HOVER = §ePrevious page
|
||||||
|
UTIL_LIST_PAGE = §e Page §7({0}/{1})
|
||||||
|
UTIL_LIST_NEXT = §8 »»
|
||||||
|
UTIL_LIST_NEXT_HOVER = §eNext page
|
||||||
@@ -254,6 +254,8 @@ CHALLENGE_ACCEPT_HOVER = §aHerausforderung annehmen
|
|||||||
EVENT_TIME_FORMAT = HH:mm
|
EVENT_TIME_FORMAT = HH:mm
|
||||||
EVENT_DATE_FORMAT = dd.MM.
|
EVENT_DATE_FORMAT = dd.MM.
|
||||||
EVENT_USAGE = §8/§7event §8[§eTeam§8] - §7Um dich zum Kampf zu teleportieren
|
EVENT_USAGE = §8/§7event §8[§eTeam§8] - §7Um dich zum Kampf zu teleportieren
|
||||||
|
EVENT_TEAM_USAGE=§8/§7event team §8[§eTeam§8] - §7Um dich zum Kampf zu teleportieren
|
||||||
|
EVENT_SHOW_USAGE = §8/§7event show §8[§eEvent§8] - §7Um die fights des Events zu zeigen
|
||||||
EVENT_NO_TEAM = §cDieses Team gibt es nicht
|
EVENT_NO_TEAM = §cDieses Team gibt es nicht
|
||||||
EVENT_NO_FIGHT_TEAM = §cDas Team kämpft derzeit nicht
|
EVENT_NO_FIGHT_TEAM = §cDas Team kämpft derzeit nicht
|
||||||
EVENT_NO_CURRENT = §cDerzeit findet kein Event statt
|
EVENT_NO_CURRENT = §cDerzeit findet kein Event statt
|
||||||
@@ -692,3 +694,9 @@ DC_SCHEMUPLOAD_IGNORED = `{0}` wird ignoriert, da die Datei keine Schematic ist.
|
|||||||
DC_SCHEMUPLOAD_INVCHAR = `{0}` hat unzulässige Buchstaben im Namen.
|
DC_SCHEMUPLOAD_INVCHAR = `{0}` hat unzulässige Buchstaben im Namen.
|
||||||
DC_SCHEMUPLOAD_SUCCESS = `{0}` wurde erfolgreich hochgeladen.
|
DC_SCHEMUPLOAD_SUCCESS = `{0}` wurde erfolgreich hochgeladen.
|
||||||
DC_SCHEMUPLOAD_ERROR = Ein Fehler ist beim Hochladen von `{0}` aufgetreten. Für nähere Informationen wende dich an einen Developer.
|
DC_SCHEMUPLOAD_ERROR = Ein Fehler ist beim Hochladen von `{0}` aufgetreten. Für nähere Informationen wende dich an einen Developer.
|
||||||
|
|
||||||
|
UTIL_LIST_BACK_ARROW = §8««
|
||||||
|
UTIL_LIST_BACK_ARROW_HOVER = §eLetste Seite
|
||||||
|
UTIL_LIST_PAGE = §e Seite §7({0}/{1})
|
||||||
|
UTIL_LIST_NEXT = §8 »»
|
||||||
|
UTIL_LIST_NEXT_HOVER = §eNächste Seite
|
||||||
@@ -25,16 +25,23 @@ import de.steamwar.command.TypeMapper;
|
|||||||
import de.steamwar.command.TypeValidator;
|
import de.steamwar.command.TypeValidator;
|
||||||
import de.steamwar.linkage.Linked;
|
import de.steamwar.linkage.Linked;
|
||||||
import de.steamwar.messages.Chatter;
|
import de.steamwar.messages.Chatter;
|
||||||
|
import de.steamwar.messages.Message;
|
||||||
import de.steamwar.messages.PlayerChatter;
|
import de.steamwar.messages.PlayerChatter;
|
||||||
import de.steamwar.persistent.Subserver;
|
import de.steamwar.persistent.Subserver;
|
||||||
import de.steamwar.sql.*;
|
import de.steamwar.sql.*;
|
||||||
|
import de.steamwar.sql.Event;
|
||||||
import de.steamwar.velocitycore.EventStarter;
|
import de.steamwar.velocitycore.EventStarter;
|
||||||
import de.steamwar.velocitycore.SubserverSystem;
|
import de.steamwar.velocitycore.SubserverSystem;
|
||||||
|
import net.kyori.adventure.text.Component;
|
||||||
|
import net.kyori.adventure.text.event.ClickEvent;
|
||||||
|
|
||||||
|
import javax.security.auth.callback.CallbackHandler;
|
||||||
|
import java.awt.*;
|
||||||
import java.sql.Timestamp;
|
import java.sql.Timestamp;
|
||||||
import java.time.Instant;
|
import java.time.Instant;
|
||||||
import java.time.format.DateTimeFormatter;
|
import java.time.format.DateTimeFormatter;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
import java.util.List;
|
||||||
import java.util.function.Function;
|
import java.util.function.Function;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
@@ -86,9 +93,58 @@ public class EventCommand extends SWCommand {
|
|||||||
|
|
||||||
Event currentEvent = Event.get();
|
Event currentEvent = Event.get();
|
||||||
sender.system("EVENT_CURRENT_EVENT", currentEvent.getEventName());
|
sender.system("EVENT_CURRENT_EVENT", currentEvent.getEventName());
|
||||||
|
sendEvent(sender, currentEvent);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Register(value = "show", description = "EVENT_SHOW_USAGE")
|
||||||
|
public void eventShow(Chatter sender, Event event) {
|
||||||
|
eventShowPage(sender, event, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Register(value = "show", description = "EVENT_SHOW_USAGE")
|
||||||
|
public void eventShowPage(Chatter sender, Event event, 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 show " + 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 show " + 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)) {
|
||||||
|
sender.system("EVENT_NO_FIGHT_TEAM");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (!PunishmentCommand.isPunishedWithMessage(sender, Punishment.PunishmentType.NoFightServer)) {
|
||||||
|
SubserverSystem.sendPlayer(eventArena, sender.getPlayer());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void sendEvent(Chatter sender, Event event) {
|
||||||
|
|
||||||
DateTimeFormatter format = DateTimeFormatter.ofPattern(sender.parseToPlain("EVENT_TIME_FORMAT"));
|
DateTimeFormatter format = DateTimeFormatter.ofPattern(sender.parseToPlain("EVENT_TIME_FORMAT"));
|
||||||
for (EventFight fight : EventFight.getEvent(currentEvent.getEventID())) {
|
for (EventFight fight : EventFight.getEvent(event.getEventID())) {
|
||||||
Team blue = Team.byId(fight.getTeamBlue());
|
Team blue = Team.byId(fight.getTeamBlue());
|
||||||
Team red = Team.byId(fight.getTeamRed());
|
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()));
|
StringBuilder fline = new StringBuilder(sender.parseToLegacy("EVENT_CURRENT_FIGHT", fight.getStartTime().toLocalDateTime().format(format), blue.getTeamColor(), blue.getTeamKuerzel(), red.getTeamColor(), red.getTeamKuerzel()));
|
||||||
@@ -110,16 +166,59 @@ public class EventCommand extends SWCommand {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Register
|
private int sendEventPage(Chatter sender, Event event, int page) {
|
||||||
public void eventWithTeam(@Validator(value = "noEvent", invert = true) PlayerChatter sender, @ErrorMessage("EVENT_NO_TEAM") Team team) {
|
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(sender.parseToPlain("EVENT_DATE_FORMAT"));
|
||||||
Subserver eventArena = EventStarter.getEventServer().get(team.getTeamId());
|
Map<String, List<EventFight>> dates = EventFight.getEvent(event.getEventID()).stream().collect(Collectors.groupingBy(p -> p.getStartTime().toLocalDateTime().format(dateTimeFormatter)));
|
||||||
if (eventArena == null || !Subserver.getServerList().contains(eventArena)) {
|
if (dates.size() >= page) {
|
||||||
sender.system("EVENT_NO_FIGHT_TEAM");
|
DateTimeFormatter format = DateTimeFormatter.ofPattern(sender.parseToPlain("EVENT_TIME_FORMAT"));
|
||||||
return;
|
for (EventFight eventFight : dates.get(dates.keySet().toArray()[page - 1])) {
|
||||||
}
|
Team blue = Team.byId(eventFight.getTeamBlue());
|
||||||
if (!PunishmentCommand.isPunishedWithMessage(sender, Punishment.PunishmentType.NoFightServer)) {
|
Team red = Team.byId(eventFight.getTeamRed());
|
||||||
SubserverSystem.sendPlayer(eventArena, sender.getPlayer());
|
StringBuilder fline = new StringBuilder(sender.parseToLegacy("EVENT_CURRENT_FIGHT", eventFight.getStartTime().toLocalDateTime().format(format), blue.getTeamColor(), blue.getTeamKuerzel(), red.getTeamColor(), red.getTeamKuerzel()));
|
||||||
|
|
||||||
|
if (eventFight.hasFinished()) {
|
||||||
|
switch (eventFight.getErgebnis()) {
|
||||||
|
case 1:
|
||||||
|
fline.append(sender.parseToLegacy("EVENT_CURRENT_FIGHT_WIN", blue.getTeamColor(), blue.getTeamKuerzel()));
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
fline.append(sender.parseToLegacy("EVENT_CURRENT_FIGHT_WIN", red.getTeamColor(), red.getTeamKuerzel()));
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
fline.append(sender.parseToLegacy("EVENT_CURRENT_FIGHT_DRAW"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
sender.prefixless("PLAIN_STRING", fline.toString());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
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) {
|
protected static TypeMapper<Team> eventTeam(Function<EventFight, List<Integer>> teamMapper) {
|
||||||
|
|||||||
Reference in New Issue
Block a user