diff --git a/CommandWhitelistBukkit/src/main/java/eu/endermite/commandwhitelist/bukkit/CommandWhitelistBukkit.java b/CommandWhitelistBukkit/src/main/java/eu/endermite/commandwhitelist/bukkit/CommandWhitelistBukkit.java index 8a4baba..a248eea 100644 --- a/CommandWhitelistBukkit/src/main/java/eu/endermite/commandwhitelist/bukkit/CommandWhitelistBukkit.java +++ b/CommandWhitelistBukkit/src/main/java/eu/endermite/commandwhitelist/bukkit/CommandWhitelistBukkit.java @@ -72,9 +72,9 @@ public class CommandWhitelistBukkit extends JavaPlugin { File configFile = new File("plugins/CommandWhitelist/config.yml"); if (configCache == null) { try { - configCache = new ConfigCache(configFile, true, getSLF4JLogger()); + configCache = new ConfigCache(configFile, true, true, getSLF4JLogger()); } catch (NoSuchMethodError e) { - configCache = new ConfigCache(configFile, true, null); + configCache = new ConfigCache(configFile, true, true, null); } return; } diff --git a/CommandWhitelistBukkit/src/main/java/eu/endermite/commandwhitelist/bukkit/listeners/PlayerCommandPreProcessListener.java b/CommandWhitelistBukkit/src/main/java/eu/endermite/commandwhitelist/bukkit/listeners/PlayerCommandPreProcessListener.java index b23ed61..739d8da 100644 --- a/CommandWhitelistBukkit/src/main/java/eu/endermite/commandwhitelist/bukkit/listeners/PlayerCommandPreProcessListener.java +++ b/CommandWhitelistBukkit/src/main/java/eu/endermite/commandwhitelist/bukkit/listeners/PlayerCommandPreProcessListener.java @@ -5,7 +5,9 @@ import eu.endermite.commandwhitelist.common.CWPermission; import eu.endermite.commandwhitelist.common.CommandUtil; import eu.endermite.commandwhitelist.common.ConfigCache; import eu.endermite.commandwhitelist.common.commands.CWCommand; +import net.kyori.adventure.key.Key; import net.kyori.adventure.platform.bukkit.BukkitAudiences; +import net.kyori.adventure.sound.Sound; import net.kyori.adventure.text.Component; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; @@ -41,6 +43,22 @@ public class PlayerCommandPreProcessListener implements Listener { case ACTIONBAR: audiences.player(player).sendActionBar(message); break; + case CHAT_AND_ACTIONBAR: + audiences.player(player).sendMessage(message); + audiences.player(player).sendActionBar(message); + break; + + } + if(config.command_denied_sound_enabled) { + try { + String soundKey = config.command_denied_sound_key; + Key sound = Key.key(soundKey); + float soundVolume = config.command_denied_sound_volume; + float soundPitch = config.command_denied_sound_pitch; + audiences.player(player).playSound(Sound.sound(sound, Sound.Source.UI, soundVolume, soundPitch)); + } catch (Exception e) { + config.warn("Invalid sound. unable to play sound!"); + } } return; } diff --git a/CommandWhitelistCommon/src/main/java/eu/endermite/commandwhitelist/common/ConfigCache.java b/CommandWhitelistCommon/src/main/java/eu/endermite/commandwhitelist/common/ConfigCache.java index 47ffe14..a8df890 100644 --- a/CommandWhitelistCommon/src/main/java/eu/endermite/commandwhitelist/common/ConfigCache.java +++ b/CommandWhitelistCommon/src/main/java/eu/endermite/commandwhitelist/common/ConfigCache.java @@ -2,6 +2,7 @@ package eu.endermite.commandwhitelist.common; import io.github.thatsmusic99.configurationmaster.api.ConfigFile; import io.github.thatsmusic99.configurationmaster.api.ConfigSection; +import net.kyori.adventure.key.Key; import java.io.File; import java.io.IOException; @@ -12,17 +13,22 @@ public class ConfigCache { private final File configFile; private ConfigFile config; private final Object logger; - private final boolean canDoProtocolLib; + private final boolean canDoProtocolLib, supportsCommandDeniedMessage; private final HashMap groupList = new LinkedHashMap<>(); public String prefix, command_denied, no_permission, no_such_subcommand, config_reloaded, added_to_whitelist, - removed_from_whitelist, group_doesnt_exist, subcommand_denied; + removed_from_whitelist, group_doesnt_exist, subcommand_denied, command_denied_sound_key; public boolean useProtocolLib = false; + public boolean command_denied_sound_enabled = false; + public float command_denied_sound_volume = 1.0f; + public float command_denied_sound_pitch = 1.0f; public MessageType messageType = MessageType.CHAT; public boolean debug = false; + private final String default_command_denied_sound_key = "entity.villager.no"; - public ConfigCache(File configFile, boolean canDoProtocolLib, Object logger) { + public ConfigCache(File configFile, boolean canDoProtocolLib, boolean supportsCommandDeniedMessage, Object logger) { this.configFile = configFile; this.canDoProtocolLib = canDoProtocolLib; + this.supportsCommandDeniedMessage = supportsCommandDeniedMessage; this.logger = logger; try { @@ -43,8 +49,11 @@ public class ConfigCache { } config.addDefault("messages.prefix", "CommandWhitelist > "); - config.addDefault("messages.command_denied", "No such command."); - config.addDefault("messages.subcommand_denied", "You cannot use this subcommand"); + if (supportsCommandDeniedMessage) { + config.addDefault("messages.command_denied", "No such command."); + config.addDefault("messages.subcommand_denied", "You cannot use this subcommand"); + } + config.addDefault("messages.no_permission", "You don't have permission to do this."); config.addDefault("messages.no_such_subcommand", "No subcommand by that name."); config.addDefault("messages.config_reloaded", "Configuration reloaded."); @@ -57,7 +66,13 @@ public class ConfigCache { if (canDoProtocolLib) config.addDefault("use_protocollib", false, "Do not enable if you don't have issues with aliased commands.\nThis requires server restart to take effect."); - config.addDefault("message_type", MessageType.CHAT.toString(), "Valid message types are CHAT and ACTIONBAR. Does nothing on velocity."); + if (supportsCommandDeniedMessage) { + config.addDefault("message_type", MessageType.CHAT.toString(), "Valid message types are CHAT and ACTIONBAR and CHAT_AND_ACTIONBAR."); + config.addDefault("command_denied_sound.enabled", false); + config.addDefault("command_denied_sound.key", "entity.villager.no"); + config.addDefault("command_denied_sound.volume", 1.0f); + config.addDefault("command_denied_sound.pitch", 1.0f); + } if (config.isNew()) { List exampleCommands = new ArrayList<>(); @@ -95,8 +110,8 @@ public class ConfigCache { config.addDefault("groups.default", new CWGroup("default", defaultCommands, defaultSubcommands, defaultCustomCommandDeniedMessage).serialize()); prefix = config.getString("messages.prefix"); - command_denied = config.getString("messages.command_denied"); - subcommand_denied = config.getString("messages.subcommand_denied"); + command_denied = config.getString("messages.command_denied", "No such command."); + subcommand_denied = config.getString("messages.subcommand_denied", "You cannot use this subcommand"); no_permission = config.getString("messages.no_permission"); no_such_subcommand = config.getString("messages.no_such_subcommand"); config_reloaded = config.getString("messages.config_reloaded"); @@ -104,6 +119,32 @@ public class ConfigCache { removed_from_whitelist = config.getString("messages.removed_from_whitelist"); group_doesnt_exist = config.getString("messages.group_doesnt_exist"); useProtocolLib = config.getBoolean("use_protocollib"); + command_denied_sound_enabled = config.getBoolean("command_denied_sound.enabled", false); + if(command_denied_sound_enabled) { + try { + String temp_command_denied_sound_key = config.getString("command_denied_sound.key"); + if(temp_command_denied_sound_key == null) { + warn("Invalid sound key. Using " + default_command_denied_sound_key); + command_denied_sound_key = default_command_denied_sound_key; + } else { + try { + Key isSound = Key.key(temp_command_denied_sound_key); + command_denied_sound_key = isSound.asString(); + } catch (Exception e) { + warn("Invalid sound key. Using " + default_command_denied_sound_key); + command_denied_sound_key = default_command_denied_sound_key; + } + command_denied_sound_key = command_denied_sound_key.toLowerCase(Locale.ENGLISH); + } + command_denied_sound_volume = config.getFloat("command_denied_sound.volume"); + command_denied_sound_pitch = config.getFloat("command_denied_sound.pitch"); + } catch (Exception e) { + warn("Invalid sound. Using default sound configurations."); + command_denied_sound_key = default_command_denied_sound_key; + command_denied_sound_volume = 1.0f; + command_denied_sound_pitch = 1.0f; + } + } debug = config.getBoolean("debug", false); try { String chatTypeId = config.getString("message_type"); @@ -177,7 +218,7 @@ public class ConfigCache { return groupList; } - private void warn(String log) { + public void warn(String log) { if (logger == null) { System.out.println("WARNING: "+log); return; diff --git a/CommandWhitelistCommon/src/main/java/eu/endermite/commandwhitelist/common/MessageType.java b/CommandWhitelistCommon/src/main/java/eu/endermite/commandwhitelist/common/MessageType.java index c7f46e2..508f630 100644 --- a/CommandWhitelistCommon/src/main/java/eu/endermite/commandwhitelist/common/MessageType.java +++ b/CommandWhitelistCommon/src/main/java/eu/endermite/commandwhitelist/common/MessageType.java @@ -2,6 +2,6 @@ package eu.endermite.commandwhitelist.common; public enum MessageType { - CHAT, ACTIONBAR + CHAT, ACTIONBAR, CHAT_AND_ACTIONBAR } diff --git a/CommandWhitelistVelocity/src/main/java/eu/endermite/commandwhitelist/velocity/CommandWhitelistVelocity.java b/CommandWhitelistVelocity/src/main/java/eu/endermite/commandwhitelist/velocity/CommandWhitelistVelocity.java index 5dbb98f..d63dc6a 100644 --- a/CommandWhitelistVelocity/src/main/java/eu/endermite/commandwhitelist/velocity/CommandWhitelistVelocity.java +++ b/CommandWhitelistVelocity/src/main/java/eu/endermite/commandwhitelist/velocity/CommandWhitelistVelocity.java @@ -52,7 +52,7 @@ public class CommandWhitelistVelocity { private void reloadConfig() { if (configCache == null) - configCache = new ConfigCache(folder.resolve("config.yml").toFile(), false, logger); + configCache = new ConfigCache(folder.resolve("config.yml").toFile(), false, false, logger); else configCache.reloadConfig(); } diff --git a/CommandWhitelistWaterfall/src/main/java/eu/endermite/commandwhitelist/waterfall/CommandWhitelistWaterfall.java b/CommandWhitelistWaterfall/src/main/java/eu/endermite/commandwhitelist/waterfall/CommandWhitelistWaterfall.java index cedec3f..51e4a1e 100644 --- a/CommandWhitelistWaterfall/src/main/java/eu/endermite/commandwhitelist/waterfall/CommandWhitelistWaterfall.java +++ b/CommandWhitelistWaterfall/src/main/java/eu/endermite/commandwhitelist/waterfall/CommandWhitelistWaterfall.java @@ -62,7 +62,7 @@ public final class CommandWhitelistWaterfall extends Plugin { public void loadConfig() { if (configCache == null) - configCache = new ConfigCache(new File(getDataFolder(), "config.yml"), false, getLogger()); + configCache = new ConfigCache(new File(getDataFolder(), "config.yml"), false, true, getLogger()); else configCache.reloadConfig(); } diff --git a/CommandWhitelistWaterfall/src/main/java/eu/endermite/commandwhitelist/waterfall/listeners/BungeeChatEventListener.java b/CommandWhitelistWaterfall/src/main/java/eu/endermite/commandwhitelist/waterfall/listeners/BungeeChatEventListener.java index 6f4dcd8..984ccf1 100644 --- a/CommandWhitelistWaterfall/src/main/java/eu/endermite/commandwhitelist/waterfall/listeners/BungeeChatEventListener.java +++ b/CommandWhitelistWaterfall/src/main/java/eu/endermite/commandwhitelist/waterfall/listeners/BungeeChatEventListener.java @@ -5,7 +5,9 @@ import eu.endermite.commandwhitelist.common.CommandUtil; import eu.endermite.commandwhitelist.common.ConfigCache; import eu.endermite.commandwhitelist.common.commands.CWCommand; import eu.endermite.commandwhitelist.waterfall.CommandWhitelistWaterfall; +import net.kyori.adventure.key.Key; import net.kyori.adventure.platform.bungeecord.BungeeAudiences; +import net.kyori.adventure.sound.Sound; import net.kyori.adventure.text.Component; import net.md_5.bungee.api.connection.ProxiedPlayer; import net.md_5.bungee.api.event.ChatEvent; @@ -45,6 +47,21 @@ public class BungeeChatEventListener implements Listener { case ACTIONBAR: audiences.player(player).sendActionBar(message); break; + case CHAT_AND_ACTIONBAR: + audiences.player(player).sendMessage(message); + audiences.player(player).sendActionBar(message); + break; + } + if(configCache.command_denied_sound_enabled) { + try { + String soundKey = configCache.command_denied_sound_key; + Key sound = Key.key(soundKey); + float soundVolume = configCache.command_denied_sound_volume; + float soundPitch = configCache.command_denied_sound_pitch; + audiences.player(player).playSound(Sound.sound(sound, Sound.Source.UI, soundVolume, soundPitch)); + } catch (Exception e) { + configCache.warn("Invalid sound. unable to play sound!"); + } } return; } diff --git a/readme.md b/readme.md index f70f20b..467a461 100644 --- a/readme.md +++ b/readme.md @@ -13,6 +13,7 @@ precisely what commands players can see and use.
  • Lock selected commands behind permission
  • Overwrite default "no such command" message with your branding +
  • Play configurable sounds when a command is denied
  • Block tab completion
  • Block command execution
  • Block completion and execution of specified subcommands