Tried to add a way to see active boosters

This commit is contained in:
Teriuihi 2022-08-05 22:49:17 +02:00
parent 7fa2370498
commit a154e073bd

View File

@ -1,11 +1,13 @@
package com.alttd.vboosters.commands;
import com.alttd.boosterapi.Booster;
import com.alttd.boosterapi.BoosterType;
import com.alttd.boosterapi.config.Config;
import com.alttd.boosterapi.util.Utils;
import com.alttd.proxydiscordlink.bot.api.DiscordSendMessage;
import com.alttd.vboosters.VelocityBoosters;
import com.alttd.vboosters.data.VelocityBooster;
import com.alttd.vboosters.storage.VelocityBoosterStorage;
import com.mojang.brigadier.arguments.DoubleArgumentType;
import com.mojang.brigadier.arguments.IntegerArgumentType;
import com.mojang.brigadier.arguments.StringArgumentType;
@ -20,13 +22,12 @@ import com.velocitypowered.api.command.CommandSource;
import com.velocitypowered.api.proxy.Player;
import com.velocitypowered.api.proxy.ProxyServer;
import com.velocitypowered.api.util.GameProfile;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.minimessage.MiniMessage;
import net.kyori.adventure.text.minimessage.Template;
import java.text.DateFormat;
import java.util.Arrays;
import java.util.Collection;
import java.util.Date;
import java.util.List;
import java.util.*;
import java.util.concurrent.CompletableFuture;
import java.util.stream.Collectors;
@ -46,11 +47,42 @@ public class BoosterCommand {
return builder.buildFuture();
}
private static MiniMessage miniMessage = MiniMessage.get();
public BoosterCommand(ProxyServer proxyServer) {
LiteralCommandNode<CommandSource> command = LiteralArgumentBuilder
.<CommandSource>literal("booster")
.requires(ctx -> ctx.hasPermission("command.proxy.booster"))
.executes(context -> { //TODO put these messages in config
String message = "Active boosters:\n<active_boosters>\n\nQueued boosters:\n<queued_boosters>";
String activeBooster = "<type> activated by <activator> until <end_time> [UTC], boosts <multiplier> times";
String queuedBooster = "<type> queued by <activator> starts at <start_time> [UTC] and will be active for <duration>, boosts <multiplier> times";
List<Component> activeBoosterComponents = new ArrayList<>();
List<Component> queuedBoosterComponents = new ArrayList<>();
for (Booster booster : VelocityBoosterStorage.getVelocityBoosterStorage().getBoosters().values()) {
long expiryTime = new Date().getTime() + booster.getDuration();
ArrayList<Template> templates = new ArrayList<>(List.of(
Template.of("activator", booster.getActivator()),
Template.of("start_time", DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.SHORT).format(booster.getStartingTime())),
Template.of("duration", String.valueOf(booster.getDuration())),
Template.of("multiplier", String.valueOf(booster.getMultiplier()))));
if (booster.isActive())
templates.add(Template.of("end_time", DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.SHORT).format(expiryTime)));
else
templates.add(Template.of("end_time", "unknown"));
if (booster.isActive())
activeBoosterComponents.add(miniMessage.parse(activeBooster, templates));
else
queuedBoosterComponents.add(miniMessage.parse(queuedBooster, templates));
}
Component separator = miniMessage.parse("\n");
context.getSource().sendMessage(miniMessage.parse(message, List.of(
Template.of("active_boosters", Component.join(separator, activeBoosterComponents)),
Template.of("queued_boosters", Component.join(separator, queuedBoosterComponents))
)));
return 1;
})
.then(RequiredArgumentBuilder.<CommandSource, String>argument("username", StringArgumentType.string())
.requires(ctx -> ctx.hasPermission("command.proxy.booster.manage"))
.suggests((context, builder) -> buildRemainingString(builder, proxyServer.getAllPlayers().stream()
.map(Player::getGameProfile)
.map(GameProfile::getName)