diff --git a/.classpath b/.classpath
index b902d9c..3fd8cf9 100644
--- a/.classpath
+++ b/.classpath
@@ -7,6 +7,6 @@
-
+
diff --git a/bin/.gitignore b/bin/.gitignore
new file mode 100644
index 0000000..9b3a425
--- /dev/null
+++ b/bin/.gitignore
@@ -0,0 +1 @@
+/gd/
diff --git a/bin/gd/rf/adrianvictor/stuff/GhostsAndStuff.class b/bin/gd/rf/adrianvictor/stuff/GhostsAndStuff.class
index 1110fa0..700fdea 100644
Binary files a/bin/gd/rf/adrianvictor/stuff/GhostsAndStuff.class and b/bin/gd/rf/adrianvictor/stuff/GhostsAndStuff.class differ
diff --git a/bin/gd/rf/adrianvictor/stuff/RainbowChat.class b/bin/gd/rf/adrianvictor/stuff/RainbowChat.class
index 4e344ef..3928dfb 100644
Binary files a/bin/gd/rf/adrianvictor/stuff/RainbowChat.class and b/bin/gd/rf/adrianvictor/stuff/RainbowChat.class differ
diff --git a/bin/gd/rf/adrianvictor/stuff/SkibidiBlocker.class b/bin/gd/rf/adrianvictor/stuff/SkibidiBlocker.class
index 4f86252..e823fc3 100644
Binary files a/bin/gd/rf/adrianvictor/stuff/SkibidiBlocker.class and b/bin/gd/rf/adrianvictor/stuff/SkibidiBlocker.class differ
diff --git a/config.yml b/config.yml
index 609576c..9f52537 100644
--- a/config.yml
+++ b/config.yml
@@ -1,6 +1,15 @@
+# Blocks duplicated messages
+antiSpam: true
+antiSpamLightning: false
+
+# Adds color code for rainbow
+rainbowChat: true
+rainbowChatModifier: 'z' # Single word you need to put after & to use the rainbow
# Strikes a lightning to the player who says specific words
skibidiBlocker: true
skibidiBlockerCaseSensitive: false
+skibidiBlockerVerbose: true
+skibidiBlockerVerboseMessage: "This is a bad word."
skibidiBlockerWords:
- 'skibidi'
diff --git a/plugin.yml b/plugin.yml
index 090c47f..070a198 100644
--- a/plugin.yml
+++ b/plugin.yml
@@ -3,4 +3,4 @@ database: false
main: gd.rf.adrianvictor.stuff.GhostsAndStuff
name: GhostsAndStuff
url: https://adrianvictor.rf.gd
-version: '1.0'
\ No newline at end of file
+version: '1.1'
\ No newline at end of file
diff --git a/src/gd/rf/adrianvictor/stuff/AntiSpam.java b/src/gd/rf/adrianvictor/stuff/AntiSpam.java
new file mode 100644
index 0000000..34a94a9
--- /dev/null
+++ b/src/gd/rf/adrianvictor/stuff/AntiSpam.java
@@ -0,0 +1,30 @@
+package gd.rf.adrianvictor.stuff;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.UUID;
+
+import org.bukkit.event.player.PlayerChatEvent;
+import org.bukkit.event.player.PlayerListener;
+import org.bukkit.plugin.java.JavaPlugin;
+
+import gd.rf.adrianvictor.lib.PlayerEx;
+
+public class AntiSpam extends PlayerListener {
+ private final Map lastMessages = new HashMap<>();
+ private JavaPlugin plugin;
+
+ public AntiSpam(JavaPlugin plugin) {
+ this.plugin = plugin;
+ }
+
+ public void onPlayerChat(PlayerChatEvent event) {
+ if (lastMessages.containsKey(event.getPlayer().getUniqueId()) && lastMessages.get(event.getPlayer().getUniqueId()).contains(event.getMessage())) {
+ event.setCancelled(true);
+ event.getPlayer().sendMessage("Stop spamming.");
+
+ if (plugin.getConfiguration().getBoolean("antiSpamLightning", false)) PlayerEx.strikeLightning(event.getPlayer());
+ }
+ lastMessages.put(event.getPlayer().getUniqueId(), event.getMessage());
+ }
+}
diff --git a/src/gd/rf/adrianvictor/stuff/GhostsAndStuff.java b/src/gd/rf/adrianvictor/stuff/GhostsAndStuff.java
index 5fbdded..c003638 100644
--- a/src/gd/rf/adrianvictor/stuff/GhostsAndStuff.java
+++ b/src/gd/rf/adrianvictor/stuff/GhostsAndStuff.java
@@ -28,15 +28,24 @@ public class GhostsAndStuff extends JavaPlugin {
loadModules();
logger.info("is starting.");
}
-
public void loadModules() {
- PlayerListener rainbowChat = new RainbowChat(this);
+
+ // AntiSpam
+ if (this.getConfiguration().getBoolean("antiSpam", true)) {
+ PlayerListener antiSpam = new AntiSpam(this);
+ pm.registerEvent(Type.PLAYER_CHAT, antiSpam, Priority.High, this);
+ }
+
+ // RainbowChat
+ if (this.getConfiguration().getBoolean("rainbowChat", true)) {
+ PlayerListener rainbowChat = new RainbowChat(this);
logger.info("Loading module RainbowChat");
pm.registerEvent(Type.PLAYER_CHAT, rainbowChat, 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()) {
logger.warning("SkibidiBlocker is enabled, but no words were provided. Disabling.");
diff --git a/src/gd/rf/adrianvictor/stuff/RainbowChat.java b/src/gd/rf/adrianvictor/stuff/RainbowChat.java
index 1d6e0fd..7746e97 100644
--- a/src/gd/rf/adrianvictor/stuff/RainbowChat.java
+++ b/src/gd/rf/adrianvictor/stuff/RainbowChat.java
@@ -19,7 +19,7 @@ public class RainbowChat extends PlayerListener {
int index = 0;
while (index < message.length()) {
- int startIndex = message.indexOf("§z", index);
+ int startIndex = message.indexOf("§" + plugin.getConfiguration().getString("rainbowChatModifier", "z"), index);
if (startIndex == -1) {
result.append(message.substring(index));
break;
diff --git a/src/gd/rf/adrianvictor/stuff/SkibidiBlocker.java b/src/gd/rf/adrianvictor/stuff/SkibidiBlocker.java
index 7d5e97c..081bd33 100644
--- a/src/gd/rf/adrianvictor/stuff/SkibidiBlocker.java
+++ b/src/gd/rf/adrianvictor/stuff/SkibidiBlocker.java
@@ -4,6 +4,8 @@ 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 SkibidiBlocker extends PlayerListener {
@@ -29,20 +31,18 @@ public class SkibidiBlocker extends PlayerListener {
}
boolean caseSensitive = plugin.getConfiguration().getBoolean("skibidiBlockerCaseSensitive", true);
-
for (String blockedWord : blockedWords) {
+ String finalMessage;
if (!caseSensitive) {
- if (message.toLowerCase().contains(blockedWord.toLowerCase())) {
- logger.info(event.getPlayer().getDisplayName() + " said a blocked word (case insensitive).");
- event.getPlayer().getWorld().strikeLightning(event.getPlayer().getLocation()); // Ensure it works
- return;
- }
- } else {
- if (message.contains(blockedWord)) {
- logger.info(event.getPlayer().getDisplayName() + " said a blocked word (case sensitive).");
- event.getPlayer().getWorld().strikeLightning(event.getPlayer().getLocation());
- return;
- }
+ finalMessage = message.toLowerCase();
+ } else {
+ finalMessage = message;
+ }
+ if (message.contains(blockedWord.toLowerCase())) {
+ if (plugin.getConfiguration().getBoolean("skibidiBlockerVerbose", true)) {
+ event.getPlayer().sendMessage(Color.formatColors(plugin.getConfiguration().getString("skibidiBlockerVerboseMessage", "This is a bad word.")));
+ }
+ event.getPlayer().getWorld().strikeLightning(event.getPlayer().getLocation());
}
}
}