HypeSpam
Stable Release  v1.0

Advanced Anti-Spam & Chat Moderation Plugin for Minecraft. Smart filtering, auto-mute, and paginated GUI with full admin controls.

Bukkit Spigot Paper Purpur Folia
1.21
Minecraft
6
Filter Types
Java 21
Required
5
Platforms
GUI
Paginated

🚀 Overview

HypeSpam is a comprehensive chat moderation plugin for Minecraft servers. It detects spam, profanity, flood, and unauthorized link sharing with intelligent algorithms and applies automatic punishments.

ℹ️
Compatibility Supports Minecraft 1.21 – 1.21.11. Requires Java 21.

Features

🛡️

Smart Spam Protection

Multi-layered protection: cooldown, duplicate message, flood, and caps-lock detection.

🔍

Advanced Profanity Filter

Leetspeak normalization (@→a, $→s), repeated character detection, and regex bypass prevention.

🔗

Link Protection

Blocks unauthorized URL sharing. Allow trusted domains via whitelist.

📊

Paginated GUI

Browse muted players with player-head icons. Pagination kicks in at 45+ entries.

Auto Punishment

First offense: warning. Repeat offense: automatic timed mute. Expired mutes are purged automatically.

🔔

Admin Notifications

Real-time in-game alerts to authorized staff on any filter violation.

📦 Installation

1. Download

Download HypeSpam-1.0.jar from the Modrinth page or GitHub Releases.

2. Place the JAR

Shell
server/
└── plugins/
    └── HypeSpam-1.0.jar

3. Start Server

Drop the JAR into your plugins/ folder and restart. The plugin will auto-generate config.yml and data.yml.

Success On startup you will see [HypeSpam] v1.0 enabled! in your console.

⌨️ Commands

All commands use /antispam (aliases: /hs, /spamguard).

Command Permission Description
/antispam listhypespam.adminList muted players in GUI
/antispam mute <player> [min] [reason]hypespam.muteManual mute (default: 10 min)
/antispam unmute <player>hypespam.unmuteRemove mute
/antispam clearhypespam.adminPurge expired mutes
/antispam addword <word>hypespam.adminAdd a blocked word
/antispam removeword <word>hypespam.adminRemove a blocked word
/antispam wordshypespam.adminView the blocked-word list
/antispam statshypespam.adminView statistics
/antispam reloadhypespam.adminReload config

🔐 Permissions

Node Default Description
hypespam.adminOPAccess to all admin commands
hypespam.muteOPAssign manual mutes
hypespam.unmuteOPRemove mutes manually
hypespam.bypassOPBypass all filters
hypespam.linkOPPermission to share links
hypespam.notifyOPReceive violation alerts

⚙️ Config.yml

All settings are managed from config.yml. Changes require /antispam reload or a server restart.

General Settings

YAML
chat-cooldown-enabled: true
chat-cooldown: 3          # seconds between messages
max-message-length: 256
check-duplicate: true
notify-admins: true

Filter Settings

YAML
check-leetspeak: true
check-repeated-chars: true
check-caps: true
caps-percentage: 70.0     # % uppercase to trigger
min-caps-length: 5
check-flood: true
flood-max-repeated-chars: 4
check-links: true

Blocked Words

YAML
blocked-words:
  - "amk"
  - "siktir"
  - "oc"
  - "kaşar"

blocked-patterns:
  - "(?i)(a\\W*m\\W*k)"
  - "(?i)(o\\W*c)"

Link Whitelist

YAML
link-whitelist:
  - "youtube.com"
  - "discord.gg"
  - "github.com"

Mute Settings

YAML
auto-mute-time: 10   # minutes
auto-mute-reason: "Küfür/Hakaret (Otomatik)"
mute-command: "mute %player% %time%m %reason%"
unmute-command: "unmute %player%"

🛡️ Filter System

01

Cooldown

Minimum delay between consecutive messages from the same player. Default: 3 seconds.

chat-cooldown: 3
02

Duplicate Detection

Prevents the same message from being sent back-to-back. Case-insensitive comparison.

check-duplicate: true
03

Caps Lock

Blocks messages where over 70% of characters are uppercase and the message is at least 5 characters long.

caps-percentage: 70.0 min-caps-length: 5
04

Flood / Char Repeat

Blocks messages with the same character repeated more than 4 times. E.g. heeeey, ?????

flood-max-repeated-chars: 4
05

Link Blocking

Detects URLs with regex. Whitelisted domains are allowed. Players with hypespam.link bypass this filter.

check-links: true
06

Profanity Filter (3-layer)

Three-tier matching system that catches bypass attempts:

Direct: amk → caught Leetspeak: @mk, 4mk → normalized & caught Char repeat: amkk, aamk → regex caught
⚠️
Important The repeat-character filter only generates patterns for words in blocked-words. Innocent words like book will never be caught.

🖥️ GUI System

The /antispam list command opens an interactive inventory GUI:

  • Player Heads — Each muted player shown as their own head icon
  • Details on hover — UUID, reason, remaining time, issuer shown in lore
  • Confirmation menu — Click head → Lime Wool (Confirm) / Red Wool (Cancel)
  • Pagination — Arrow buttons appear when there are 45+ muted players
  • Barrier icon — Closes the menu
ℹ️
Auto-cleanup When a mute is removed via the GUI, unmute-command is executed automatically and the entry is deleted from data.yml.

🔌 Developer API

Access HypeSpam from other plugins using the following API:

Java
// Get HypeSpam instance
HypeSpam plugin = (HypeSpam) Bukkit.getPluginManager()
                               .getPlugin("HypeSpam");

// Check if a player is muted
boolean muted = plugin.getDataManager().isMuted(playerUUID);

// Add a mute programmatically
plugin.getDataManager().addMute(uuid, expiry, "Reason", "Admin");

// Open the muted-players GUI
plugin.getGuiManager().openMutedList(adminPlayer);

Maven Dependency

XML
<dependency>
    <groupId>org.example.xXantares_peek</groupId>
    <artifactId>hypespam</artifactId>
    <version>1.0</version>
    <scope>provided</scope>
</dependency>

FAQ

Does it work on 1.20?
No. The plugin requires api-version: '1.21' and Java 21. A separate legacy build would be needed for 1.20 support.
Does it work on Folia?
Yes. HypeSpam detects the Folia scheduler via reflection and falls back to the Bukkit scheduler automatically.
Is PlaceholderAPI supported?
Not in v1.0. It may be added in a future release.
Is MySQL / SQLite supported?
Currently YAML-only (data.yml). Database integration is planned for larger server support.
Discord webhooks?
Not in v1.0. Admin notifications are in-game only.
Why aren't innocent words caught by the repeat filter?
The repeat-character filter only generates regex for words in your blocked-words list. If book isn't in the list, bookk won't be caught either.
Do mutes expire automatically?
HypeSpam tracks expiry internally and purges entries from data.yml. However, actual unmuting in-game is handled by your external plugin (EssentialsX, LiteBans, etc.) via the configured unmute-command.