HomeJavaModsExploitShield
ExploitShield
ModsJava

ExploitShield

ExploitShield Anti-Grief & Exploit/Crash Protection! ExploitShield [ FREE ] – Advanced Exploit & Crash Protection Protect your Minecraft server from…

⬇ Download on Spigot
ExploitShield Anti-Grief & Exploit/Crash Protection!

ExploitShield [FREE] – Advanced Exploit & Crash Protection
Protect your Minecraft server from duplication glitches, crash exploits, and malicious packets — fully automatic.

Requires ProtocolLib 5.4.0+, Java 17+, and PacketEvents 2.13.0+.

ExploitShield has reached a mature and stable stage of development. The current feature set is considered complete, and ongoing updates will focus on security improvements, performance optimizations, compatibility with new Minecraft versions, and critical bug fixes. As new duplication methods, crash exploits, or security vulnerabilities are discovered, ExploitShield will continue to receive updates to provide protection against them.


ChatGPT Image Feb 24, 2026, 04_37_42 PM (3).png

ExploitShield
is a high-performance anti-exploit plugin designed to stop common and advanced exploits.

This plugin is built as a high-end anti-duplication engine, not a basic fix.
ExploitShield is designed to mitigate a wide range of known duplication exploits through behavioral analysis, packet validation, rate limiting, and server-side consistency checks.
While no anti-exploit solution can guarantee complete protection against every emerging exploit, ExploitShield focuses on reducing exploitability while maintaining gameplay stability and low false positives.

Key Features
Duplication Protection

Crash & Packet Protection

Movement & Glitch Fixes

Anti-Grief & Server Protection

Client Integrity & Exploit Prevention

Discord Webhook Alerts

Performance Focused

Punishment System

Administrative Tools

⚙️ Configuration

(Config preview available below ⬇️)

✅ Behavioral & Packet Analysis (Hamster Engine)

✅ Netty Packet Flood Protection
✅ Packet-Level Monitoring via PacketEvents

✅ Safe Netty Utilities

Advanced Packet Inspection & Strict Validation

Adaptive Packet Rate Limiting

Anti-NBT / Item Security


✅ TabComplete Protection

✅ BadPackets Protection (PacketEvents)

✅ Payload Protection

✅ Invalid Position Protection
✅ Invalid Rotation Protection
✅ Fake Creative Protection
✅ Pick Item Validation
✅ View Distance Validation
Important Notes
Our goal is to block exploits and suspicious packets in order to prevent server crashes and malicious abuse.
Because of this, in some cases legitimate players may experience minor inconvenience due to the strict protection system.
Critical packets are now inspected before Bukkit-level processing, preventing malformed or malicious data from reaching internal server handlers.
In the latest version, ExploitShield introduces enhanced protection mechanisms for newly discovered exploits and duplication methods. By leveraging ProtocolLib and PacketEvents, the plugin now actively monitors and neutralizes suspicious actions at the packet level, ensuring robust defense against emerging threats without affecting normal gameplay.

Previously, certain NBT payloads were processed internally by the server before plugins could intercept them, making some crashes and exploits unavoidable. In this update, ExploitShield can intercept and analyze NBT data at the source, before it is processed by the server, thanks to ProtocolLib and PacketEvents integration. This ensures maximum protection against malicious items, payloads, and NBT-based crashes.

Tested under real-world multiplayer environments with packet-heavy activity, automation systems, and exploit simulation scenarios.

Why ExploitShield?
Free
Research-driven protection architecture
Packet-level exploit mitigation
Stability-focused design philosophy
Continuous security improvements
Real exploit research
Actively maintained
Designed with professional anti-cheat architecture principles
Concurrent use of ProtocolLib and PacketEvents
ExploitShield is designed to mitigate a wide range of known duplication exploits using behavioral analysis, packet validation, rate limiting, and server-side consistency checks.
✔ Designed for survival redstone-heavy servers
✔ No interference with legitimate farms
✔ Tested with 30+ redstone machines


Extensive Testing & Stability
ExploitShield
has been extensively tested across Minecraft versions 1.17 through 1.21, including real-world scenarios involving malicious clients, exploit tools, and attack simulations.

All tests were conducted in Strict mode using ProtocolLib and PacketEvents API, ensuring that the plugin handles packet-level exploits and advanced abuse cases reliably.

During these tests, the plugin demonstrated high detection accuracy and stability, successfully blocking abusive behavior without causing false positives for legitimate players.

