Compatibility
Minecraft: Java Edition
1.21.x
1.20.x
1.19.x
Platforms
Tags
Creators
Details
Licensed ARR
Published 2 days ago
Laminar
A packet-validation layer for Spigot/Paper. Laminar checks client→server Play packets against their protocol shape — and, for a handful of privileged packets, against the sender's actual permissions — before they reach the rest of your plugins.
What it does
- Field validation — malformed or out-of-range values (invalid coordinates, bad enum values, oversized strings, NaN/Infinity) are cancelled before they reach anything else listening on the packet.
- Permission cross-checks — game mode changes, difficulty changes, command blocks (block + minecart), structure blocks, jigsaw blocks, and test blocks are checked against a cached permission snapshot before being allowed through. This closes the gap where a modified client sends the privileged packet directly instead of going through the UI that would normally gate it.
- Permission caching — each player's effective permissions are snapshotted into a
ConcurrentHashMapon join and removed on quit, so the checks above are a map lookup instead of a call into the permissions plugin on the packet thread. - Version-aware routing — packets that were renamed or removed across versions (legacy container confirmation, chat preview, the old float-based steer-vehicle/pick-item packets) are only validated against the shape that's actually correct for the server's running version, rather than one hardcoded shape.
- Rejection logging — every cancelled packet is logged:
[DROP]with the player's UUID for a failed permission or field check,[INVALID]with the specific bad value that failed. This is server-log output, not a persisted or queryable audit system. - Packet coverage — 64 client→server Play packet types currently have a validator, spanning movement, chat/commands, block and world interaction, entity interaction, inventory/containers, and recipe/advancement packets, including version-gated ones (1.19 signed chat, 1.20.2 chunk batching, 1.21.2 input model rework, 1.21.5 test blocks, 1.21.6 dialog click actions). Coverage isn't exhaustive — a few newer packets (e.g. signed chat commands, client ping requests) aren't wrapped by the PacketEvents version this plugin currently ships with, so they pass through unvalidated for now.
What Laminar is not
Laminar is not an anticheat. It does not detect movement exploits, combat hacks, or behavioural anomalies — it validates structure, range, and permission, not intent. Think of it as a protocol-level input filter: it enforces that a packet is well-formed and the sender was allowed to send it, and leaves game-logic judgement to other systems.
Compatibility
| API | PacketEvents 2.11.1 (shaded) |
| Minimum server | Spigot / Paper 1.19 (declared via api-version) |
| Built against | Spigot API 1.21.4 |
| Priority | LOWEST — runs alongside anticheats and other packet listeners without contending for event order |
| Thread safety | Pipeline interception runs on Netty I/O threads; the permission cache is ConcurrentHashMap-backed |
This reflects the current Alpha V0.3 codebase — a technical description of what's actually implemented, not a roadmap.


