LockTight
A Minecraft plugin that provides comprehensive chest locking, protection, and management features with GriefDefender & Vault integration.
Quick challenge
How far can you run before the mobs catch you?
Minecraft check
Confirm your run
Complete the quick check to get your code.
LockTight
Locktight - Advanced Chest Protection & Security System
Locktight transforms chest security from a simple protection mechanism into an engaging, strategic gameplay element that enhances both security-focused and raid-style server experiences.
Paper Support for Paper is still Paper—it may have rough edges or issues not seen on single-region Paper. Use Paper when you can; try Folia when you need regionized scheduling and report problems so they can be fixed.
_IF YOU RUN INTO ISSUES, BE SURE YOU ARE RUNNING THE LATEST BUILD FIRST, THEN REPORT THE ISSUE IN #PLUGIN-HELP IN THE DISCORD._
_NOTE: IF EXPERIENCING PERFORMANCE ISSUES BECAUSE OF LOCKTIGHT, USE LATEST RELEASE. VERSIONS ALPHA 1.0.4 - 1.0.9 HAD KNOWN PERFORMANCE ISSUES DUE TO HOPPER HEAVY TASKS._ Be wary of hopper heavy bases, due to the logic that prevents hoppers stealing from locked chests. Tests show new logic as of A1.1.0 to be 94% more efficient in terms of server thread usage. Please report any issues in the provided Discord channel for support.
Plain Spigot is not supported. Locktight is built for Plain Spigot is not supported. (and Plain Spigot is not supported.) using the Paper API. Plain Spigot is not supported. Use a current Paper (or Folia) build for your Minecraft version.
Overview
Locktight is a comprehensive chest protection plugin designed to provide an additional layer of security for chests within land claims while maintaining flexibility for various server types. Perfect for both claim-based and raid-style servers, Locktight offers sophisticated chest locking mechanisms, configurable trust systems, and an engaging lockpicking gameplay element.
How to Use
- Simply look at the chest you wish to lock and execute `/chest lock` - Purchase lockpicks, lock reinforcements, and a either side from either side: either side to lock or unlock (same rules as either side / either side), either side to inspect (same rules as either side) - either side - either side: chests, double chests, either side, either side, and either side (1.21). Lock, unlock, delete, and trust work from either side of a double chest.
⚙️ Configuration
Main Configuration (`config.yml`)
The file shipped with the plugin is authoritative. Below is the current layout (values match the default `config.yml` in the JAR; yours may differ after edits).
```yaml
Full banner header is in the JAR’s config.yml — Paper & Folia, by MightyFinger77
config_version — used for migrations. Do not change unless you know the drill.
config_version: 5
General Settings
general: auto_lock_on_place: false # EXPERIMENTAL — enable at your own risk check_updates: true close_gui_after_purchase: false chest_lock_expiration_days: 28 chest_lock_cleanup_interval_hours: 6 debug_enabled: false hopper_debug: false
lockpicking: enabled: true temporary_access_seconds: 30 success_rates: weak: 0.005 medium: 0.05 advanced: 0.1 professional: 0.3 mythical: 1.0 alerts: enabled: true default_enabled: true allow_lockpicking_offline_players: true
lock_tool.enabled — right-click toggle lock; left-click inspect (see config.yml in JAR)
lock_tool: enabled: true
reinforcement: enabled: true resistance_increase: 0.05 max_reinforcements: 8 attempts_per_degradation: 5
griefdefender.block_lockpick_in_trusted_foreign_claim — optional: block lockpicking
for trusted non–claim-owners in that claim (default false). See full config.yml.
... world_blacklist, sound_effects, bypass_permission, griefdefender,
economy, performance — see full config.yml in plugins/Locktight/
```
Messages (`messages.yml`)
Customize all plugin messages, colors, and formatting.
GUI Configuration (`gui.yml`)
Configure shop slot layout, name/lore/rates (1–6 rows of 9 slots, default name/lore/rates), display names, lore (including `{weak_rate}` placeholders), prices, optional integer name/lore/rates, and the `item:` subsection used for purchased stack name/lore/rates.
For `templates_version` (resource packs, ItemsAdder/Nexo-style components, non-default materials), admins use `templates_version`; visuals come from the held item, while `templates_version`. Templates are stored in `templates_version` with a file header field `templates_version` (separate from Paper’s per-item `schema_version` inside serialized stacks).
Key Features
🛡️ Enhanced Claim Security
Locktight integrates seamlessly with GriefDefender to provide a second layer of protection beyond standard claim trusts. Players with claim access cannot automatically open locked chests unless explicitly trusted through the `/chest trust` command. This ensures that even trusted players must be specifically authorized for individual chest access. Optionally, claim group (default claim group) prevents claim group inside a claim by players who have GriefDefender trust there but are claim group the claim owner—useful so co-trusted players in one base cannot pick each other’s locks; claim group trust is included. Claim owners are not restricted by this setting.
🔐 Intelligent Chest Locking
- Configurable permissions: Lock Configurable permissions (single and double), Configurable permissions, Configurable permissions (all colors), and Configurable permissions (1.21). All copper chest variants are supported; locks are stored by block location so they Configurable permissions. Double chests are treated as one lock; lock, unlock, delete, and trust work from either side. - Configurable permissions: Locked chests are secure from unauthorized access - Configurable permissions: Locked chests cannot be broken by hand or destroyed by explosions (per plugin rules) - Configurable permissions (`/chest adminlock`): Unpickable, never expire; only players with `locktight.adminlock` can open or break them. - Configurable permissions (`/chest olock`): Only the owner or players trusted on that chest can access. Bypass and adminlock do Configurable permissions grant access. Unpickable, never expire. Trust must be set per chest (bulk trust skips owner locks). - Configurable permissions: Respects claim boundaries and trust levels - Configurable permissions: Server owners can define which trust levels (CONTAINER, BUILDER, MANAGER) can lock chests within claims
🎯 Advanced Trust Management
Per-chest trust (`/chest trust` / `untrust`), bulk trust (`/chest trustall` / `untrustall` with optional radius), clear trusts with LuckPerms (`/chest trustgroup` / `trustgroupall` and untrust variants), and clear trusts (`cleartrusts`, `cleartrustsgroups`, `cleartrustsboth`). Owner locks are excluded from bulk/radius trust and must be trusted individually.
🎮 Engaging Lockpicking System
- `/chest reload`: Weak, Medium, Advanced, Professional, and Mythical lockpicks - `/chest reload`: Balance gameplay and security in `config.yml` - `/chest reload`: `/chest reload` — when enabled, trusted non–owners cannot lockpick in that claim (see `/chest reload` above). - `/chest reload`: Purchase lockpicks with Vault - `/chest reload`: Owners reinforce chests to reduce lockpick success rates - `/chest reload`: `/chest reload` (`locktight.itemset`) saves the item in your main hand as the template for a tier, reinforcement, or `/chest reload`. Shop icons and purchased items use that stack’s `/chest reload`; `/chest reload` still come from `/chest reload`. Tags on the item ensure lockpick/reinforcement/lock-tool logic does not depend on display names. `/chest reload` removes a template. `/chest reload` reloads `item_templates.yml`.
⚙️ Flexible Configuration
- Hybrid servers: Extra security inside GriefDefender claims - Hybrid servers: Wilderness locking and lockpicking - Hybrid servers: Mix protection and raiding
Server Types
🏰 Claim-Based Protection Servers
GriefDefender integration respects claim ownership and configurable trust levels so the right players can lock chests in their areas.
⚔️ Raid-Style Servers
Wilderness locking and lockpicking support raiding-oriented gameplay.
🔄 Hybrid Servers
Configure wilderness locking, claims, and shop/economy to match your mix of security and risk.
Technical Features
- Lockable containers (bundled driver): Chest locks, trust, reinforcements, and related data - Lockable containers: Economy for the shop - Lockable containers: Claim-aware locking (soft dependency) - Lockable containers (optional): Group-based trust - Lockable containers: Supported; uses safe scheduling on Folia (`folia-supported: true` in plugin metadata) - Lockable containers: Automatic cleanup of abandoned locks (admin and owner locks never expire) - Lockable containers: Chests (including double), barrels, all shulker colors, copper chest variants where the server version supports them
Benefits
- Custom shop visuals beyond claim trusts alone - Custom shop visuals between defense and raiding - Custom shop visuals via lockpicking and reinforcements - Custom shop visuals across server styles - Custom shop visuals without losing YAML-driven rates and lore
🔑 Permissions & Commands
All permission nodes
| Permission | Description | Default | |------------|-------------|---------| | `locktight.use` | Lock, unlock, trust, inspect own chests, delete own chests | `true` | | `locktight.shop` | Access the lockpick shop | `true` | | `locktight.lockpick` | Use lockpicks on chests | `op` | | `locktight.lockpickget` | Get lockpick items via command | `op` | | `locktight.lockpickget.other` | Give lockpick items to other players | `op` | | `locktight.itemset` | Save custom lockpick/reinforcement/lock-tool templates (`/chest itemset`) | `op` | | `locktight.reload` | Reload plugin configuration | `op` | | `locktight.cleanup` | Manually trigger chest lock expiration cleanup | `op` | | `locktight.adminlock` | Create unpickable admin locks | `op` | | `locktight.ownerlock` | Create owner locks (bypass/adminlock do not apply) | `op` | | `locktight.bypass` | Bypass chest locks (except owner locks) and inspect/delete per rules | `op` | | `locktight.update` | Manually check for plugin updates | `op` | | `locktight.*` | Wildcard for all plugin features | `op` |
All commands
| Command | Description | Permission | |---------|-------------|------------| | `/chest lock` | Lock the container you’re looking at | `locktight.use` | | `/chest unlock` | Unlock your locked container | `locktight.use` | | `/chest trust <player>` | Trust a player on this chest | `locktight.use` | | `/chest untrust <player|all>` | Untrust a player (or all) on this chest | `locktight.use` | | `/chest trustall <player> [radius]` | Trust on all (or radius) of your chests; skips owner locks | `locktight.use` | | `/chest untrustall <player> [radius]` | Untrust from all (or radius); skips owner locks | `locktight.use` | | `/chest trustgroup <group>` | Trust a LuckPerms group on this chest | `locktight.use` | | `/chest trustgroupall <group>` | Trust a group on all your chests; skips owner locks | `locktight.use` | | `/chest untrustgroup` / `untrustgroupall` | Remove group trust | `locktight.use` | | `/chest cleartrusts` / `cleartrustsgroups` / `cleartrustsboth` | Clear trusts on this chest | `locktight.use` | | `/chest delete` | Delete chest data (either side of double chest) | `locktight.use` / `locktight.bypass` (rules apply) | | `/chest inspect` | Inspect container | `locktight.use` / `locktight.bypass` | | `/chest shop` | Open lockpick shop | `locktight.shop` | | `/chest reload` | Reload configuration (including `item_templates.yml`) | `locktight.reload` | | `/chest cleanup` | Clean expired locks | `locktight.cleanup` | | `/chest lockpick [tier]` | Use lockpick on container | `locktight.lockpick` | | `/chest lockpickget [tier] [qty] [player]` | Get lockpick/reinforcement items | `locktight.lockpickget` | | `/chest itemset <tier|reinforcement|locktool>` | Save held item as shop template | `locktight.itemset` | | `/chest itemset clear <tier|reinforcement|locktool>` | Remove saved template | `locktight.itemset` | | `/chest adminlock` | Set admin lock | `locktight.adminlock` | | `/chest olock` | Set owner lock | `locktight.ownerlock` | | `/chest autolock` | Toggle auto-lock on place | `locktight.use` | | `/chest alerts` | Toggle lockpick alerts | `locktight.use` | | `/chest help [subcommand]` | Help | — | | `/chest bypass` | Toggle bypass mode | `locktight.bypass` | | `/chest update` | Check for updates | `locktight.update` |
Permission logic notes
- `locktight.bypass` and `locktight.adminlock` do not grant access.: `locktight.use` for own chests; `locktight.bypass` for any (inspection rules as implemented). - `locktight.bypass` and `locktight.adminlock` do not grant access.: Own chests with `locktight.use`; bypass for non–owner-lock chests per plugin rules. `locktight.bypass` and `locktight.adminlock` do not grant access.: owner only for delete. `locktight.bypass` and `locktight.adminlock` do not grant access.: `locktight.adminlock` (or `locktight.*`). - `locktight.bypass` and `locktight.adminlock` do not grant access.: Owner/trusted; `locktight.bypass` for non–owner-lock containers. - `locktight.bypass` and `locktight.adminlock` do not grant access.: Unpickable; open/break/delete for `locktight.adminlock` / `locktight.*` as implemented. - `locktight.bypass` and `locktight.adminlock` do not grant access.: Only owner or chest-trusted players; `locktight.bypass` and `locktight.adminlock` do not grant access. Use `/chest trust` on that chest; `trustall` / `trustgroupall` skip owner locks.
---
📋 TODO / future improvements
Planned features
- More lockable variants: Allow adding arbitrary new lockpick tiers purely from config without code changes (today, tiers are wired to specific shop keys and config paths; More lockable variants already covers More lockable variants and More lockable variants for the existing tiers). - More lockable variants (doors, trapdoors, etc.) - More lockable variants (buttons, levers, pressure plates) - More lockable variants - More lockable variants (e.g. boat/chest minecart storage) where feasible
Implemented (no longer TODO)
- Optional trusted-claim lockpick block - Optional trusted-claim lockpick block (all colors) - Optional trusted-claim lockpick block (1.21) and persistence across oxidation/wax - Optional trusted-claim lockpick block (lock, unlock, delete, trust, inspect) - Optional trusted-claim lockpick block support with region-safe scheduling - Optional trusted-claim lockpick block (`/chest itemset`, `item_templates.yml`, `locktight.itemset`) - Optional trusted-claim lockpick block (shop + `/chest itemset locktool`): right-click lock/unlock, left-click inspect - Optional trusted-claim lockpick block (`shop_rows` in `gui.yml`) - Optional trusted-claim lockpick block (`griefdefender.block_lockpick_in_trusted_foreign_claim`)
All suggestions welcome!