All protections are designed with strict validation, rate-based analysis, and safe thresholds, ensuring strong security while preserving normal gameplay.

Tested Against Modern Cheat Clients
ExploitShield has been stress-tested in real-world multiplayer environments against some of the most widely used modified Minecraft clients.

During controlled testing scenarios, the plugin successfully prevented crash attempts, exploit packets, and malicious payload behaviors without server instability or critical false positives.

✔ Meteor Client
✔ Xynis Client
✔ FDP Client
✔ BetterCraft
✔ SmogProf Client

No successful crash, packet-based exploit, or instability was observed under Strict Mode configurations.

⚠ Note: Results may vary depending on server configuration, enabled modules, and strictness settings.


https://www.youtube.com/watch?v=4sPViKDsYtc

Works on Folia, Spigot, and Paper servers. ✅


Spoiler: ️ Anti-Exploit Protection Preview
[​IMG]

[​IMG]

[​IMG]

[​IMG]

INSTALLATION
1. Download and install ProtocolLib
2. Download and install PacketEvents
3. Place ExploitShield.jar into your plugins folder
4. Restart your server
5.
Your server is now protected and ready to go.

Server protection with ExploitShield (1) (1) (2) (1) (1) (1).png

bStats (Anonymous Usage Statistics)

ExploitShield
uses bStats to collect anonymous usage statistics. This helps measure plugin adoption and prioritize future improvements.

The collected information may include:

ExploitShield does NOT collect or transmit:

All statistics are anonymous and are processed by the bStats platform. If you prefer not to participate, bStats can be disabled in its configuration file.

bStats page:
https://bstats.org/plugin/bukkit/EZExploitFixer/28681


PERMISSIONS/COMMANDS

/exploitshield (Display Command List)
/exploitshield reload (Reload Config)
/exploitshield status (Display Plugin Status)
/exploitshield fixlist (Show Fix List)
/exploitshield debug (Debug)
/exploitshield gui (Display GUI)
/exploitshield profile <Player Name> (Display exploit profile)


exploitshield.use
exploitshield.reload
exploitshield.read.alert
exploitshield.alert.*

exploitshield.joininfo

DISCORD SUPPORT

https://discord.gg/xhV6FPfe92

WE NEED YOU


We need your support to be able to provide bigger updates and grow with your support, so please leave a comment if you see a bug or like the plugin


How does it work against packets?

[​IMG]
Download Now To Protect Your Server !

Spoiler: Main Class
Code (Java):

package its.rango.exploitshield ;

import com.github.retrooper.packetevents.PacketEvents ;
import io.github.retrooper.packetevents.factory.spigot.SpigotPacketEventsBuilder ;
import its.rango.exploitshield.alert.AlertManager ;
import its.rango.exploitshield.alert.AlertToggleManager ;
import its.rango.exploitshield.alert.Violation ;
import its.rango.exploitshield.commands.Commands ;
import its.rango.exploitshield.commands.ESCommand ;
import its.rango.exploitshield.gui.GUIManager ;
import its.rango.exploitshield.listeners.* ;
import its.rango.exploitshield.listeners.dupes.ContainerEntityChunkDuplicationListener ;
import its.rango.exploitshield.listeners.dupes.InventoryTracker ;
import its.rango.exploitshield.listeners.dupes.PlayerDuplicationListener ;
import its.rango.exploitshield.metrics.MetricsLoader ;
import its.rango.exploitshield.metrics.MetricsManager ;
import its.rango.exploitshield.netty.NettyCleanupListener ;
import its.rango.exploitshield.netty.NettyInjectListener ;
import its.rango.exploitshield.packet.* ;
import its.rango.exploitshield.packet.badpackets.* ;
import its.rango.exploitshield.packet.hamster.HamsterEngine ;
import its.rango.exploitshield.packet.hamster.HamsterPacketListener ;
import its.rango.exploitshield.packet.hamster.HamsterValidationListener ;
import its.rango.exploitshield.packet.InvalidRotationCrash ;
import its.rango.exploitshield.profile.PlayerProfileManager ;
import its.rango.exploitshield.profile.ProfileStorage ;
import its.rango.exploitshield.utils.* ;
import org.bukkit.Bukkit ;
import org.bukkit.ChatColor ;
import org.bukkit.command.PluginCommand ;
import org.bukkit.entity.Player ;
import org.bukkit.event.HandlerList ;
import org.bukkit.plugin.java.JavaPlugin ;

import java.io.File ;
import java.io.FileWriter ;
import java.io.IOException ;
import java.util.Date ;

