Access control
MCSkylines-Lock
Version 2.0.6 · Documentation refreshed October 12, 2026
Fast sign and server-side locks for doors, containers, redstone access, group permissions, and property-aware building.
Required plugins: LuckPerms. Optional integrations: WorldGuard, MCSkylines-Property.
01
What it handles
Feature overview
Sign locks
Private and additional-user signs support players, LuckPerms groups, everyone access, and automatic timers.
Complete protection
Blocks unauthorized use, breaking, explosions, pistons, redstone opening, and hopper transfer.
Paired structures
Double chests and paired doors are protected and operated as one logical lock.
Inherited groups
Transitive LuckPerms membership lets ranks inherit access from broader RP groups.
Builder auto-lock
Session-scoped auto-locking creates signless persistent locks while placing configured blocks.
Digital locks
Authorized staff can create and remove signless locks with property-scoped management rights.
Warrant access
Justice can register narrowly scoped warrant bypasses without giving officers permanent lock management.
Memory-backed checks
Interaction checks use an in-memory location index; SQLite is touched only when locks change.
02
Encyclopedia
Configuration defaults: Values shown for operator-configurable settings are the bundled defaults, and can be changed in the module’s configuration or definitions. The server’s active settings take precedence, so costs, speeds, ranges, durations, chances, effects, recipes, limits and enabled features may differ. Command examples illustrate syntax; fixed mechanics and validation bounds are not configuration defaults.
Lock protects containers, doors/trapdoors/gates, paired doors and double chests. Protection includes unauthorized use/breaking, redstone, hoppers, pistons and explosions. There are sign locks and persistent signless locks, with distinct access/removal rules.
Sign locks
Normal-right-click a lockable block with a sign. Lock places and protects the sign immediately without opening the sign editor, while still sending a real BlockPlaceEvent through WorldGuard and other build protection. You can also place a sign normally on a door or its lintel/foundation block. The finished sign becomes:
[Private]
YourName
access entry
access entryAccess entries may be:
PlayerNameor[player:PlayerName][police]or[group:police][Everyone][Timer:1s],[Timer:2s],[Timer:3s], or longer durations such as[Timer:2m]
LuckPerms inheritance is transitive. If sergeant inherits police (even through intermediate groups), a sergeant can use a lock containing [police]. Membership results are cached and invalidated by LuckPerms recalculation events.
Normal-right-click with another sign on a lock you own to create a [More Users] sign without opening the editor. Sneak-placing a sign opts out completely: the editor opens, the text is preserved, and the sign is not attached to the lock. To change a lock, right-click its sign to select it and run /lock <line> <text>; use - as the text to clear a line. Breaking or otherwise removing the primary [Private] sign removes the lock; breaking or removing a [More Users] sign removes only its entries. Missing signs are also reconciled on use, covering external block-edit tools which bypass normal break events. Conversely, if a recorded [Private] sign still exists but its lock record has disappeared, trying the protected block reconstructs the lock and its recorded access signs from their physical text and audit history.
Signless builder locks
Run /autolock on, then place trapdoors. Each receives a persistent server-side lock without a sign. The lock owner and, by default, members/owners of the WorldGuard property at that block can use it and remove it with /unlock while looking at it. /autolock off ends the build session. Auto-lock mode intentionally resets when the player disconnects.
WorldGuard property access is optional and affects only signless locks. Configure it under property-access.
Administrators with lock.digital.lock can look at any eligible block and run /digitallock to lock it immediately without enabling auto-lock mode. Digital locks can be removed with /unlock by their creator or, by default, any owner/member of the containing WorldGuard property. Grant lock.digital.unlock.anywhere to staff who should be able to use /unlock on digital locks in every property without receiving the broader lock.bypass permission.
Justice / warrant API
Lock registers the canonical dev.serverplugins.lockette.api.LockApi service and a legacy LocketteApi alias with Bukkit's ServicesManager. Justice can register a LockBypassProvider and return true only when a player has a valid warrant for the supplied locked block. Providers receive a LockAction, so warrant access can be limited to USE without granting MANAGE rights. Registrations are removable and providers from disabled plugins are discarded automatically.
The database is plugins/Lock/locks.db by default and uses WAL mode, foreign keys, indexed sign lookups, and an in-memory block-location index. Chat, sign-editor, notification, command, and error text is configurable as MiniMessage in plugins/Lock/messages.yml. On the first upgrade, Lock safely copies legacy plugins/Lockette data and retains the old folder as a backup. Remove the old Lockette JAR before starting the server. /lockette remains an alias for /locks.
Access evaluation
The owner always has access. Explicit player entries match the named player. Group entries use transitive LuckPerms inheritance, so a higher rank inheriting the listed group is accepted. [Everyone] opens use access to everyone. Timer entries control automatic closing rather than granting another principal.
Signless property access is separate from sign access and is configurable. The Justice warrant provider can grant a specific USE action at a locked block without granting management, breaking, or removal.
What protection covers
Registered locks prevent unauthorized interaction and breaking, explosion removal, piston movement, redstone opening, and hopper transfer where applicable. Double chests and paired doors resolve as one logical target. Paired doors open and close together, and their timers close the pair together.
Removing the primary [Private] sign removes the complete sign lock. Removing a [More Users] sign removes only entries contributed by that sign. The reconciliation path repairs stale database/sign mismatches when external editing tools bypass ordinary events.
Bypass mode
Holding lock.bypass alone changes nothing. Staff must explicitly enable /lock bypass; the state resets on disconnect. Active bypass grants use/open behavior only. It does not permit editing access lists, breaking blocks, or deleting locks, and it should not be confused with lock.digital.unlock.anywhere.
Rammed-door integration
Active Justice breaches remain open until mined and replaced. Manual close attempts report that the door was rammed; authorized sneak inspections retain officer/time information. Lock skips forced-open doors before toggling or scheduling a timer, and pending timers recheck the full paired door at execution. They do not close a breached half or play a denied-close sound. Ordinary repaired doors resume their normal lock behavior. The optional main-thread ForcedOpenDoors service in Core avoids a hard Lock → Justice dependency.
Setup and configuration
Use Suite installation, retain locks database and physical signs together, and preserve legacy Lockette backup data. config.yml controls lockable materials, signless property access, timers and protection policy; messages.yml controls replies. Sign group access uses actual transitive LuckPerms membership, unlike Vehicle fleet permission nodes. Region build checks run when creating signs. Owner/member property policy applies only to signless locks unless another explicit provider grants an action.
Reading command syntax
Configuration defaults: Values shown for operator-configurable settings are the bundled defaults, and can be changed in the module’s configuration or definitions. The server’s active settings take precedence, so costs, speeds, ranges, durations, chances, effects, recipes, limits and enabled features may differ. Command examples illustrate syntax; fixed mechanics and validation bounds are not configuration defaults.
<argument> is required; [argument] is optional. Replace the placeholder, including its brackets, with your value. Choices separated by a vertical bar mean choose one. ... accepts the remaining words. Do not type quotation marks around multiword names unless the command specifically requires them. A bare command has no required arguments. Examples use sample players/IDs: substitute entries from your server and use Tab for configured IDs.
player means a username; operational actions usually require that player online. amount and price are currency values such as 25.00, unless the row specifies items, levels, or units. reason, memo, message, name, and statement accept text where supported. duration uses the module's duration format (for example 10m, 2h, or 7d); it is not a bare number of minutes unless stated. id is the exact identifier displayed by that system, not its friendly name. Permissions and ownership/state/location checks both apply.
Lock command syntax
| Syntax | Arguments / action | Access |
|---|---|---|
/lock <line> <text> | Select sign by right-click first; editable line number and remaining access text; - clears it | Lock owner/authorized management |
/lock bypass [on or off or status] | Explicit session use bypass; no state toggles | lock.bypass; never grants editing/removal |
/locks bypass [on or off or status] | Same bypass surface | lock.bypass |
/locks info | Inspect targeted lock | Target/inspection permission |
/locks reload | Reload configuration/messages | lock.reload |
/autolock [on or off or status] | Session auto-lock for configured placed blocks; mode resets on quit | lock.autolock |
/digitallock | Create signless lock on looked-at eligible block | lock.digital.lock |
/unlock | Remove looked-at signless lock | Creator/property policy or lock.digital.unlock.anywhere |
/forceunlock | Force-remove targeted lock and attached signs for recovery; no arguments | lock.forceunlock; player-only |
/removesign | Remove attached lock signs at target | Property region owner and permission; ordinary member insufficient |
Example: select your Private sign, then /lock 3 [group:police] or /lock 4 [Timer:2s]. Access text accepts a username, [player:Name], [group:name], [Everyone], or timer. The owner line is protected; Tab suggests editable lines. /unlock is for digital locks, not sign removal.
Root commands and aliases
These are the registered command entry points. The subcommand tables above describe their complete operations. Alias names use the same arguments as their root.
| Syntax | Purpose | Permission / aliases |
|---|---|---|
/autolock [on|off|status] | Toggle automatic server-side trapdoor locking while building. | Checked by operation |
/unlock | Remove a server-side lock from the block you are looking at. | Checked by operation |
/digitallock | Administratively add a server-side lock to the block being looked at. | Checked by operation |
/forceunlock | Force-remove any digital lock and break all signs attached to it. | Checked by operation |
/lock <line> <text|-> or /lock bypass [on|off|status] | Edit a selected lock sign line. | Checked by operation |
/removesign | Remove prior occupants' lock signs from a WorldGuard region you own. | Checked by operation |
/locks <info|reload|bypass [on|off|status]> | Inspect or administer MC Skylines Lock. | Checked by operation; aliases: /lockette, /lockadmin |
03
Command roots
Use the command syntax sections above for every required argument and subcommand. The short usage below is the plugin’s registered help text.
| Command | Usage | Description | Permission |
|---|---|---|---|
/autolock | /autolock [on|off|status] | Toggle automatic server-side trapdoor locking while building. | Subcommand-based |
/unlock | /unlock | Remove a server-side lock from the block you are looking at. | Subcommand-based |
/digitallock | /digitallock | Administratively add a server-side lock to the block being looked at. | Subcommand-based |
/forceunlock | /forceunlock | Force-remove any digital lock and break all signs attached to it. | Subcommand-based |
/lock | /lock <line> <text|-> or /lock bypass [on|off|status] | Edit a selected lock sign line. | Subcommand-based |
/removesign | /removesign | Remove prior occupants' lock signs from a WorldGuard region you own. | Subcommand-based |
/locksAliases: lockette, lockadmin | /locks <info|reload|bypass [on|off|status]> | Inspect or administer MC Skylines Lock. | Subcommand-based |
04
Permissions
| Node | Default | Description / children |
|---|---|---|
lock.use | Create and use ordinary sign locks. | |
lock.autolock | Use server-side trapdoor auto-lock building mode. | |
lock.unlock | Remove server-side locks the player is allowed to manage. | |
lock.edit | Select and edit lock signs owned by the player. | |
lock.removesign | Clear lock signs from WorldGuard regions owned by the player. | |
lock.info | Inspect the lock being looked at. | |
lock.admin | Administer locks and explicitly enable interaction-only bypass mode.Includes lock.use, lock.autolock, lock.unlock, lock.edit, lock.removesign, lock.reload, lock.bypass, lock.info, lock.forceunlock, lock.digital.lock, lock.digital.unlock.anywhere | |
lock.reload | No additional description. | |
lock.bypass | Enable interaction-only bypass mode with /lock bypass. | |
lock.forceunlock | Force-remove any lock and its attached lock signs for debugging or recovery. | |
lock.digital.lock | Create a digital lock directly with /digitallock. | |
lock.digital.unlock.anywhere | Remove digital locks with /unlock regardless of property membership. |
Command and permission references reflect the current plugin.yml manifests in this workspace.