reorganize stuff

This commit is contained in:
YouHaveTrouble
2021-04-25 19:01:27 +02:00
parent 8a16ee39ef
commit d4396fdba2
42 changed files with 1125 additions and 949 deletions
+103
View File
@@ -0,0 +1,103 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>eu.endermite.commandwhitelist</groupId>
<artifactId>CommandWhitelistVelocity</artifactId>
<version>2.0</version>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>8</source>
<target>8</target>
</configuration>
</plugin>
</plugins>
</build>
<packaging>jar</packaging>
<name>CommandWhitelistVelocity</name>
<description>You decide what commands players can use or tab complete on your server!</description>
<properties>
<java.version>1.8</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<url>youhavetrouble.me</url>
<profiles>
<profile>
<id>release</id>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.2.4</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<createDependencyReducedPom>false</createDependencyReducedPom>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
</build>
</profile>
</profiles>
<repositories>
<repository>
<id>velocitypowered-repo</id>
<url>https://repo.velocitypowered.com/releases/</url>
</repository>
<repository>
<id>minecraft-libraries</id>
<url>https://libraries.minecraft.net/</url>
</repository>
<repository>
<id>spongepowered-repo</id>
<url>https://repo.spongepowered.org/maven</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>com.velocitypowered</groupId>
<artifactId>velocity-api</artifactId>
<version>1.1.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>eu.endermite</groupId>
<artifactId>Common</artifactId>
<version>2.0</version>
<scope>compile</scope>
</dependency>
</dependencies>
</project>
@@ -0,0 +1,119 @@
package eu.endermite.commandwhitelist.velocity;
import com.velocitypowered.api.command.CommandMeta;
import com.velocitypowered.api.command.CommandSource;
import com.velocitypowered.api.event.Subscribe;
import com.velocitypowered.api.event.command.CommandExecuteEvent;
import com.velocitypowered.api.event.command.PlayerAvailableCommandsEvent;
import com.velocitypowered.api.event.proxy.ProxyInitializeEvent;
import com.velocitypowered.api.plugin.annotation.DataDirectory;
import com.velocitypowered.api.proxy.Player;
import com.velocitypowered.api.proxy.ProxyServer;
import eu.endermite.commandwhitelist.common.CWGroup;
import eu.endermite.commandwhitelist.common.ConfigCache;
import eu.endermite.commandwhitelist.velocity.command.VelocityMainCommand;
import net.kyori.adventure.identity.Identity;
import net.kyori.adventure.text.Component;
import org.slf4j.Logger;
import javax.inject.Inject;
import java.io.File;
import java.nio.file.Path;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
public class CommandWhitelistVelocity {
private static CommandWhitelistVelocity plugin;
private static ProxyServer server;
private static ConfigCache configCache;
private static Path folder;
@Inject
public CommandWhitelistVelocity(ProxyServer server, Logger logger, @DataDirectory final Path folder) {
CommandWhitelistVelocity.server = server;
CommandWhitelistVelocity.folder = folder;
CommandWhitelistVelocity.plugin = this;
}
private static void reloadConfig() {
configCache = new ConfigCache(new File(String.valueOf(folder), "config.yml"), false);
}
public static void reloadConfig(CommandSource source) {
server.getScheduler().buildTask(plugin, () -> {
reloadConfig();
source.sendMessage(Identity.nil(), Component.text(getConfigCache().config_reloaded));
}).schedule();
}
@Subscribe
public void onProxyInitialization(ProxyInitializeEvent event) {
reloadConfig();
CommandMeta commandMeta = server.getCommandManager().metaBuilder("vcw").build();
server.getCommandManager().register(commandMeta, new VelocityMainCommand());
}
@Subscribe
public void onUserCommandSendEvent(PlayerAvailableCommandsEvent event) {
if (event.getPlayer().hasPermission("commandwhitelist.bypass"))
return;
HashSet<String> allowedCommands = CommandWhitelistVelocity.getCommands(event.getPlayer(), configCache.getGroupList());
event.getRootNode().getChildren().removeIf((commandNode) ->
server.getCommandManager().hasCommand(commandNode.getName())
&& !allowedCommands.contains(commandNode.getName())
);
}
@Subscribe
public void onUserCommandExecuteEvent(com.velocitypowered.api.event.command.CommandExecuteEvent event) {
if (!(event.getCommandSource() instanceof Player))
return;
Player player = (Player) event.getCommandSource();
if (player.hasPermission("commandwhitelist.bypass"))
return;
HashSet<String> allowedCommands = CommandWhitelistVelocity.getCommands(player, configCache.getGroupList());
String command = event.getCommand().split(" ")[0];
if (server.getCommandManager().hasCommand(command)
&& !allowedCommands.contains(command))
event.setResult(CommandExecuteEvent.CommandResult.forwardToServer());
}
public static ConfigCache getConfigCache() {
return configCache;
}
/**
* @param player Velocity Player
* @return commands available to the player
*/
public static HashSet<String> getCommands(Player player, HashMap<String, CWGroup> groups) {
HashSet<String> commandList = new HashSet<>();
for (Map.Entry<String, CWGroup> s : groups.entrySet()) {
if (s.getKey().equalsIgnoreCase("default"))
commandList.addAll(s.getValue().getCommands());
else if (player.hasPermission("commandwhitelist.group." + s.getKey()))
commandList.addAll(s.getValue().getCommands());
}
return commandList;
}
/**
* @param player Velocity Player
* @return subcommands unavailable for the player
*/
public static HashSet<String> getSuggestions(Player player, HashMap<String, CWGroup> groups) {
HashSet<String> suggestionList = new HashSet<>();
for (Map.Entry<String, CWGroup> s : groups.entrySet()) {
if (s.getKey().equalsIgnoreCase("default"))
suggestionList.addAll(s.getValue().getSubCommands());
if (player.hasPermission("commandwhitelist.group." + s.getKey()))
continue;
suggestionList.addAll(s.getValue().getSubCommands());
}
return suggestionList;
}
}
@@ -0,0 +1,47 @@
package eu.endermite.commandwhitelist.velocity.command;
import com.velocitypowered.api.command.CommandSource;
import com.velocitypowered.api.command.SimpleCommand;
import eu.endermite.commandwhitelist.velocity.CommandWhitelistVelocity;
import net.kyori.adventure.text.Component;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.CompletableFuture;
public class VelocityMainCommand implements SimpleCommand {
@Override
public void execute(final Invocation invocation) {
CommandSource source = invocation.source();
String[] args = invocation.arguments();
if (args.length > 0) {
if (args.length == 1 && args[0].equalsIgnoreCase("reload")) {
if (source.hasPermission("commandwhitelist.reload")) {
CommandWhitelistVelocity.reloadConfig(source);
} else {
source.sendMessage(Component.text(CommandWhitelistVelocity.getConfigCache().no_permission));
}
}
} else {
source.sendMessage(Component.text("&bCommand Whitelist by YouHaveTrouble".replaceAll("&", "§")));
if (source.hasPermission("commandwhitelist.reload")) {
source.sendMessage(Component.text("&9/vcw reload &b- Reload velocity plugin configuration".replaceAll("&", "§")));
}
}
}
@Override
public CompletableFuture<List<String>> suggestAsync(Invocation invocation) {
CommandSource source = invocation.source();
String[] args = invocation.arguments();
return CompletableFuture.supplyAsync(() -> {
List<String> suggestions = new ArrayList<>();
if (args.length == 1) {
if (source.hasPermission("commandwhitelist.reload") && "reload".startsWith(args[0]))
suggestions.add("reload");
}
return suggestions;
});
}
}
@@ -0,0 +1,38 @@
package eu.endermite.commandwhitelist.velocity.config;
import com.moandjiezana.toml.Toml;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class VelocityConfigCache {
private HashMap<String, List<String>> permList = new HashMap<>();
private final String noPermission, noSubCommand, configReloaded;
public VelocityConfigCache(Toml config) {
Toml messages = config.getTable("messages");
noPermission = messages.getString("no-permission", "&cYou don't have permission to do this.");
noSubCommand = messages.getString("no-such-subcommand", "&cNo subcommand by that name.");
configReloaded = messages.getString("config-reloaded", "&eConfiguration reloaded.");
Toml groups = config.getTable("commands");
for (Map.Entry<String, Object> set : groups.entrySet()) {
this.permList.put(set.getKey(), (List<String>) set.getValue());
}
}
public HashMap<String, List<String>> getPermList() {
return permList;
}
public String getNoPermission() {
return noPermission.replaceAll("&", "§");
}
public String getNoSubCommand() {return noSubCommand.replaceAll("&", "§");}
public String getConfigReloaded() {return configReloaded.replaceAll("&", "§");}
}
@@ -0,0 +1,9 @@
{
"id":"commandwhitelist",
"name":"CommandWhitelist",
"version":"${project.version}",
"description":"You decide what commands players can use or tab complete on your server!",
"authors":["YouHaveTrouble"],
"dependencies":[],
"main":"eu.endermite.commandwhitelist.velocity.CommandWhitelistVelocity"
}