public class ExploitShield extends JavaPlugin {

    private static ExploitShield instance ;

    private UpdateChecker updateChecker ;
    private BookCrashListener bookListener ;
    private Violation violationManager ;

    private boolean protocolLibAvailable ;
    private boolean packetEventsAvailable ;

    @Override
    public void onLoad ( ) {
        printLoadBanner ( ) ;

        protocolLibAvailable =
                Bukkit. getPluginManager ( ). getPlugin ( "ProtocolLib" ) != null ;

        packetEventsAvailable =
                Bukkit. getPluginManager ( ). getPlugin ( "packetevents" ) != null ;

        getLogger ( ). info ( "ProtocolLib: " + protocolLibAvailable ) ;
        getLogger ( ). info ( "PacketEvents: " + packetEventsAvailable ) ;
    }

    private PlayerDuplicationListener dupeListener ;

    @Override
    public void onEnable ( ) {
        printStartupBanner ( "Starting up" ) ;

        long before = System. currentTimeMillis ( ) ;

        if ( !protocolLibAvailable ) {
            getLogger ( ). severe ( "ProtocolLib is required but not found!" ) ;
            getLogger ( ). severe ( "Disabling ExploitShield..." ) ;
            getServer ( ). getPluginManager ( ). disablePlugin ( this ) ;
            return ;
        }

        if ( !packetEventsAvailable ) {
            getLogger ( ). severe ( "PacketEvents is required but not found!" ) ;
            getLogger ( ). severe ( "Disabling ExploitShield..." ) ;
            getServer ( ). getPluginManager ( ). disablePlugin ( this ) ;
            return ;
        }

        instance = this ;

        initViolationManager ( ) ;
        handleLanguageConfig ( ) ;

        reloadConfig ( ) ;
        ReloadUtil. reloadConfig ( this ) ;

        ProfileStorage. init ( ) ;

        initProtocolLib ( ) ;
        initPacketEvents ( ) ;

        initCrashSystem ( ) ;
        initListeners ( ) ;
        registerBadPacketListeners ( ) ;
        initCommands ( ) ;

        preloadOnlineProfiles ( ) ;
        initUpdateChecker ( ) ;
        initMetrics ( ) ;

        dupeListener = new PlayerDuplicationListener ( this ) ;

        getServer ( ). getPluginManager ( ). registerEvents (dupeListener, this ) ;
        dupeListener. startCleanupTask ( ) ;

        printEnabledBanner ( ) ;

        long time = System. currentTimeMillis ( ) - before ;
        logConsole ( "Plugin enabled in " + time + "ms" ) ;
    }

    @Override
    public void onDisable ( ) {

        PacketEvents. getAPI ( ). terminate ( ) ;
        PlayerProfileManager. shutdown ( ) ;
        HamsterEngine. clearAll ( ) ;

        if (dupeListener != null ) {
            dupeListener. stopCleanupTask ( ) ;
            HandlerList. unregisterAll (dupeListener ) ;
        }

        printShutdownBanner ( ) ;
    }

    private void initViolationManager ( ) {
        this. violationManager = Violation. getInstance ( this ) ;
        this. violationManager. loadConfig ( ) ;
    }

    private void initPacketEvents ( ) {
        if ( !packetEventsAvailable ) {
            getLogger ( ). warning ( "PacketEvents not installed - skipping packet features" ) ;
            return ;
        }

        try {
            PacketEvents. setAPI (SpigotPacketEventsBuilder. build ( this ) ) ;
            PacketEvents. getAPI ( ). load ( ) ;
            PacketEvents. getAPI ( ). init ( ) ;

            getLogger ( ). info ( "PacketEvents enabled" ) ;
        } catch ( Exception e ) {
            getLogger ( ). severe ( "PacketEvents failed: " + e. getMessage ( ) ) ;
        }
    }

