Tried to add a way to see active boosters
This commit is contained in:
parent
7fa2370498
commit
a154e073bd
|
|
@ -1,11 +1,13 @@
|
||||||
package com.alttd.vboosters.commands;
|
package com.alttd.vboosters.commands;
|
||||||
|
|
||||||
|
import com.alttd.boosterapi.Booster;
|
||||||
import com.alttd.boosterapi.BoosterType;
|
import com.alttd.boosterapi.BoosterType;
|
||||||
import com.alttd.boosterapi.config.Config;
|
import com.alttd.boosterapi.config.Config;
|
||||||
import com.alttd.boosterapi.util.Utils;
|
import com.alttd.boosterapi.util.Utils;
|
||||||
import com.alttd.proxydiscordlink.bot.api.DiscordSendMessage;
|
import com.alttd.proxydiscordlink.bot.api.DiscordSendMessage;
|
||||||
import com.alttd.vboosters.VelocityBoosters;
|
import com.alttd.vboosters.VelocityBoosters;
|
||||||
import com.alttd.vboosters.data.VelocityBooster;
|
import com.alttd.vboosters.data.VelocityBooster;
|
||||||
|
import com.alttd.vboosters.storage.VelocityBoosterStorage;
|
||||||
import com.mojang.brigadier.arguments.DoubleArgumentType;
|
import com.mojang.brigadier.arguments.DoubleArgumentType;
|
||||||
import com.mojang.brigadier.arguments.IntegerArgumentType;
|
import com.mojang.brigadier.arguments.IntegerArgumentType;
|
||||||
import com.mojang.brigadier.arguments.StringArgumentType;
|
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.Player;
|
||||||
import com.velocitypowered.api.proxy.ProxyServer;
|
import com.velocitypowered.api.proxy.ProxyServer;
|
||||||
import com.velocitypowered.api.util.GameProfile;
|
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.MiniMessage;
|
||||||
|
import net.kyori.adventure.text.minimessage.Template;
|
||||||
|
|
||||||
import java.text.DateFormat;
|
import java.text.DateFormat;
|
||||||
import java.util.Arrays;
|
import java.util.*;
|
||||||
import java.util.Collection;
|
|
||||||
import java.util.Date;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.concurrent.CompletableFuture;
|
import java.util.concurrent.CompletableFuture;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
|
@ -46,11 +47,42 @@ public class BoosterCommand {
|
||||||
return builder.buildFuture();
|
return builder.buildFuture();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static MiniMessage miniMessage = MiniMessage.get();
|
||||||
public BoosterCommand(ProxyServer proxyServer) {
|
public BoosterCommand(ProxyServer proxyServer) {
|
||||||
LiteralCommandNode<CommandSource> command = LiteralArgumentBuilder
|
LiteralCommandNode<CommandSource> command = LiteralArgumentBuilder
|
||||||
.<CommandSource>literal("booster")
|
.<CommandSource>literal("booster")
|
||||||
.requires(ctx -> ctx.hasPermission("command.proxy.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())
|
.then(RequiredArgumentBuilder.<CommandSource, String>argument("username", StringArgumentType.string())
|
||||||
|
.requires(ctx -> ctx.hasPermission("command.proxy.booster.manage"))
|
||||||
.suggests((context, builder) -> buildRemainingString(builder, proxyServer.getAllPlayers().stream()
|
.suggests((context, builder) -> buildRemainingString(builder, proxyServer.getAllPlayers().stream()
|
||||||
.map(Player::getGameProfile)
|
.map(Player::getGameProfile)
|
||||||
.map(GameProfile::getName)
|
.map(GameProfile::getName)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user