Implementing commands system into antivpn [v1.1]

This commit is contained in:
funkemunky
2021-06-17 12:00:06 -04:00
parent 20e6cbde9f
commit 3fcb3fe157
16 changed files with 488 additions and 7 deletions
@@ -0,0 +1,22 @@
package dev.brighten.antivpn.bukkit;
import dev.brighten.antivpn.command.CommandExecutor;
import lombok.RequiredArgsConstructor;
import org.bukkit.ChatColor;
import org.bukkit.command.CommandSender;
@RequiredArgsConstructor
public class BukkitCommandExecutor implements CommandExecutor {
private final CommandSender sender;
@Override
public void sendMessage(String message) {
sender.sendMessage(ChatColor.translateAlternateColorCodes('&', message));
}
@Override
public boolean hasPermission(String permission) {
return sender.hasPermission(permission);
}
}
@@ -0,0 +1,38 @@
package dev.brighten.antivpn.bukkit;
import dev.brighten.antivpn.api.APIPlayer;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.entity.Player;
import org.bukkit.scheduler.BukkitRunnable;
public class BukkitPlayer extends APIPlayer {
private final Player player;
public BukkitPlayer(Player player) {
super(player.getUniqueId(), player.getName(), player.getAddress().getAddress());
this.player = player;
}
@Override
public void sendMessage(String message) {
player.sendMessage(ChatColor.translateAlternateColorCodes('&', message));
}
@Override
public void kickPlayer(String reason) {
if(!Bukkit.isPrimaryThread()) {
new BukkitRunnable() {
public void run() {
player.kickPlayer(ChatColor.translateAlternateColorCodes('&', reason));
}
}.runTask(BukkitPlugin.pluginInstance);
} else player.kickPlayer(ChatColor.translateAlternateColorCodes('&', reason));
}
@Override
public boolean hasPermission(String permission) {
return player.hasPermission(permission);
}
}
@@ -0,0 +1,40 @@
package dev.brighten.antivpn.bukkit;
import dev.brighten.antivpn.api.APIPlayer;
import dev.brighten.antivpn.api.PlayerExecutor;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import java.util.List;
import java.util.Optional;
import java.util.UUID;
import java.util.stream.Collectors;
public class BukkitPlayerExecutor implements PlayerExecutor {
@Override
public Optional<APIPlayer> getPlayer(String name) {
final Player player = Bukkit.getPlayer(name);
if(player == null) {
return Optional.empty();
}
return Optional.of(new BukkitPlayer(player));
}
@Override
public Optional<APIPlayer> getPlayer(UUID uuid) {
final Player player = Bukkit.getPlayer(uuid);
if(player == null) {
return Optional.empty();
}
return Optional.of(new BukkitPlayer(player));
}
@Override
public List<APIPlayer> getOnlinePlayers() {
return Bukkit.getOnlinePlayers().stream().map(BukkitPlayer::new).collect(Collectors.toList());
}
}
@@ -1,6 +1,12 @@
package dev.brighten.antivpn.bukkit;
import dev.brighten.antivpn.AntiVPN;
import dev.brighten.antivpn.command.Command;
import net.md_5.bungee.api.ChatColor;
import net.md_5.bungee.api.chat.ComponentBuilder;
import org.bukkit.Bukkit;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.plugin.java.JavaPlugin;
public class BukkitPlugin extends JavaPlugin {
@@ -13,7 +19,22 @@ public class BukkitPlugin extends JavaPlugin {
//Loading config
saveDefaultConfig();
AntiVPN.start(new BukkitConfig(), new BukkitListener());
AntiVPN.start(new BukkitConfig(), new BukkitListener(), new BukkitPlayerExecutor());
for (Command command : AntiVPN.getInstance().getCommands()) {
getCommand(command.parent() + (command.parent().length() > 0 ? " " : "") + command.name())
.setExecutor((sender, cmd, key, args) -> {
if(!sender.hasPermission("antivpn.command.*")
&& !sender.hasPermission(command.permission())) {
sender.sendMessage(ChatColor.RED + "No permission.");
return true;
}
command.execute(new BukkitCommandExecutor(sender), args);
return true;
});
}
}
@Override
@@ -0,0 +1,24 @@
package dev.brighten.antivpn.bungee;
import dev.brighten.antivpn.command.CommandExecutor;
import lombok.RequiredArgsConstructor;
import net.md_5.bungee.api.ChatColor;
import net.md_5.bungee.api.CommandSender;
import net.md_5.bungee.api.chat.TextComponent;
@RequiredArgsConstructor
public class BungeeCommandExecutor implements CommandExecutor {
private final CommandSender executor;
@Override
public void sendMessage(String message) {
executor.sendMessage(TextComponent.fromLegacyText(ChatColor
.translateAlternateColorCodes('&', message)));
}
@Override
public boolean hasPermission(String permission) {
return executor.hasPermission(permission);
}
}
@@ -0,0 +1,34 @@
package dev.brighten.antivpn.bungee;
import dev.brighten.antivpn.api.APIPlayer;
import net.md_5.bungee.api.ChatColor;
import net.md_5.bungee.api.chat.TextComponent;
import net.md_5.bungee.api.connection.ProxiedPlayer;
public class BungeePlayer extends APIPlayer {
private final ProxiedPlayer player;
public BungeePlayer(ProxiedPlayer player) {
super(player.getUniqueId(), player.getName(), player.getAddress().getAddress());
this.player = player;
}
@Override
public void sendMessage(String message) {
player.sendMessage(TextComponent.fromLegacyText(ChatColor
.translateAlternateColorCodes('&', message)));
}
@Override
public void kickPlayer(String reason) {
player.disconnect(TextComponent.fromLegacyText(ChatColor
.translateAlternateColorCodes('&', reason)));
}
@Override
public boolean hasPermission(String permission) {
return player.hasPermission(permission);
}
}
@@ -0,0 +1,37 @@
package dev.brighten.antivpn.bungee;
import dev.brighten.antivpn.api.APIPlayer;
import dev.brighten.antivpn.api.PlayerExecutor;
import net.md_5.bungee.BungeeCord;
import net.md_5.bungee.api.connection.ProxiedPlayer;
import java.util.List;
import java.util.Optional;
import java.util.UUID;
import java.util.stream.Collectors;
public class BungeePlayerExecutor implements PlayerExecutor {
@Override
public Optional<APIPlayer> getPlayer(String name) {
ProxiedPlayer player = BungeeCord.getInstance().getPlayer(name);
if(player == null) return Optional.empty();
return Optional.of(new BungeePlayer(player));
}
@Override
public Optional<APIPlayer> getPlayer(UUID uuid) {
ProxiedPlayer player = BungeeCord.getInstance().getPlayer(uuid);
if(player == null) return Optional.empty();
return Optional.of(new BungeePlayer(player));
}
@Override
public List<APIPlayer> getOnlinePlayers() {
return BungeeCord.getInstance().getPlayers().stream().map(BungeePlayer::new).collect(Collectors.toList());
}
}
@@ -2,7 +2,13 @@ package dev.brighten.antivpn.bungee;
import dev.brighten.antivpn.AntiVPN;
import dev.brighten.antivpn.bungee.util.Config;
import dev.brighten.antivpn.command.Command;
import lombok.Getter;
import net.md_5.bungee.BungeeCord;
import net.md_5.bungee.api.ChatColor;
import net.md_5.bungee.api.CommandSender;
import net.md_5.bungee.api.chat.ComponentBuilder;
import net.md_5.bungee.api.chat.TextComponent;
import net.md_5.bungee.api.plugin.Plugin;
public class BungeePlugin extends Plugin {
@@ -20,7 +26,24 @@ public class BungeePlugin extends Plugin {
config = new Config();
//Loading plugin
AntiVPN.start(new BungeeConfig(), new BungeeListener());
AntiVPN.start(new BungeeConfig(), new BungeeListener(), new BungeePlayerExecutor());
for (Command command : AntiVPN.getInstance().getCommands()) {
BungeeCord.getInstance().getPluginManager().registerCommand(pluginInstance, new net.md_5.bungee.api.plugin
.Command(command.parent() + " " + command.name(), command.permission(), command.aliases()) {
@Override
public void execute(CommandSender commandSender, String[] strings) {
if(!commandSender.hasPermission("antivpn.command.*")
&& !commandSender.hasPermission(command.permission())) {
commandSender.sendMessage(new ComponentBuilder("No permission").color(ChatColor.RED)
.create());
return;
}
command.execute(new BungeeCommandExecutor(commandSender), strings);
}
});
}
}
@Override
@@ -1,7 +1,9 @@
package dev.brighten.antivpn;
import dev.brighten.antivpn.api.PlayerExecutor;
import dev.brighten.antivpn.api.VPNConfig;
import dev.brighten.antivpn.api.VPNExecutor;
import dev.brighten.antivpn.command.Command;
import dev.brighten.antivpn.utils.VPNResponse;
import dev.brighten.antivpn.utils.json.JSONException;
import dev.brighten.antivpn.utils.json.JSONObject;
@@ -11,6 +13,8 @@ import lombok.Getter;
import lombok.Setter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
@Getter
@Setter(AccessLevel.PRIVATE)
@@ -19,17 +23,23 @@ public class AntiVPN {
private static AntiVPN INSTANCE;
private VPNConfig config;
private VPNExecutor executor;
private PlayerExecutor playerExecutor;
private List<Command> commands = new ArrayList<>();
public static void start(VPNConfig config, VPNExecutor executor) {
public static void start(VPNConfig config, VPNExecutor executor, PlayerExecutor playerExecutor) {
//Initializing
INSTANCE = new AntiVPN();
INSTANCE.setConfig(config);
INSTANCE.setExecutor(executor);
INSTANCE.config = config;
INSTANCE.executor = executor;
INSTANCE.playerExecutor = playerExecutor;
getInstance().getExecutor().registerListeners();
getInstance().getConfig().update();
INSTANCE.executor.registerListeners();
INSTANCE.config.update();
//Registering commands
registerCommands();
}
public void stop() {
@@ -51,4 +61,7 @@ public class AntiVPN {
return VPNResponse.fromJson(result);
}
private static void registerCommands() {
}
}
@@ -0,0 +1,21 @@
package dev.brighten.antivpn.api;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import java.net.InetAddress;
import java.util.UUID;
@Getter
@RequiredArgsConstructor
public abstract class APIPlayer {
private final UUID uuid;
private final String name;
private final InetAddress ip;
public abstract void sendMessage(String message);
public abstract void kickPlayer(String reason);
public abstract boolean hasPermission(String permission);
}
@@ -0,0 +1,14 @@
package dev.brighten.antivpn.api;
import java.util.List;
import java.util.Optional;
import java.util.UUID;
public interface PlayerExecutor {
Optional<APIPlayer> getPlayer(String name);
Optional<APIPlayer> getPlayer(UUID uuid);
List<APIPlayer> getOnlinePlayers();
}
@@ -0,0 +1,28 @@
package dev.brighten.antivpn.command;
import dev.brighten.antivpn.AntiVPN;
public abstract class Command {
public Command() {
for (Command child : children()) {
AntiVPN.getInstance().getCommands().add(child);
}
}
public abstract String permission();
public abstract String name();
public abstract String[] aliases();
public abstract String description();
public abstract String usage();
public abstract String parent();
public abstract Command[] children();
public abstract String execute(CommandExecutor executor, String[] args);
}
@@ -0,0 +1,8 @@
package dev.brighten.antivpn.command;
public interface CommandExecutor {
void sendMessage(String message);
boolean hasPermission(String permission);
}
@@ -0,0 +1,62 @@
package dev.brighten.antivpn.command.impl;
import dev.brighten.antivpn.command.Command;
import dev.brighten.antivpn.command.CommandExecutor;
import dev.brighten.antivpn.utils.StringUtil;
import java.util.ArrayList;
import java.util.List;
public class AntiVPNCommand extends Command {
@Override
public String permission() {
return "antivpn.command";
}
@Override
public String name() {
return "antivpn";
}
@Override
public String[] aliases() {
return new String[] {"kaurivpn", "kvpn", "vpn", "avpn"};
}
@Override
public String description() {
return "The main help command";
}
@Override
public String usage() {
return "";
}
@Override
public String parent() {
return "";
}
@Override
public Command[] children() {
return new Command[] {new LookupCommand()};
}
@Override
public String execute(CommandExecutor uuid, String[] args) {
List<String> messages = new ArrayList<>();
messages.add(StringUtil.line("&8"));
messages.add("&6&lAntiVPN Help Page");
messages.add("");
messages.add(String.format("&8/&f%s &8- &7&o%s", "antivpn", description()));
for (Command child : children()) {
messages.add(String.format("&8/&f%s &8- &7&o%s", "&7antivpn &f" + child.name() + " &7" + child.usage(),
description()));
}
messages.add(StringUtil.line("&8"));
return String.join("\n", messages);
}
}
@@ -0,0 +1,81 @@
package dev.brighten.antivpn.command.impl;
import dev.brighten.antivpn.AntiVPN;
import dev.brighten.antivpn.api.APIPlayer;
import dev.brighten.antivpn.command.Command;
import dev.brighten.antivpn.command.CommandExecutor;
import dev.brighten.antivpn.utils.StringUtil;
import java.util.Optional;
public class LookupCommand extends Command {
@Override
public String permission() {
return "antivpn.command.lookup";
}
@Override
public String name() {
return "lookup";
}
@Override
public String[] aliases() {
return new String[] {"check"};
}
@Override
public String description() {
return "Lookup a player's ip info";
}
@Override
public String usage() {
return "<player>";
}
@Override
public String parent() {
return "antivpn";
}
@Override
public Command[] children() {
return new Command[0];
}
@Override
public String execute(CommandExecutor executor, String[] args) {
if(args.length == 0) {
return "&cPlease supply a player to check the VPN information of";
}
Optional<APIPlayer> player = AntiVPN.getInstance().getPlayerExecutor().getPlayer(args[0]);
if(!player.isPresent()) {
return String.format("&cNo player found with the name \"%s\"", args[0]);
}
AntiVPN.getInstance().getExecutor().checkIp(player.get().getIp().getHostAddress(),
false, result -> {
if(!result.isSuccess()) {
executor.sendMessage("&cThere was an error trying to find the information of this player.");
} else {
executor.sendMessage(StringUtil.line("&8"));
executor.sendMessage("&6&l" + player.get().getName() + "s &7&lConnection Information");
executor.sendMessage("");
executor.sendMessage(String.format("&e%s&8: &f%s", "Proxy", result.isProxy()
? "&a" + result.getMethod() : "&cNo"));
executor.sendMessage(String.format("&e%s&8: &f%s", "ISP", result.getIsp()));
executor.sendMessage(String.format("&e%s&8: &f%s", "Country", result.getCountryName()));
executor.sendMessage(String.format("&e%s&8: &f%s", "City", result.getCity()));
executor.sendMessage(String.format("&e%s&8: &f%s", "Coordinates", result.getLatitude()
+ "&7/&f" + result.getLongitude()));
executor.sendMessage(StringUtil.line("&8"));
}
});
return "&7Looking up the IP information for player " + player.get().getName() + "...";
}
}
@@ -0,0 +1,15 @@
package dev.brighten.antivpn.utils;
public class StringUtil {
public static String line(String color) {
return color + "&m-----------------------------------------------------";
}
public static String line() {
return "&m-----------------------------------------------------";
}
public static String lineNoStrike(String color) {
return color + "-----------------------------------------------------";
}
}