⚡️ 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
Commands
/exploitshieldlite help → Show help menu
/exploitshieldlite reload → Reload config
/exploitshieldlite alerts → Toggle alerts
/esl help
/esl reload
/esl alerts
Dependencies
❓ Why ExploitShieldLite?
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
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
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