diff --git a/Common/src/main/java/dev/brighten/antivpn/api/APIPlayer.java b/Common/src/main/java/dev/brighten/antivpn/api/APIPlayer.java index 1660a73..086755a 100644 --- a/Common/src/main/java/dev/brighten/antivpn/api/APIPlayer.java +++ b/Common/src/main/java/dev/brighten/antivpn/api/APIPlayer.java @@ -54,7 +54,10 @@ public abstract class APIPlayer { CheckResult cachedResult = checkResultCache.getIfPresent(ip.getHostAddress()); if(cachedResult != null) { - return cachedResult; + if(cachedResult.response().getIp().equals(ip.getHostAddress())) { + AntiVPN.getInstance().getExecutor().log(Level.FINE, "Cached result for " + ip.getHostAddress() + " is " + cachedResult.resultType()); + return cachedResult; + } } AntiVPN.getInstance().getExecutor().checkIp(ip.getHostAddress()) diff --git a/Common/src/main/java/dev/brighten/antivpn/depends/LibraryLoader.java b/Common/src/main/java/dev/brighten/antivpn/depends/LibraryLoader.java index 2ef3bca..8f16b26 100644 --- a/Common/src/main/java/dev/brighten/antivpn/depends/LibraryLoader.java +++ b/Common/src/main/java/dev/brighten/antivpn/depends/LibraryLoader.java @@ -55,14 +55,20 @@ import java.util.jar.JarOutputStream; public final class LibraryLoader { @SuppressWarnings("Guava") - private static final Supplier URL_INJECTOR = Suppliers.memoize(() -> - URLClassLoaderAccess.create((URLClassLoader) AntiVPN.getInstance().getClass().getClassLoader())); + private static final Supplier URL_INJECTOR = AntiVPN.getInstance().getClass().getClassLoader() instanceof URLClassLoader ? + Suppliers.memoize(() -> + URLClassLoaderAccess.create((URLClassLoader) AntiVPN.getInstance().getClass().getClassLoader())) + : null; public static void loadAll(Object object) { + if(URL_INJECTOR == null) + return; loadAll(object.getClass()); } public static void loadAll(Class clazz) { + if(URL_INJECTOR == null) + return; MavenLibrary[] libs = clazz.getDeclaredAnnotationsByType(MavenLibrary.class); for (MavenLibrary lib : libs) { diff --git a/Sponge/pom.xml b/Sponge/pom.xml index 7af842c..bb8f79a 100644 --- a/Sponge/pom.xml +++ b/Sponge/pom.xml @@ -29,7 +29,32 @@ dev.brighten.antivpn Common 1.9.4-DEV - provided + compile + + + com.github.ben-manes.caffeine + caffeine + 3.1.8 + compile + + + org.mongodb + mongo-java-driver + 3.12.14 + compile + + + com.mysql + mysql-connector-j + 9.1.0 + jar + compile + + + com.h2database + h2 + 2.2.220 + compile @@ -61,7 +86,77 @@ shade + + + *:* + + com/google/** + org/objectweb/** + org/checkerframework/** + + + + + + org.yaml.snakeyaml + dev.brighten.antivpn.shaded.org.yaml.snakeyaml + + + dev.brighten.antivpn.depends.Relocate + dev.brighten.antivpn.depends.MavenLibraries + + + + com.github.benmanes.caffeine + dev.brighten.antivpn.com.github.benmanes.caffeine + + + org.h2 + dev.brighten.antivpn.shaded.org.h2 + + + dev.brighten.antivpn.depends.Relocate + dev.brighten.antivpn.depends.MavenLibraries + + + + org.bson + dev.brighten.antivpn.shaded.org.bson + + + dev.brighten.antivpn.depends.Relocate + dev.brighten.antivpn.depends.MavenLibraries + + + + com.mongodb + dev.brighten.antivpn.shaded.com.mongodb + + + dev.brighten.antivpn.depends.Relocate + dev.brighten.antivpn.depends.MavenLibraries + + + + com.mysql.cj + dev.brighten.antivpn.shaded.com.mysql.cj + + + dev.brighten.antivpn.depends.Relocate + dev.brighten.antivpn.depends.MavenLibraries + + + + com.mysql.jdbc + dev.brighten.antivpn.shaded.com.mysql.jdbc + + + dev.brighten.antivpn.depends.Relocate + dev.brighten.antivpn.depends.MavenLibraries + + + diff --git a/Sponge/src/main/java/dev/brighten/antivpn/sponge/SpongeListener.java b/Sponge/src/main/java/dev/brighten/antivpn/sponge/SpongeListener.java index c996343..d059c0b 100644 --- a/Sponge/src/main/java/dev/brighten/antivpn/sponge/SpongeListener.java +++ b/Sponge/src/main/java/dev/brighten/antivpn/sponge/SpongeListener.java @@ -101,6 +101,6 @@ public class SpongeListener extends VPNExecutor { @Override public void disablePlugin() { - Sponge.eventManager().unregisterListeners(this); + AntiVPN.getInstance().getExecutor().log(Level.INFO, "Disabling listeners for plugin..."); } } diff --git a/Sponge/src/main/java/dev/brighten/antivpn/sponge/SpongePlayerExecutor.java b/Sponge/src/main/java/dev/brighten/antivpn/sponge/SpongePlayerExecutor.java index be373de..3904633 100644 --- a/Sponge/src/main/java/dev/brighten/antivpn/sponge/SpongePlayerExecutor.java +++ b/Sponge/src/main/java/dev/brighten/antivpn/sponge/SpongePlayerExecutor.java @@ -7,6 +7,7 @@ import dev.brighten.antivpn.api.PlayerExecutor; import org.spongepowered.api.Sponge; import org.spongepowered.api.entity.living.player.server.ServerPlayer; +import java.util.Collections; import java.util.List; import java.util.Optional; import java.util.UUID; @@ -49,6 +50,7 @@ public class SpongePlayerExecutor implements PlayerExecutor { @Override public List getOnlinePlayers() { + if(!Sponge.game().isServerAvailable()) return Collections.emptyList(); return Sponge.server().onlinePlayers() .stream() .map(pl -> { diff --git a/Sponge/src/main/java/dev/brighten/antivpn/sponge/SpongePlugin.java b/Sponge/src/main/java/dev/brighten/antivpn/sponge/SpongePlugin.java index ae9cbb3..1aa11f2 100644 --- a/Sponge/src/main/java/dev/brighten/antivpn/sponge/SpongePlugin.java +++ b/Sponge/src/main/java/dev/brighten/antivpn/sponge/SpongePlugin.java @@ -2,38 +2,35 @@ package dev.brighten.antivpn.sponge; import com.google.inject.Inject; import dev.brighten.antivpn.AntiVPN; +import dev.brighten.antivpn.sponge.command.SpongeCommand; import lombok.Getter; import org.spongepowered.api.Server; import org.apache.logging.log4j.Logger; import org.spongepowered.api.Sponge; +import org.spongepowered.api.command.Command; import org.spongepowered.api.config.ConfigManager; import org.spongepowered.api.event.Listener; import org.spongepowered.api.event.lifecycle.*; import org.spongepowered.plugin.PluginContainer; import org.spongepowered.plugin.builtin.jvm.Plugin; -import java.nio.file.Path; - @Plugin("kaurivpn") @Getter public class SpongePlugin { //Plugin init - private final PluginContainer container; - private final Logger logger; - @Inject - SpongePlugin(final PluginContainer container, final Logger logger) { - this.container = container; - this.logger = logger; - } - + private PluginContainer container; + @Inject + private Logger logger; + @Getter + private static SpongePlugin instance; @Listener - public void onServerStart(final ConstructPluginEvent event) { - //Start AntiVPN + public void onConstruct(final ConstructPluginEvent event) { + instance = this; - ConfigManager configManager = Sponge.game().configManager(); + ConfigManager configManager = Sponge.configManager(); SpongeListener spongeListener = new SpongeListener(); var path = configManager.sharedConfig(container).directory(); @@ -48,8 +45,16 @@ public class SpongePlugin { AntiVPN.getInstance().getExecutor().disablePlugin(); } - public static SpongePlugin getInstance() { - return (SpongePlugin) Sponge.pluginManager().plugin("kaurivpn").get(); + @Listener + public void onRegisterRawCommands(final RegisterCommandEvent event){ + if(AntiVPN.getInstance() == null) { + for(int i = 0 ; i < 5 ; i++) System.out.println("FUCKING NULL"); + return; + } + AntiVPN.getInstance().getExecutor().log("Registering commands..."); + for (dev.brighten.antivpn.command.Command command : AntiVPN.getInstance().getCommands()) { + AntiVPN.getInstance().getExecutor().log("Registering command %s...", command.name()); + event.register(this.container, new SpongeCommand(command), command.name(), command.aliases()); + } } - } diff --git a/Sponge/src/main/java/dev/brighten/antivpn/sponge/command/SpongeCommand.java b/Sponge/src/main/java/dev/brighten/antivpn/sponge/command/SpongeCommand.java new file mode 100644 index 0000000..3bccdc2 --- /dev/null +++ b/Sponge/src/main/java/dev/brighten/antivpn/sponge/command/SpongeCommand.java @@ -0,0 +1,111 @@ +package dev.brighten.antivpn.sponge.command; + +import dev.brighten.antivpn.AntiVPN; +import dev.brighten.antivpn.command.Command; +import dev.brighten.antivpn.command.CommandExecutor; +import dev.brighten.antivpn.utils.StringUtil; +import lombok.val; +import net.kyori.adventure.text.Component; +import org.checkerframework.checker.nullness.qual.NonNull; +import org.spongepowered.api.command.CommandCause; +import org.spongepowered.api.command.CommandCompletion; +import org.spongepowered.api.command.CommandResult; +import org.spongepowered.api.command.parameter.ArgumentReader; + +import java.util.*; +import java.util.stream.IntStream; + +public class SpongeCommand implements org.spongepowered.api.command.Command.Raw { + + private final Command command; + + public SpongeCommand(Command command) { + this.command = command; + } + + @Override + public CommandResult process(CommandCause sender, ArgumentReader.Mutable arguments) { + + String[] args = arguments.input().split(" "); + + CommandExecutor commandExecutor = new SpongeCommandExecutor(sender); + + val children = command.children(); + + if(children.length > 0 && args.length > 0) { + for (dev.brighten.antivpn.command.Command child : children) { + if(child.name().equalsIgnoreCase(args[0]) || Arrays.stream(child.aliases()) + .anyMatch(alias -> alias.equalsIgnoreCase(args[0]))) { + if(!sender.hasPermission("antivpn.command.*") + && !sender.hasPermission(child.permission())) { + return CommandResult.error(Component.text(StringUtil.translateAlternateColorCodes('&', + AntiVPN.getInstance().getMessageHandler().getString("no-permission").getMessage()))); + } + + commandExecutor.sendMessage(StringUtil + .translateAlternateColorCodes('&', + child.execute(commandExecutor, IntStream + .range(0, args.length - 1) + .mapToObj(i -> args[i + 1]).toArray(String[]::new)))); + return CommandResult.success(); + } + } + } + + commandExecutor.sendMessage(StringUtil + .translateAlternateColorCodes('&', + command.execute(new SpongeCommandExecutor(sender), args))); + + command.execute(new SpongeCommandExecutor(sender), args); + return CommandResult.success(); + } + + @Override + public List complete(CommandCause sender, ArgumentReader.Mutable arguments) { + val children = command.children(); + String[] args = arguments.input().split(" "); + if(children.length > 0 && args.length > 0) { + for (dev.brighten.antivpn.command.Command child : children) { + if(child.name().equalsIgnoreCase(args[0]) || Arrays.stream(child.aliases()) + .anyMatch(alias2 -> alias2.equalsIgnoreCase(args[0]))) { + return child.tabComplete(new SpongeCommandExecutor(sender), "alias", IntStream + .range(0, args.length - 1) + .mapToObj(i -> args[i + 1]).toArray(String[]::new)) + .stream() + .map(CommandCompletion::of) + .toList(); + } + } + } + return command.tabComplete(new SpongeCommandExecutor(sender), "alias", args) + .stream() + .map(CommandCompletion::of) + .toList(); + } + + @Override + public boolean canExecute(CommandCause cause) { + return cause.hasPermission(command.permission()); + } + + @Override + public Optional shortDescription(CommandCause cause) { + return command.description() != null ? Optional.of(Component.text(command.description())) : Optional.empty(); + } + + @Override + public Optional extendedDescription(CommandCause cause) { + return Optional.empty(); + } + + @Override + public Optional help(@NonNull CommandCause cause) { + return Optional.of(Component.text(StringUtil.translateAlternateColorCodes('&', + command.execute(new SpongeCommandExecutor(cause), new String[0])))); + } + + @Override + public Component usage(CommandCause cause) { + return command.usage() != null ? Component.text(command.usage()) : Component.empty(); + } +} diff --git a/Sponge/src/main/java/dev/brighten/antivpn/sponge/command/SpongeCommandExecutor.java b/Sponge/src/main/java/dev/brighten/antivpn/sponge/command/SpongeCommandExecutor.java new file mode 100644 index 0000000..de96dd5 --- /dev/null +++ b/Sponge/src/main/java/dev/brighten/antivpn/sponge/command/SpongeCommandExecutor.java @@ -0,0 +1,42 @@ +package dev.brighten.antivpn.sponge.command; + +import dev.brighten.antivpn.AntiVPN; +import dev.brighten.antivpn.api.APIPlayer; +import dev.brighten.antivpn.command.CommandExecutor; +import dev.brighten.antivpn.sponge.util.StringUtil; +import lombok.RequiredArgsConstructor; +import net.kyori.adventure.text.Component; +import org.spongepowered.api.command.CommandCause; +import org.spongepowered.api.entity.living.player.server.ServerPlayer; + +import java.util.Optional; + +@RequiredArgsConstructor +public class SpongeCommandExecutor implements CommandExecutor { + + private final CommandCause cause; + + @Override + public void sendMessage(String message, Object... objects) { + cause.sendMessage(Component.text(StringUtil.translateColorCodes('&', + String.format(message, objects)))); + } + + @Override + public boolean hasPermission(String permission) { + return cause.hasPermission(permission); + } + + @Override + public Optional getPlayer() { + if(cause.subject() instanceof ServerPlayer serverPlayer) { + return AntiVPN.getInstance().getPlayerExecutor().getPlayer(serverPlayer.uniqueId()); + } + return Optional.empty(); + } + + @Override + public boolean isPlayer() { + return cause.subject() instanceof ServerPlayer; + } +} diff --git a/Universal/pom.xml b/Universal/pom.xml index 0706963..b036049 100644 --- a/Universal/pom.xml +++ b/Universal/pom.xml @@ -42,11 +42,6 @@ ${project.version} compile - - dev.brighten.antivpn - Sponge - ${project.version} -