From 3e6087e60c665245151c34ee1b99639064b64eb3 Mon Sep 17 00:00:00 2001 From: tenkuma Date: Thu, 17 Apr 2025 16:56:20 -0300 Subject: [PATCH] Added CommandTypoBlocker --- .../adrianvictor/stuff/GhostsAndStuff.class | Bin 3259 -> 3630 bytes config.yml | 11 +++- plugin.yml | 2 +- .../stuff/CommandTypoBlocker.java | 49 ++++++++++++++++++ .../rf/adrianvictor/stuff/GhostsAndStuff.java | 14 ++++- 5 files changed, 73 insertions(+), 3 deletions(-) create mode 100644 src/gd/rf/adrianvictor/stuff/CommandTypoBlocker.java diff --git a/bin/gd/rf/adrianvictor/stuff/GhostsAndStuff.class b/bin/gd/rf/adrianvictor/stuff/GhostsAndStuff.class index 0c0e08ef89801daefea934847320b9d27e652370..9c9fe10ddb716d6aa0ec7278de4e57f28097bf4c 100644 GIT binary patch delta 546 zcmdljxlV@b)W2Q(7#J8#7*=iMQe*cPO3u&CP0ULPsVvBM%E?d8PA%eKsA6PL^vO?5 z$;?Yv$jwhF%}G^o#-gl-kwF|u`{aD~2|TVy3MaF31T$(+6p-Xb7Odt76X#%<#K^!` zoSm7JnUV>&cFJTYb|tB4j10o4GU53}Da9NNGbaCKcVT8{m^G1CW^xIK0P{?S{>c|P z?lUgmypgk+k@FV=D+4nF10%y^Tkd2=ugMF!MJMm#HgeM1#^5hBk!2f0=u8GLtt||q zLX)>KNPwu#Vx~}#2_*G zC%0~WBZDbJ7lRo?FM~P5ECvgP)eN=_I~eR34l>v?oMCWaxXR$jaF4->;UR-F!#f5S zhW`xi41x>{3?2;ZAjdHXF$gm-Fo-b-GK4V9VPIsiWsqVh1hXm_j2Y%K%wu3=n8hH- zP{A;Vfr;S^TCqGcYhPF)U$N%D})N#K6Rm%CL-Kg@YtRJi{`El@5{sjr@_P delta 303 zcmZ1{vs;q))W2Q(7#J8#80NDxFio!Kl$q?u$hXn_Cz}voadu`>W=f`0PJVKBY7qxR z)#N`MN{ls=@VSLdyUE 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);