    private void initCrashSystem ( ) {
        if ( !packetEventsAvailable ) {
            getLogger ( ). warning ( "Crash system disabled (PacketEvents not ready)" ) ;
            return ;
        }

        CrashPacket. init ( ) ;
        Bukkit. getPluginManager ( ). registerEvents ( new CrashPacket ( ), this ) ;
        TabCompleteGuard. init ( ) ;

        //manager.registerListener(new AALog());

        PacketEvents. getAPI ( ). getEventManager ( ). registerListener ( new ClickWindowListener ( ) ) ;
        PacketEvents. getAPI ( ). getEventManager ( ). registerListener ( new ViewDistance ( ) ) ;
        PacketEvents. getAPI ( ). getEventManager ( ). registerListener ( new PickItemListener ( ) ) ;
        PacketEvents. getAPI ( ). getEventManager ( ). registerListener ( new Creative ( ) ) ;
        PacketEvents. getAPI ( ). getEventManager ( ). registerListener ( new InvalidPositionCrash ( ) ) ;
        PacketEvents. getAPI ( ). getEventManager ( ). registerListener ( new InvalidRotationCrash ( ) ) ;
        PacketEvents. getAPI ( ). getEventManager ( ). registerListener ( new PayloadProtector ( ) ) ;
        PacketEvents. getAPI ( ). getEventManager ( ). registerListener ( new JoinPacketListener ( ) ) ;

        // Hamster Engine Listeners
        PacketEvents. getAPI ( ). getEventManager ( ). registerListener ( new HamsterPacketListener ( ) ) ;
        PacketEvents. getAPI ( ). getEventManager ( ). registerListener ( new HamsterValidationListener ( ) ) ;
    }

    private void initCommands ( ) {
        PluginCommand main = getCommand ( "exploitshield" ) ;
        if (main != null ) {
            Commands executor = new Commands ( ) ;
            main. setExecutor (executor ) ;
            main. setTabCompleter (executor ) ;
        }

        PluginCommand es = getCommand ( "es" ) ;
        if (es != null ) {
            ESCommand executor = new ESCommand ( ) ;
            es. setExecutor (executor ) ;
            es. setTabCompleter (executor ) ;
        }
    }

    private void initListeners ( ) {

        bookListener = new BookCrashListener ( ) ;
        Bukkit. getPluginManager ( ). registerEvents (bookListener, this ) ;

        registerOtherListeners ( ) ;
    }

    private void initProtocolLib ( ) {
        if ( !protocolLibAvailable ) return ;

        try {
            PacketManager. init ( ) ;
            StrictNBTInterceptor. init ( ) ;

            getLogger ( ). info ( "ProtocolLib enabled" ) ;
            logConsole ( "ProtocolLib packet protection ENABLED" ) ;
            logConsole ( "ProtocolLib Protection ENABLED" ) ;
            logConsole ( "Strict NBT Interceptor ENABLED" ) ;
        } catch ( Exception e ) {
            getLogger ( ). warning ( "ProtocolLib init failed: " + e. getMessage ( ) ) ;
        }
    }

    private void initUpdateChecker ( ) {
        updateChecker = new UpdateChecker ( this ) ;
        updateChecker. check ( ) ;

        Bukkit. getPluginManager ( ). registerEvents (
                new UpdateJoinListener ( this, updateChecker ),
                this
        ) ;
    }

    private void initMetrics ( ) {
        MetricsLoader. init ( this ) ;
        MetricsManager. loadFromConfig ( ) ;
    }

    private void preloadOnlineProfiles ( ) {
        for (Player p : Bukkit. getOnlinePlayers ( ) ) {
            PlayerProfileManager. getProfile (p. getUniqueId ( ) ) ;
        }
    }

    private void registerBadPacketListeners ( ) {
        var manager = PacketEvents. getAPI ( ). getEventManager ( ) ;

        manager. registerListener ( new BadPacketA ( ) ) ;
        manager. registerListener ( new BadPacketB ( ) ) ;
        manager. registerListener ( new BadPacketC ( ) ) ;
        manager. registerListener ( new BadPacketD ( ) ) ;
        manager. registerListener ( new BadPacketE ( ) ) ;
        manager. registerListener ( new BadPacketF ( ) ) ;
        manager. registerListener ( new BadPacketG ( ) ) ;
        manager. registerListener ( new BadPacketH ( ) ) ;
        manager. registerListener ( new BadPacketI ( ) ) ;

        BadPacketJ badPacketJ = new BadPacketJ ( ) ;
        manager. registerListener (badPacketJ ) ;
        Bukkit. getPluginManager ( ). registerEvents (badPacketJ, this ) ;

        manager. registerListener ( new BadPacketK ( ) ) ;
        manager. registerListener ( new BadPacketL ( ) ) ;
        manager. registerListener ( new BadPacketM ( ) ) ;
        manager. registerListener ( new BadPacketN ( ) ) ;
    }

