diff --git a/pom.xml b/pom.xml
index aa017f0..b9f5a1b 100644
--- a/pom.xml
+++ b/pom.xml
@@ -6,7 +6,7 @@
eu.endermite
CommandWhitelist
- 1.1.0
+ 1.2.0
jar
CommandWhitelist
@@ -71,5 +71,11 @@
1.16.1-R0.1-SNAPSHOT
provided
+
+ net.md-5
+ bungeecord-api
+ 1.15-SNAPSHOT
+ provided
+
diff --git a/src/main/java/eu/endermite/commandwhitelist/CommandWhitelistBungee.java b/src/main/java/eu/endermite/commandwhitelist/CommandWhitelistBungee.java
new file mode 100644
index 0000000..d79b2c6
--- /dev/null
+++ b/src/main/java/eu/endermite/commandwhitelist/CommandWhitelistBungee.java
@@ -0,0 +1,68 @@
+package eu.endermite.commandwhitelist;
+
+import com.google.common.io.ByteStreams;
+import eu.endermite.commandwhitelist.config.BungeeConfigCache;
+import eu.endermite.commandwhitelist.listeners.BungeeChatEventListener;
+import net.md_5.bungee.api.plugin.Plugin;
+import net.md_5.bungee.config.Configuration;
+import net.md_5.bungee.config.ConfigurationProvider;
+import net.md_5.bungee.config.YamlConfiguration;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.InputStream;
+import java.io.OutputStream;
+
+public final class CommandWhitelistBungee extends Plugin {
+
+ private static eu.endermite.commandwhitelist.CommandWhitelistBungee plugin;
+ private static BungeeConfigCache configCache;
+
+ @Override
+ public void onEnable() {
+
+ plugin = this;
+
+ loadConfig();
+
+ this.getProxy().getPluginManager().registerListener(this, new BungeeChatEventListener());
+
+ }
+
+ public static eu.endermite.commandwhitelist.CommandWhitelistBungee getPlugin() {
+ return plugin;
+ }
+
+ public static BungeeConfigCache getConfigCache() {
+ return configCache;
+ }
+
+
+ public void loadConfig() {
+ try {
+ if (!getDataFolder().exists()) {
+ getDataFolder().mkdir();
+ }
+
+ File file = new File(getDataFolder(), "config.yml");
+
+ if (!file.exists()) {
+ file.createNewFile();
+ try (InputStream in = getResourceAsStream("bungeeconfig.yml");
+ OutputStream out = new FileOutputStream(file)) {
+ ByteStreams.copy(in, out);
+ }
+ }
+ final Configuration config = ConfigurationProvider.getProvider(YamlConfiguration.class).load(file);
+ ConfigurationProvider.getProvider(YamlConfiguration.class).save(config, new File(getDataFolder(), "config.yml"));
+ configCache = new BungeeConfigCache(config);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ public void loadConfigAsync() {
+ getProxy().getScheduler().runAsync(this, this::loadConfig);
+ }
+
+}
diff --git a/src/main/java/eu/endermite/commandwhitelist/config/BungeeConfigCache.java b/src/main/java/eu/endermite/commandwhitelist/config/BungeeConfigCache.java
new file mode 100644
index 0000000..cd308e7
--- /dev/null
+++ b/src/main/java/eu/endermite/commandwhitelist/config/BungeeConfigCache.java
@@ -0,0 +1,38 @@
+package eu.endermite.commandwhitelist.config;
+
+import net.md_5.bungee.config.Configuration;
+
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.List;
+
+public class BungeeConfigCache {
+
+ private HashMap> permList = new HashMap<>();
+ private String prefix, commandDenied, noPermission, noSubCommand, configReloaded;
+
+ public BungeeConfigCache(Configuration config) {
+
+ prefix = config.getString("messages.prefix");
+ commandDenied = config.getString("messages.command-denied");
+ noPermission = config.getString("messages.no-permission");
+ noSubCommand = config.getString("messages.no-such-subcommand");
+ configReloaded = config.getString("messages.config-reloaded");
+
+ Collection perms = config.getSection("commands").getKeys();
+ for (String s : perms) {
+ this.permList.put(s, config.getStringList("commands."+s));
+ }
+ }
+
+ public HashMap> getPermList() {
+ return permList;
+ }
+
+ public String getPrefix() {return prefix;}
+ public String getCommandDenied() {return commandDenied;}
+ public String getNoPermission() {return noPermission;}
+ public String getNoSubCommand() {return noSubCommand;}
+ public String getConfigReloaded() {return configReloaded;}
+
+}
diff --git a/src/main/java/eu/endermite/commandwhitelist/listeners/BungeeChatEventListener.java b/src/main/java/eu/endermite/commandwhitelist/listeners/BungeeChatEventListener.java
new file mode 100644
index 0000000..9882df4
--- /dev/null
+++ b/src/main/java/eu/endermite/commandwhitelist/listeners/BungeeChatEventListener.java
@@ -0,0 +1,54 @@
+package eu.endermite.commandwhitelist.listeners;
+
+import eu.endermite.commandwhitelist.CommandWhitelistBungee;
+import net.md_5.bungee.api.ChatColor;
+import net.md_5.bungee.api.connection.ProxiedPlayer;
+import net.md_5.bungee.api.plugin.Listener;
+import net.md_5.bungee.event.EventHandler;
+
+import java.util.List;
+import java.util.Map;
+
+public class BungeeChatEventListener implements Listener {
+
+
+ @EventHandler
+ public void onChatEvent(net.md_5.bungee.api.event.ChatEvent event) {
+
+ if (!event.isCancelled() && event.getSender() instanceof ProxiedPlayer) {
+ ProxiedPlayer player = (ProxiedPlayer) event.getSender();
+ if (event.isProxyCommand()) {
+ if (player.hasPermission("commandwhitelist.bypass")) {
+ return;
+ }
+ String command = event.getMessage().toLowerCase();
+ boolean found = false;
+ for (Map.Entry> s : CommandWhitelistBungee.getConfigCache().getPermList().entrySet()) {
+ if (player.hasPermission("commandwhitelist.commands." + s.getKey())) {
+ for (String comm : s.getValue()) {
+ comm = comm.toLowerCase();
+ if (command.equalsIgnoreCase("/"+comm)) {
+ found = true;
+ break;
+ }
+ else if (command.startsWith("/" + comm + " ")) {
+ found = true;
+ break;
+ }
+ }
+ }
+ }
+ if (!found) {
+ event.setCancelled(true);
+ player.sendMessage(ChatColor.translateAlternateColorCodes('&', CommandWhitelistBungee.getConfigCache().getPrefix() + CommandWhitelistBungee.getConfigCache().getCommandDenied()));
+ }
+
+ }
+
+
+
+ }
+
+ }
+
+}
diff --git a/src/main/resources/bungee.yml b/src/main/resources/bungee.yml
new file mode 100644
index 0000000..4fa6dca
--- /dev/null
+++ b/src/main/resources/bungee.yml
@@ -0,0 +1,4 @@
+name: CommandWhitelistBungee
+version: ${project.version}
+main: eu.endermite.commandwhitelist.CommandWhitelistBungee
+author: YouHaveTrouble
diff --git a/src/main/resources/bungeeconfig.yml b/src/main/resources/bungeeconfig.yml
new file mode 100644
index 0000000..5d565a1
--- /dev/null
+++ b/src/main/resources/bungeeconfig.yml
@@ -0,0 +1,20 @@
+# This is bungeecord version of the config.
+messages:
+ prefix: "CommandWhitelist > "
+ command-denied: "No such command."
+ no-permission: "&cYou don't have permission to do this."
+ no-such-subcommand: "&cNo subcommand by that name."
+ config-reloaded: "&eConfiguration reloaded."
+
+commands:
+ # Permissions that control what commands players can use
+ # you can add unlimited amount of whitelists
+
+ # commandwhitelist.commands.default
+ # this will be automatically given to players by default
+ default:
+ - glist
+ - server
+ # commandwhitelist.commands.example
+ example:
+ - example
\ No newline at end of file