diff --git a/bin/gd/rf/adrianvictor/stuff/GhostsAndStuff.class b/bin/gd/rf/adrianvictor/stuff/GhostsAndStuff.class index 0c0e08e..9c9fe10 100644 Binary files a/bin/gd/rf/adrianvictor/stuff/GhostsAndStuff.class and b/bin/gd/rf/adrianvictor/stuff/GhostsAndStuff.class differ diff --git a/config.yml b/config.yml index 9f52537..e359cbc 100644 --- a/config.yml +++ b/config.yml @@ -6,10 +6,19 @@ antiSpamLightning: false rainbowChat: true rainbowChatModifier: 'z' # Single word you need to put after & to use the rainbow +# Prevents users from broadcasting sensitive commands by forgetting the / +commandTypoBlocker: true +commandTypoBlockerCaseSensitive: false +commandTypoBlockerVerbose: true +commandTypoBlockerVerboseMessage: "&cYour message begins with a sensitive command, you may be leaking something sensitive by forgetting the slash!" +commandTypoBlockerWords: + - 'login' + - 'register' + # Strikes a lightning to the player who says specific words skibidiBlocker: true skibidiBlockerCaseSensitive: false skibidiBlockerVerbose: true skibidiBlockerVerboseMessage: "This is a bad word." skibidiBlockerWords: - - 'skibidi' + - 'skibidi' \ No newline at end of file diff --git a/plugin.yml b/plugin.yml index c7af3e1..666cd38 100755 --- a/plugin.yml +++ b/plugin.yml @@ -2,7 +2,7 @@ author: tenkuma main: gd.rf.adrianvictor.stuff.GhostsAndStuff name: GhostsAndStuff url: https://adrianvictor.rf.gd -version: '0.5' +version: '0.6' commands: gettime: description: Prints the time for the current world. diff --git a/src/gd/rf/adrianvictor/stuff/CommandTypoBlocker.java b/src/gd/rf/adrianvictor/stuff/CommandTypoBlocker.java new file mode 100644 index 0000000..e1930dd --- /dev/null +++ b/src/gd/rf/adrianvictor/stuff/CommandTypoBlocker.java @@ -0,0 +1,49 @@ +package gd.rf.adrianvictor.stuff; + +import java.util.List; +import org.bukkit.event.player.PlayerChatEvent; +import org.bukkit.event.player.PlayerListener; +import org.bukkit.plugin.java.JavaPlugin; + +import gd.rf.adrianvictor.lib.Color; +import gd.rf.adrianvictor.lib.Log; + +public class CommandTypoBlocker extends PlayerListener { + JavaPlugin plugin; + Log logger; + + public CommandTypoBlocker(JavaPlugin _plugin, Log _logger) { + plugin = _plugin; + logger = _logger; + } + + public void onPlayerChat(PlayerChatEvent event) { + String message = event.getMessage(); + List protectedCommands = plugin.getConfiguration().getStringList("commandTypoBlockerWords", null); + + if (protectedCommands == null) { + logger.warning("Commands list is null!"); + return; + } + if (protectedCommands.isEmpty()) { + logger.warning("Commands list is empty!"); + return; + } + + boolean caseSensitive = plugin.getConfiguration().getBoolean("commandTypoBlockerCaseSensitive", true); + for (String protectedWord : protectedCommands) { + String finalMessage; + if (!caseSensitive) { + finalMessage = message.toLowerCase(); + } else { + finalMessage = message; + } + if (message.startsWith(protectedWord.toLowerCase()) || message.startsWith(protectedWord.toLowerCase(), 1)) { + if (plugin.getConfiguration().getBoolean("commandTypoBlockerVerbose", true)) { + event.getPlayer().sendMessage(Color.formatColors(plugin.getConfiguration().getString("commandTypoBlockerVerboseMessage", "&cYour message begins with a sensitive command, you may be leaking something sensitive by forgetting the slash!"))); + } + event.setCancelled(true); + } + } + } +} diff --git a/src/gd/rf/adrianvictor/stuff/GhostsAndStuff.java b/src/gd/rf/adrianvictor/stuff/GhostsAndStuff.java index aff05b3..55a5e4e 100755 --- a/src/gd/rf/adrianvictor/stuff/GhostsAndStuff.java +++ b/src/gd/rf/adrianvictor/stuff/GhostsAndStuff.java @@ -44,12 +44,24 @@ public class GhostsAndStuff extends JavaPlugin { logger.info("Loading module RainbowChat"); pm.registerEvent(Type.PLAYER_CHAT, rainbowChat, Priority.High, this); } + + // CommandTypoBlocker + if (this.getConfiguration().getBoolean("commandTypoBlocker", true)) { + logger.info("Loading module CommandTypoBlocker"); + List words = this.getConfiguration().getStringList("commandTypoBlockerWords", null); + if (words.isEmpty()) { + logger.warning("CommandTypoBlocker is enabled, but no words were provided. Disabling."); + } else { + PlayerListener commandTypoBlocker = new CommandTypoBlocker(this, logger); + pm.registerEvent(Type.PLAYER_CHAT, commandTypoBlocker, Priority.High, this); + } + } // SkibidiBlocker if (this.getConfiguration().getBoolean("skibidiBlocker", true)) { logger.info("Loading module SkibidiBlocker"); List words = this.getConfiguration().getStringList("skibidiBlockerWords", null); - if (words == null || words.isEmpty()) { + if (words.isEmpty()) { logger.warning("SkibidiBlocker is enabled, but no words were provided. Disabling."); } else { PlayerListener verboseWorldChange = new SkibidiBlocker(this, logger);