    private void registerOtherListeners ( ) {
        Bukkit. getPluginManager ( ). registerEvents ( new PistonDuplicationListener ( ), this ) ;
        Bukkit. getPluginManager ( ). registerEvents ( new InventoryMoveListener ( ), this ) ;
        Bukkit. getPluginManager ( ). registerEvents ( new ExplosionListener ( ), this ) ;
        Bukkit. getPluginManager ( ). registerEvents ( new EnderPearlListener ( ), this ) ;
        Bukkit. getPluginManager ( ). registerEvents ( new ItemSalvageListener ( ), this ) ;
        Bukkit. getPluginManager ( ). registerEvents ( new SignCrashListener ( ), this ) ;
        Bukkit. getPluginManager ( ). registerEvents ( new PacketRateLimiter ( ), this ) ;
        Bukkit. getPluginManager ( ). registerEvents ( new GriefLavaListener ( ), this ) ;
        Bukkit. getPluginManager ( ). registerEvents ( new PlayerPaceListener ( ), this ) ;
        Bukkit. getPluginManager ( ). registerEvents ( new EntitySpamListener ( ), this ) ;
        Bukkit. getPluginManager ( ). registerEvents ( new GUIManager ( ), this ) ;
        Bukkit. getPluginManager ( ). registerEvents ( new ClientIntegrity ( ), this ) ;
        Bukkit. getPluginManager ( ). registerEvents ( new CommandCrashListener ( ), this ) ;
        Bukkit. getPluginManager ( ). registerEvents ( new NettyInjectListener ( ), this ) ;
        Bukkit. getPluginManager ( ). registerEvents ( new NettyCleanupListener ( ), this ) ;
        Bukkit. getPluginManager ( ). registerEvents ( new ContainerEntityChunkDuplicationListener ( this ), this ) ;
        Bukkit. getPluginManager ( ). registerEvents ( new PlayerJoinProfileListener ( ), this ) ;
        Bukkit. getPluginManager ( ). registerEvents ( new ItemNBTListener ( ), this ) ;
        Bukkit. getPluginManager ( ). registerEvents ( new ClickWindowListener ( ), this ) ;
        Bukkit. getPluginManager ( ). registerEvents ( new InventoryTracker ( ), this ) ;
        Bukkit. getPluginManager ( ). registerEvents ( new AlertManager ( ), this ) ;
        Bukkit. getPluginManager ( ). registerEvents ( new AlertToggleManager ( ), this ) ;
    }

    private void handleLanguageConfig ( ) {
        getDataFolder ( ). mkdirs ( ) ;
        File configFile = new File (getDataFolder ( ), "config.yml" ) ;

        if ( !configFile. exists ( ) ) {
            String lang = getConfig ( ). getString ( "language", "en" ). toLowerCase ( ) ;

            String resource = lang. equals ( "fa" )
                    ? "config_fa.yml"
                    : "config_en.yml" ;

            FileUtil. copyResourceToDataFolder ( this, resource, "config.yml" ) ;
        }

        reloadConfig ( ) ;
        ConfigUtil. reload ( this ) ;
    }

    private void printLoadBanner ( ) {
        logBanner ( "Loading...", ChatColor. DARK_GREEN ) ;
    }

    private void printStartupBanner ( String state ) {
        getServer ( ). getConsoleSender ( ). sendMessage (ChatColor. GOLD + "[ExploitShield] " + ChatColor. DARK_GREEN + state ) ;
    }

    private void printEnabledBanner ( ) {
        logBanner ( "Enabled!", ChatColor. GREEN ) ;
    }

    private void printShutdownBanner ( ) {
        logBanner ( "Disabled!  ", ChatColor. DARK_RED ) ;
    }

