13
0
geforkt von Mirrors/Velocity

Introduce a "modular" /velocity command.

Dieser Commit ist enthalten in:
Andrew Steinborn 2018-10-25 01:43:11 -04:00
Ursprung a98fcc28fe
Commit c977ddec61

Datei anzeigen

@ -1,5 +1,7 @@
package com.velocitypowered.proxy.command; package com.velocitypowered.proxy.command;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import com.velocitypowered.api.command.Command; import com.velocitypowered.api.command.Command;
import com.velocitypowered.api.command.CommandSource; import com.velocitypowered.api.command.CommandSource;
import com.velocitypowered.api.permission.Tristate; import com.velocitypowered.api.permission.Tristate;
@ -10,37 +12,103 @@ import net.kyori.text.format.TextColor;
import net.kyori.text.format.TextDecoration; import net.kyori.text.format.TextDecoration;
import org.checkerframework.checker.nullness.qual.NonNull; import org.checkerframework.checker.nullness.qual.NonNull;
import java.util.Arrays;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.stream.Collectors;
public class VelocityCommand implements Command { public class VelocityCommand implements Command {
private final Map<String, Command> subcommands = ImmutableMap.<String, Command>builder()
.put("version", Info.INSTANCE)
.build();
private void usage(CommandSource source) {
String commandText = "/velocity <" + String.join("|", subcommands.keySet()) + ">";
source.sendMessage(TextComponent.of(commandText, TextColor.RED));
}
@Override @Override
public void execute(CommandSource source, String[] args) { public void execute(CommandSource source, String[] args) {
String implVersion = VelocityServer.class.getPackage().getImplementationVersion(); if (args.length == 0) {
TextComponent velocity = TextComponent.builder("Velocity ") usage(source);
.decoration(TextDecoration.BOLD, true) return;
.color(TextColor.DARK_AQUA) }
.append(TextComponent.of(implVersion == null ? "<unknown>" : implVersion).decoration(TextDecoration.BOLD, false))
.build();
TextComponent copyright = TextComponent.of("Copyright 2018 Velocity Contributors. Velocity is freely licensed under the terms of the " +
"MIT License.");
TextComponent velocityWebsite = TextComponent.builder()
.content("Visit the ")
.append(TextComponent.builder("Velocity website")
.color(TextColor.GREEN)
.clickEvent(new ClickEvent(ClickEvent.Action.OPEN_URL, "https://www.velocitypowered.com"))
.build())
.append(TextComponent.of(" or the ").resetStyle())
.append(TextComponent.builder("Velocity GitHub")
.color(TextColor.GREEN)
.clickEvent(new ClickEvent(ClickEvent.Action.OPEN_URL, "https://github.com/VelocityPowered/Velocity"))
.build())
.build();
source.sendMessage(velocity); Command command = subcommands.get(args[0].toLowerCase(Locale.US));
source.sendMessage(copyright); if (command == null) {
source.sendMessage(velocityWebsite); usage(source);
return;
}
command.execute(source, Arrays.copyOfRange(args, 1, args.length));
}
@Override
public List<String> suggest(@NonNull CommandSource source, @NonNull String[] currentArgs) {
if (currentArgs.length == 0) {
return ImmutableList.copyOf(subcommands.keySet());
}
if (currentArgs.length == 1) {
return subcommands.keySet().stream()
.filter(name -> name.regionMatches(true, 0, currentArgs[0], 0, currentArgs[0].length()))
.collect(Collectors.toList());
}
Command command = subcommands.get(currentArgs[0].toLowerCase(Locale.US));
if (command == null) {
return ImmutableList.of();
}
return command.suggest(source, Arrays.copyOfRange(currentArgs, 1, currentArgs.length));
} }
@Override @Override
public boolean hasPermission(@NonNull CommandSource source, @NonNull String[] args) { public boolean hasPermission(@NonNull CommandSource source, @NonNull String[] args) {
return source.getPermissionValue("velocity.command.info") != Tristate.FALSE; if (args.length == 0) {
return true;
}
Command command = subcommands.get(args[0].toLowerCase(Locale.US));
if (command == null) {
return true;
}
return command.hasPermission(source, Arrays.copyOfRange(args, 1, args.length));
}
private static class Info implements Command {
static final Info INSTANCE = new Info();
private Info() {}
@Override
public void execute(@NonNull CommandSource source, @NonNull String[] args) {
String implVersion = VelocityServer.class.getPackage().getImplementationVersion();
TextComponent velocity = TextComponent.builder("Velocity ")
.decoration(TextDecoration.BOLD, true)
.color(TextColor.DARK_AQUA)
.append(TextComponent.of(implVersion == null ? "<unknown>" : implVersion).decoration(TextDecoration.BOLD, false))
.build();
TextComponent copyright = TextComponent.of("Copyright 2018 Velocity Contributors. Velocity is freely licensed under the terms of the " +
"MIT License.");
TextComponent velocityWebsite = TextComponent.builder()
.content("Visit the ")
.append(TextComponent.builder("Velocity website")
.color(TextColor.GREEN)
.clickEvent(new ClickEvent(ClickEvent.Action.OPEN_URL, "https://www.velocitypowered.com"))
.build())
.append(TextComponent.of(" or the ").resetStyle())
.append(TextComponent.builder("Velocity GitHub")
.color(TextColor.GREEN)
.clickEvent(new ClickEvent(ClickEvent.Action.OPEN_URL, "https://github.com/VelocityPowered/Velocity"))
.build())
.build();
source.sendMessage(velocity);
source.sendMessage(copyright);
source.sendMessage(velocityWebsite);
}
@Override
public boolean hasPermission(@NonNull CommandSource source, @NonNull String[] args) {
return source.getPermissionValue("velocity.command.info") != Tristate.FALSE;
}
} }
} }