⚡️ ExploitShieldLite
✨ This is the lightweight edition of ExploitShield, built for maximum performance + rock-solid stability.
It delivers core exploit & crash protection in a streamlined design, reducing server load while also keeping false positives significantly lower compared to the full version of ExploitShield.
ExploitShieldLite is a lightweight, high-performance packet-based security plugin designed to protect your Minecraft server from common exploits, packet abuse, and crash attempts — without sacrificing performance.
Built on PacketEvents, it intercepts malicious packets before they reach the server, adding a powerful extra layer of protection against exploit clients and packet-based attacks.
⚡ Features
Advanced Book Exploit Protection
Protect your server from malicious book packets and crash attempts.
✔ Maximum pages limit
✔ Maximum characters per page limit
✔ Maximum total characters limit
✔ JSON depth protection
✔ Excessive color-code detection
✔ Malicious “extra” component detection
✔ Unicode normalization checks
✔ Hard packet size limits
Chat Crash Protection
Prevent oversized chat packets and chat-based exploits.
✔ Configurable message length limits
✔ Instant packet cancellation
✔ Optional automatic kick system
⌨️ Tab Complete Protection
Stop tab-complete abuse used for lag or crash attacks.
✔ Configurable input limits
✔ Packet-level filtering
✔ Optional kick action
Item NBT Protection
Detect and block malicious or invalid creative items.
✔ Oversized display names
✔ Excessive enchantments
✔ Invalid enchantment levels
✔ Oversized lore detection
✔ Full creative inventory validation
Client Brand & Version Detection
Get useful player client information on join.
✔ Client brand detection
✔ Client version detection
✔ Permission-based alerts
✔ Console logging support
Smart Alert System
A smart violation system that prevents spam while keeping staff informed.
✔ Violation buffering
✔ Alert aggregation system
✔ Console + staff notifications
✔ Toggle per player
Example:
[ExploitShieldLite] Player → MAX_JSON_DEPTH [KICK] x15
Instead of spam, alerts are grouped intelligently.
⚙️ Fully Configurable
Everything can be customized directly from the config file.
✔ Enable/disable protections
✔ Adjust limits & thresholds
✔ Customize messages & prefixes
✔ In-game reload support
Performance Focused
Designed with optimization in mind:
✔ Early packet validation
✔ Thread-local optimizations
✔ Minimal memory allocation
✔ Low CPU overhead
✔ Safe JSON parsing
✔ Optimized packet scanning
Perfect for:
Survival • Factions • Minigames • Networks • Large Communities
Permissions
Unlike traditional anti-crash plugins that react after the server processes dangerous data, ExploitShieldLite blocks malicious packets before they become a problem.
⚡ Lightweight • Fast • Configurable • Effective
Keep your server protected with ExploitShieldLite.
✨ This is the lightweight edition of ExploitShield, built for maximum performance + rock-solid stability.
It delivers core exploit & crash protection in a streamlined design, reducing server load while also keeping false positives significantly lower compared to the full version of ExploitShield.
ExploitShieldLite is a lightweight, high-performance packet-based security plugin designed to protect your Minecraft server from common exploits, packet abuse, and crash attempts — without sacrificing performance.
Built on PacketEvents, it intercepts malicious packets before they reach the server, adding a powerful extra layer of protection against exploit clients and packet-based attacks.
⚡ Features
Advanced Book Exploit Protection
Protect your server from malicious book packets and crash attempts.
✔ Maximum pages limit
✔ Maximum characters per page limit
✔ Maximum total characters limit
✔ JSON depth protection
✔ Excessive color-code detection
✔ Malicious “extra” component detection
✔ Unicode normalization checks
✔ Hard packet size limits
Chat Crash Protection
Prevent oversized chat packets and chat-based exploits.
✔ Configurable message length limits
✔ Instant packet cancellation
✔ Optional automatic kick system
⌨️ Tab Complete Protection
Stop tab-complete abuse used for lag or crash attacks.
✔ Configurable input limits
✔ Packet-level filtering
✔ Optional kick action
Item NBT Protection
Detect and block malicious or invalid creative items.
✔ Oversized display names
✔ Excessive enchantments
✔ Invalid enchantment levels
✔ Oversized lore detection
✔ Full creative inventory validation
Client Brand & Version Detection
Get useful player client information on join.
✔ Client brand detection
✔ Client version detection
✔ Permission-based alerts
✔ Console logging support
Smart Alert System
A smart violation system that prevents spam while keeping staff informed.
✔ Violation buffering
✔ Alert aggregation system
✔ Console + staff notifications
✔ Toggle per player
Example:
[ExploitShieldLite] Player → MAX_JSON_DEPTH [KICK] x15
Instead of spam, alerts are grouped intelligently.
⚙️ Fully Configurable
Everything can be customized directly from the config file.
✔ Enable/disable protections
✔ Adjust limits & thresholds
✔ Customize messages & prefixes
✔ In-game reload support
Performance Focused
Designed with optimization in mind:
✔ Early packet validation
✔ Thread-local optimizations
✔ Minimal memory allocation
✔ Low CPU overhead
✔ Safe JSON parsing
✔ Optimized packet scanning
Perfect for:
Survival • Factions • Minigames • Networks • Large Communities
Permissions
- exploitshieldlite.commands → Access commands
- exploitshieldlite.alert → Receive alerts
- exploitshieldlite.joininfo → Join notifications
- /exploitshieldlite help → Show help menu
- /exploitshieldlite reload → Reload config
- /exploitshieldlite alerts → Toggle alerts
- /esl help
- /esl reload
- /esl alerts
- PacketEvents
Unlike traditional anti-crash plugins that react after the server processes dangerous data, ExploitShieldLite blocks malicious packets before they become a problem.
⚡ Lightweight • Fast • Configurable • Effective
Keep your server protected with ExploitShieldLite.
Spoiler: Main Class
package dev.Its_Rango.ExploitShieldLite ;
import com.github.retrooper.packetevents.PacketEvents ;
import dev.Its_Rango.ExploitShieldLite.AlertManager.AlertManager ;
import dev.Its_Rango.ExploitShieldLite.Checks.Packet.Book.BookPacketListener ;
import dev.Its_Rango.ExploitShieldLite.Checks.Packet.Chat.ChatPacketListener ;
import dev.Its_Rango.ExploitShieldLite.Checks.Packet.Join.JoinPacketListener ;
import dev.Its_Rango.ExploitShieldLite.Checks.Packet.NBT.ItemNBT ;
import dev.Its_Rango.ExploitShieldLite.Checks.Packet.TabException.TabCompletePacketListener ;
import dev.Its_Rango.ExploitShieldLite.Commands.MainCommand ;
import dev.Its_Rango.ExploitShieldLite.Commands.ShortMainCommand ;
import dev.Its_Rango.ExploitShieldLite.Utils.ReloadConfig ;
import io.github.retrooper.packetevents.factory.spigot.SpigotPacketEventsBuilder ;
import org.bukkit.Bukkit ;
import org.bukkit.ChatColor ;
import org.bukkit.command.CommandExecutor ;
import org.bukkit.plugin.java.JavaPlugin ;
public final class ExploitShieldLite extends JavaPlugin {
private static ExploitShieldLite instance ;
@Override
public void onLoad ( ) {
logStartup ( ) ;
PacketEvents. setAPI (SpigotPacketEventsBuilder. build ( this ) ) ;
PacketEvents. getAPI ( ). load ( ) ;
logStartupDone ( ) ;
}
@Override
public void onEnable ( ) {
logEnable ( ) ;
instance = this ;
saveDefaultConfig ( ) ;
ReloadConfig. reload ( this ) ;
PacketEvents. getAPI ( ). init ( ) ;
registerPacketListeners ( ) ;
AlertManager. init ( ) ;
registerCommands ( ) ;
logEnabled ( ) ;
}
@Override
public void onDisable ( ) {
logDisable ( ) ;
PacketEvents. getAPI ( ). terminate ( ) ;
logDisabled ( ) ;
}
private void registerPacketListeners ( ) {
var manager = PacketEvents. getAPI ( ). getEventManager ( ) ;
manager. registerListener ( new BookPacketListener ( ) ) ;
manager. registerListener ( new TabCompletePacketListener ( ) ) ;
manager. registerListener ( new ItemNBT ( ) ) ;
manager. registerListener ( new ChatPacketListener ( ) ) ;
manager. registerListener ( new JoinPacketListener ( ) ) ;
}
private void registerCommands ( ) {
registerCommand ( "exploitshieldlite", new MainCommand ( ) ) ;
registerCommand ( "esl", new ShortMainCommand ( ) ) ;
}
private void logStartup ( ) {
log ( "&2Loading..." ) ;
}
private void logStartupDone ( ) {
log ( "&2Loaded." ) ;
}
private void logEnable ( ) {
log ( "&aEnabling..." ) ;
}
private void logEnabled ( ) {
log ( "&aEnabled." ) ;
}
private void logDisable ( ) {
log ( "&cDisabling..." ) ;
}
private void logDisabled ( ) {
log ( "&cDisabled." ) ;
}
private void log ( String text ) {
getServer ( ). getConsoleSender ( ). sendMessage (color (text ) ) ;
}
private void registerCommand ( String command, CommandExecutor executor ) {
if (command == null || executor == null ) return ;
var cmd = getCommand (command ) ;
if (cmd == null ) {
getLogger ( ). warning ( "Command not found in plugin.yml: " + command ) ;
return ;
}
cmd. setExecutor (executor ) ;
}
public String color ( String str ) {
return ChatColor. translateAlternateColorCodes ( '&', str ) ;
}
public static ExploitShieldLite getInstance ( ) {
return instance ;
}
}
Code (Java):
package dev.Its_Rango.ExploitShieldLite ;
import com.github.retrooper.packetevents.PacketEvents ;
import dev.Its_Rango.ExploitShieldLite.AlertManager.AlertManager ;
import dev.Its_Rango.ExploitShieldLite.Checks.Packet.Book.BookPacketListener ;
import dev.Its_Rango.ExploitShieldLite.Checks.Packet.Chat.ChatPacketListener ;
import dev.Its_Rango.ExploitShieldLite.Checks.Packet.Join.JoinPacketListener ;
import dev.Its_Rango.ExploitShieldLite.Checks.Packet.NBT.ItemNBT ;
import dev.Its_Rango.ExploitShieldLite.Checks.Packet.TabException.TabCompletePacketListener ;
import dev.Its_Rango.ExploitShieldLite.Commands.MainCommand ;
import dev.Its_Rango.ExploitShieldLite.Commands.ShortMainCommand ;
import dev.Its_Rango.ExploitShieldLite.Utils.ReloadConfig ;
import io.github.retrooper.packetevents.factory.spigot.SpigotPacketEventsBuilder ;
import org.bukkit.Bukkit ;
import org.bukkit.ChatColor ;
import org.bukkit.command.CommandExecutor ;
import org.bukkit.plugin.java.JavaPlugin ;
public final class ExploitShieldLite extends JavaPlugin {
private static ExploitShieldLite instance ;
@Override
public void onLoad ( ) {
logStartup ( ) ;
PacketEvents. setAPI (SpigotPacketEventsBuilder. build ( this ) ) ;
PacketEvents. getAPI ( ). load ( ) ;
logStartupDone ( ) ;
}
@Override
public void onEnable ( ) {
logEnable ( ) ;
instance = this ;
saveDefaultConfig ( ) ;
ReloadConfig. reload ( this ) ;
PacketEvents. getAPI ( ). init ( ) ;
registerPacketListeners ( ) ;
AlertManager. init ( ) ;
registerCommands ( ) ;
logEnabled ( ) ;
}
@Override
public void onDisable ( ) {
logDisable ( ) ;
PacketEvents. getAPI ( ). terminate ( ) ;
logDisabled ( ) ;
}
private void registerPacketListeners ( ) {
var manager = PacketEvents. getAPI ( ). getEventManager ( ) ;
manager. registerListener ( new BookPacketListener ( ) ) ;
manager. registerListener ( new TabCompletePacketListener ( ) ) ;
manager. registerListener ( new ItemNBT ( ) ) ;
manager. registerListener ( new ChatPacketListener ( ) ) ;
manager. registerListener ( new JoinPacketListener ( ) ) ;
}
private void registerCommands ( ) {
registerCommand ( "exploitshieldlite", new MainCommand ( ) ) ;
registerCommand ( "esl", new ShortMainCommand ( ) ) ;
}
private void logStartup ( ) {
log ( "&2Loading..." ) ;
}
private void logStartupDone ( ) {
log ( "&2Loaded." ) ;
}
private void logEnable ( ) {
log ( "&aEnabling..." ) ;
}
private void logEnabled ( ) {
log ( "&aEnabled." ) ;
}
private void logDisable ( ) {
log ( "&cDisabling..." ) ;
}
private void logDisabled ( ) {
log ( "&cDisabled." ) ;
}
private void log ( String text ) {
getServer ( ). getConsoleSender ( ). sendMessage (color (text ) ) ;
}
private void registerCommand ( String command, CommandExecutor executor ) {
if (command == null || executor == null ) return ;
var cmd = getCommand (command ) ;
if (cmd == null ) {
getLogger ( ). warning ( "Command not found in plugin.yml: " + command ) ;
return ;
}
cmd. setExecutor (executor ) ;
}
public String color ( String str ) {
return ChatColor. translateAlternateColorCodes ( '&', str ) ;
}
public static ExploitShieldLite getInstance ( ) {
return instance ;
}
}
Spoiler: Config
# ====================
# ExploitShieldLite
# Version 1.0.0
# By Its_Rango
# ====================
# ====================
# PLUGIN MESSAGES
# ====================
plugin-messages:
reloading : "&bExploitShieldLite &7» &aReloading..."
reloaded : "&bExploitShieldLite &7» &aReloaded."
player-join-message : "&bExploitShieldLite &7» &a{player} &fjoined using &a{brand} &fand version &a{version}"
# ====================
# ALERT MANAGER
# ====================
alerts:
prefix : "&7[&bExploitShieldLite&7]"
message : "{prefix} &a{player} &b→ {exploit} &7[{action}] &8x{amount}"
on : "{prefix} &7» &aAlerts enabled."
off : "{prefix} &7» &cAlerts disabled."
# ====================
# BOOK CRASH
# ====================
book-crash :
# KICK: KICK, CANCEL AND ALERT
# CANCEL: CANCEL AND ALERT
action : KICK # KICK/CANCEL
max-pages : 75
max-chars-per-page : 1023
max-total-chars : 76725 # 1023 * 75
max-json-depth : 10
max-color-codes : 60
max-extra : 30
# ====================
# CHAT CRASH
# ====================
chat :
# KICK: KICK, CANCEL AND ALERT
# CANCEL: CANCEL AND ALERT
action : KICK # KICK/CANCEL
max-length : 256
# ====================
# TAB-COMPLETE CRASH
# ====================
tab-complete :
# KICK: KICK, CANCEL AND ALERT
# CANCEL: CANCEL AND ALERT
action : KICK # KICK/CANCEL
max-length : 450
# ====================
# Item-NBT CRASH
# ====================
item-nbt :
# KICK: KICK, CANCEL AND ALERT
# CANCEL: CANCEL AND ALERT
action : KICK # KICK/CANCEL
max-display-length : 256
max-lore-line-length : 256
max-enchants-count : 15
# ====================
# PACKET-RATE-LIMIT
# ====================
packet-rate-limit :
# KICK: KICK, CANCEL AND ALERT
# CANCEL: CANCEL AND ALERT
action : CANCEL # KICK/CANCEL
Code (YAML):
# ====================
# ExploitShieldLite
# Version 1.0.0
# By Its_Rango
# ====================
# ====================
# PLUGIN MESSAGES
# ====================
plugin-messages:
reloading : "&bExploitShieldLite &7» &aReloading..."
reloaded : "&bExploitShieldLite &7» &aReloaded."
player-join-message : "&bExploitShieldLite &7» &a{player} &fjoined using &a{brand} &fand version &a{version}"
# ====================
# ALERT MANAGER
# ====================
alerts:
prefix : "&7[&bExploitShieldLite&7]"
message : "{prefix} &a{player} &b→ {exploit} &7[{action}] &8x{amount}"
on : "{prefix} &7» &aAlerts enabled."
off : "{prefix} &7» &cAlerts disabled."
# ====================
# BOOK CRASH
# ====================
book-crash :
# KICK: KICK, CANCEL AND ALERT
# CANCEL: CANCEL AND ALERT
action : KICK # KICK/CANCEL
max-pages : 75
max-chars-per-page : 1023
max-total-chars : 76725 # 1023 * 75
max-json-depth : 10
max-color-codes : 60
max-extra : 30
# ====================
# CHAT CRASH
# ====================
chat :
# KICK: KICK, CANCEL AND ALERT
# CANCEL: CANCEL AND ALERT
action : KICK # KICK/CANCEL
max-length : 256
# ====================
# TAB-COMPLETE CRASH
# ====================
tab-complete :
# KICK: KICK, CANCEL AND ALERT
# CANCEL: CANCEL AND ALERT
action : KICK # KICK/CANCEL
max-length : 450
# ====================
# Item-NBT CRASH
# ====================
item-nbt :
# KICK: KICK, CANCEL AND ALERT
# CANCEL: CANCEL AND ALERT
action : KICK # KICK/CANCEL
max-display-length : 256
max-lore-line-length : 256
max-enchants-count : 15
# ====================
# PACKET-RATE-LIMIT
# ====================
packet-rate-limit :
# KICK: KICK, CANCEL AND ALERT
# CANCEL: CANCEL AND ALERT
action : CANCEL # KICK/CANCEL
Quick facts
- Edition: Minecraft Java
- File type: .jar
- Minecraft versions listed: 1.17, 1.18, 1.19
- How to install: Install the matching mod loader (Forge, Fabric or NeoForge) for your Minecraft version. → Download the .jar. → Put it in the .minecraft/mods folder and launch that loader profile.
- Where to get it: Opens on Spigot — not every file is mirrored on our own servers.
Install steps are the general flow for this file type — How to install Minecraft Java mods & modpacks walks through it step by step.
ExploitShield [Lite] is a free Minecraft Java mod. Compatible with Minecraft 1.17, 1.18, 1.19, 1.20 and newer. Downloaded 18 times (via Spigot). Download it and open it directly in the game.