    private void logBanner ( String status, ChatColor statusColor ) {
        getServer ( ). getConsoleSender ( ). sendMessage ( "" ) ;
        getServer ( ). getConsoleSender ( ). sendMessage (ChatColor. DARK_GRAY + "=======================================" ) ;
        getServer ( ). getConsoleSender ( ). sendMessage (ChatColor. DARK_GRAY + "=" + ChatColor. GOLD + " ExploitShield " + statusColor + " " + status + ChatColor. DARK_GRAY + "             =" ) ;
        getServer ( ). getConsoleSender ( ). sendMessage (ChatColor. DARK_GRAY + "=" + ChatColor. GOLD + " Version: " + ChatColor. RED + getDescription ( ). getVersion ( ) + ChatColor. DARK_GRAY +   "                      =" ) ;
        getServer ( ). getConsoleSender ( ). sendMessage (ChatColor. DARK_GRAY + "=" + ChatColor. GOLD + " Depend: " + ChatColor. RED + getDescription ( ). getDepend ( ) + ChatColor. DARK_GRAY + " =" ) ;
        getServer ( ). getConsoleSender ( ). sendMessage (ChatColor. DARK_GRAY + "=" + ChatColor. GOLD + " Lead Dev: " + ChatColor. RED + "Its_Rango " + ChatColor. DARK_GRAY + "                =" ) ;
        getServer ( ). getConsoleSender ( ). sendMessage (ChatColor. DARK_GRAY + "=" + ChatColor. GOLD + " Co Devs: " + ChatColor. RED + "S_S_God, Smilelectern_YT" + ChatColor. DARK_GRAY + "   =" ) ;
        getServer ( ). getConsoleSender ( ). sendMessage (ChatColor. DARK_GRAY + "=======================================" ) ;
        getServer ( ). getConsoleSender ( ). sendMessage ( "" ) ;
    }

    private void logConsole ( String msg ) {
        getServer ( ). getConsoleSender ( ). sendMessage (ChatColor. GOLD + "[ExploitShield] " + ChatColor. GREEN + msg ) ;
    }

    public static ExploitShield getInstance ( ) {
        return instance ;
    }

    public Violation getViolationManager ( ) {
        return violationManager ;
    }

    public String color ( String str ) {
        return ChatColor. translateAlternateColorCodes ( '&', str ) ;
    }

    private void logError ( String title, Throwable t ) {
        File logDir = new File (getDataFolder ( ), "logs" ) ;
        if ( !logDir. exists ( ) ) logDir. mkdirs ( ) ;

        File logFile = new File (logDir, "error.log" ) ;

        try ( FileWriter writer = new FileWriter (logFile, true ) ) {
            writer. write ( "[" + new Date ( ) + "] " + title + "\n" ) ;
            writer. write (t. toString ( ) + "\n" ) ;

            for (StackTraceElement element : t. getStackTrace ( ) ) {
                writer. write ( "    at " + element + "\n" ) ;
            }

            writer. write ( "\n" ) ;
        } catch ( IOException e ) {
            getLogger ( ). severe ( "Error writing to error log: " + e. getMessage ( ) ) ;
        }
    }
}
 

Spoiler: Config
Code (YAML):

# ==================================================
# ExploitShield
# Advanced Anti-Exploit
# Lead Dev: Its_Rango
# Co Devs: S_S_God, Smilelectern_YT
# ==================================================

language
: en # en - fa

# --------------------------------------------------
# JOIN INFO
# --------------------------------------------------

join-info
:
  # Placeholders: {player}, {brand}, {version}
  message
: "&6ExploitShield &7» &a{player}&f joined using &a{brand}&f version &a{version}"

# --------------------------------------------------
# Alert System
# --------------------------------------------------

alerts
:
  enabled
: true
  on
: "&7[&6&lExploitShield&7] &7» &aAlerts enabled."
  off
: "&7[&6&lExploitShield&7] &7» &cAlerts disabled."
  discord
:
    enabled
: false
    webhook
: "PUT_YOUR_WEBHOOK_URL_HERE"

# --------------------------------------------------
# Debug
# --------------------------------------------------

debug
:
  level
: 0
  # 0 = off
  # 1 = basic
  # 2 = verbose (high TPS cost)

# --------------------------------------------------
# Anti Dupe
# --------------------------------------------------

anti-dupe
:
  container-entity-chunk
:
    enabled
: true
    # Core dupe detection engine (heavy but accurate)
    # May cause false positives on laggy servers

    prediction
:
      enabled
: true

    correlation
:
      enabled
: true

    rollback
:
      enabled
: true
      window_ms
: 5000
      max_blocks
: 50
      # WARNING: can revert legitimate actions during lag spikes

    tick_simulation
:
      enabled
: true

    profiling
:
      enabled
: true

    chunk_context
:
      enabled
: true

    confidence
:
      threshold
: 0.75
      # Higher = safer but less strict
      # Lower = stricter but more false positives

    tick_lag
:
      max_ms
: 500

    container_furnace_dupe
:
      enabled
: true

    entity_dupe
:
      enabled
: true

    chunk_teleport_dupe
:
      enabled
: true

  piston_dupe
:
    enabled
: true
    window_ms
: 2500
    rate_limit
: 12
    chain_limit
: 7
    tnt_radius
: 2
    player_radius
: 144
    log_to_file
: true

  player-dupe
:
    offline
:
      window_ms
: 1500

    chain
:
      window_ms
: 3000
      limit
: 5

    item
:
      repeat
: 5

    creative
:
      enabled
: true
      extra_stack
: 16

    inventory
:
      general
: true

    reincarnation
:
      # Reincarnation detection (entity death respawn with same items)
      # WARNING: May false positive on normal gameplay
      # Recommended: false for production servers
      check
: false

    boundary
:
      # Chunk boundary abuse detection
      # WARNING: May false positive when players legitimately move items
      # Recommended: false for production servers
      check
: false
      violation_limit
: 5

    vehicle
:
      enabled
: true

    chunk
:
      window_ms
: 3000
      rate
: 10

    spam
:
      window_ms
: 3000
      threshold
: 15
      cooldown_ms
: 30000

    snapshot
:
      ttl_seconds
: 600

    history
:
      ttl_seconds
: 10

    similarity
:
      threshold
: 0.95
      min_items
: 10

    equip
:
      rate_limit_ms
: 150
      equip_slots
:
       - 39
        - 40

  # Kick on dupe detection
  kick
: false

# --------------------------------------------------
# Bypass Worlds
# --------------------------------------------------

bypass_worlds
:
  world
: false
  world_nether
: false
  world_the_end
: false

# --------------------------------------------------
# Book Crash
# --------------------------------------------------

book
:
  enabled
: true
  MAX_PAGE
: 100
  MAX_CHARS_PER_PAGE
: 1023 # Max chars per page in java is 1023
  MAX_TOTAL_CHARS
: 102300 # 100*1023
  MAX_COLOR_CODES_PER_PAGE
: 25
  MAX_JSON_DEPTH
: 8
  MAX_ARRAY_DEPTH
: 8
  MAX_EXTRA_COUNT
: 32
  MAX_UNICODE_CHARS
: 30

# --------------------------------------------------
# Click Window
# --------------------------------------------------

click-window
:
  enabled
: true
  max-packets
: 80
  interval-ms
: 900
  max-rule-break
: 4
  auto-kick-on-limit
: false
  # 80 CLICK_WINDOW packets per 900ms (0.9s)
  # Used to detect inventory click spam / packet abuse
  # WARNING: lowering interval too much may cause false positives on lag

# --------------------------------------------------
# Client Integrity
# --------------------------------------------------

client-integrity
:
  ghost-item
: enable
  no-swing-attack
: false # Set this to false if your server is PvP-focused.
  multi-hit
: false # Set this to false if your server is PvP-focused.

# --------------------------------------------------
# Command Crash
# --------------------------------------------------

command
:
  enabled
: true
  max-length
: 256
  max-args
: 128

# --------------------------------------------------
# Ender Pearl Glitch
# --------------------------------------------------

ender-pearl
:
  enabled
: true
  limit-y
: 256
  max-distance
: 80

# --------------------------------------------------
# Entity Spam
# --------------------------------------------------

entity-spam
:
  enabled
: true
  # Prevents entity-based lag/crash exploits (TPS protection system)

  entities
:
    dropped_item
: true
    experience_orb
: true
    armor_stand
: true
    minecart
: true
    boat
: true

    # Detect every non-player entity
    all_non_player
: false

  limits
:
    # Maximum entity spawns per player in one second
    per_player_per_second
: 25

    # Maximum entity spawns inside one chunk during the window
    per_chunk
: 50

  chunk
:
    # Time window for chunk spawn detection (ms)
    window_ms
: 1000

  vl
:
    # Kick after reaching this violation level
    max
: 6

    # Every X seconds VL decreases by 1
    decay_seconds
: 10

  action
:
    # First violation
    first
: ALERT

    # Repeated violations before max VL
    repeated
: CANCEL

    # Action when max VL is reached
    strict
: KICK

# --------------------------------------------------
# Explosion
# --------------------------------------------------

explosion
:
  bed-explosion-dupe
: true

# --------------------------------------------------
# Global Messages
# --------------------------------------------------

messages
:
  # You cannot change messages prefix!
  no_permission
: "&6&lExploitShield &7» &cYou do not have permission to do this."
  reloading
: "&a&lReloading..."
  reloaded
: "&a&lReloaded."

# --------------------------------------------------
# Grief
# --------------------------------------------------

grief
:
  pace
:
    enabled
: true
    max_blocks_per_second
: 100 # What is your server need ?
    message
: "You are placing blocks too fast!"
    message_cooldown
: 5000 # Anti Spam For Messages Sending

  lava
:
    enabled
: true
    max_sources_per_chunk
: 100 # What is your server need ?
    allow_flow
: true
    message
: "Only 100 lava sources are allowed per chunk!"
    message_cooldown
: 5000 # Anti Spam For Messages Sending

# --------------------------------------------------
# Hamster Engine
# --------------------------------------------------

hamster
:
  enabled
: true
  vl_threshold
: 5
  debug
: false

# --------------------------------------------------
# Inventory
# --------------------------------------------------

inventory
:
  abuse-detection
: true
  max-clicks
: 55
  window-click
: 900
  # Detects abnormal inventory clicking speed
  # Keep aligned with click-window settings to avoid mismatch detection

# --------------------------------------------------
# Item NBT
# --------------------------------------------------

item-nbt
:
  enabled
: true
  cooldown-ms
: 30
  max-nbt-size
: 9000
  max-name-length
: 96
  max-lore-lines
: 20
  max-lore-length
: 124
  max-enchants
: 16
  max-enchant-level
: 10
  max-attributes
: 16
  max-item-flags
: 16
  max-pdc-keys
: 32
  max-stack-size
: 127

# --------------------------------------------------
# Item Salvage
# --------------------------------------------------

item-salvage
:
  enabled
: true

# --------------------------------------------------
# Netty
# --------------------------------------------------

netty
:
  enabled
: true
  max_packet_bytes
: 100000
  close_on_violation
: true

# --------------------------------------------------
# Packet Filter
# --------------------------------------------------

packet-filter
:
  enabled
: true
  action
: KICK # KICK/CANCEL/ALERT

# --------------------------------------------------
# Payload Protector
# --------------------------------------------------

payload
:
  max-size
: 8192
  max-channel-length
: 128
  max-register-channels
: 128
  max-brand-size
: 256
  max-bungeecord-size
: 2048
  max-register-total-length
: 2048

# --------------------------------------------------
# Punishment
# --------------------------------------------------

punishments
:
  piston_dupe
:
    warn
:
      threshold
: 3
      action
: WARN
      message
: "&e⚠ Stop abusing piston mechanics!"

    kick
:
      threshold
: 5
      action
: KICK
      message
: "&e⚠ You were kicked for piston exploit."

    ban
:
      threshold
: 8
      action
: COMMAND
      command
: "ban %player% Piston exploit abuse"

  entity_spam
:
    warn
:
      threshold
: 6
      action
: WARN
      message
: "&e⚠ Stop spawning entities!"
      cooldown
: 5000
      repeatable
: true

    kick
:
      threshold
: 10
      action
: KICK
      message
: "&e⚠ You were kicked for entity spam."
      cooldown
: 60000
      repeatable
: false

# --------------------------------------------------
# Sign Crash
# --------------------------------------------------

sign
:
  enabled
: true
  max-line-length
: 80
  max-total-length
: 320 # 80 * 4
  max-color-codes
: 20
  max-repeat
: 20

# --------------------------------------------------
# Spam Crash
# --------------------------------------------------

spam-crasher
:
  enabled
: true
  # Prevents chat/command flood exploits that can crash clients or server
  message-cooldown
: 0.09
  command-cooldown
: 0.09
  message-spam-message
: "&cYou are sending messages too fast!"
  command-spam-message
: "&cYou are sending commands too fast!"

# --------------------------------------------------
# Strict NBT Interceptor
# --------------------------------------------------

strict-nbt
:
  enabled
: true
  # Blocks malformed or oversized NBT payloads (item/chat/book exploits)
  max_book_pages
: 100
  max_book_page_size
: 2048
  max_total_book_size
: 32748
  max_chat_length
: 512
  max_item_nbt_size
: 8192
  max_item_amount
: 127
  max_pdc_keys
: 32

# --------------------------------------------------
# Tab Completer
# --------------------------------------------------

tab-completer
:
  enabled
: true
  # Prevents tab-complete crash
  MAX_TAB_LENGTH_CRITICAL
: 400
  MAX_TAB_LENGTH_WARN
: 350
 

Commands

Plugin details

Read from the plugin's own plugin.yml.

Quick facts

Install steps are the general flow for this file type — How to install Minecraft Java mods & modpacks walks through it step by step.

ExploitShield is a free Minecraft Java mod. Compatible with Minecraft 1.17, 1.18, 1.19, 1.20 and newer. Downloaded 2,855 times (via Spigot). Download it and open it directly in the game.

Explore more