- Tested Minecraft Versions:
- connection_lostQuick LinksWhere did you go?
Download | Configuration | Wiki | GitHub | Special Features
Transfer between Lockette & LockettePro
Update from January 31, 2021:
I am restarting this project very soon. I saw several forks updating the project thru 1.14 (the version that breaks the plugin).
I will start officially restart maintaining this plugin again before 1.17 get released.
Want to contribute and update the plugin now? PR in GitHub!
17w47a Snapshot Concerns
In the latest snapshot, Mojang introduced a feature to allow any chests to be placed adjacent to each other. This may cause issue in the further Minecraft versions (1.13+). I will remove this warning as soon as the problem is addressed.
What is LockettePro?
Remember the sign-based lock plugin Lockette that is popular for years? LockettePro is a deep remade & rewrite of the original Lockette. It has massive performance enhancement, fixed bugs and completely customizable.
I love Lockette, but as time goes by, I get deeply depressed with it. Its codebase is messy, performance is bad, unnecessary checks are everywhere... It also uses legacy deprecated methods, having a piston-related bug for years... It is not very possible to fix all the issues, so I started to start a brand new plugin. And today, I am proudly to present you the ultimate sign lock plugin, LockettePro.
LockettePro - Pros
* No database. All information required for a lock is recorded on the sign.
* Switch to LockettePro and switch back to Lockette worry-free anytime.
* Absolutely better performance. Performance test comparison below.
* Language files are editable, with UTF-8 support.
* Able to disable "bloat" features easily with no affect to performance.
* Customizable. For instance, you can set lockable for every single block.
* Just saying original Lockette's UUID support is not working between server restarts...
LockettePro - Cons
* Lack of admin snooping alert and I am not likely to add this soon.
* (Well seems like I have resolved every other cons, great!)
This test is focused on the most serious performance issue caused by hoppers InventoryMoveItemEvent. The event happens when hoppers are trying to pull items from the container above. Test is performed on my server with a monstrous Chest-Hopper rig consisting 10000 sets of locked chest and hoppers. A hopper tries to pull an item from a chest ever 8 ticks, resulting ~1250 interactions per tick.
Lockette: 41.8 microseconds per event
LockettePro without cache: 19.4 microseconds per event
LockettePro with cache set to 10 seconds: 4.3 microseconds per event
ProtocolLib if you use UUID support. Soft-depended supported plugins could be found as a list below.
How to Use LockettePro?
The usage of Lockette and LockettePro are exactly the same.
For players, just hold a sign in your hand, then right click a chest or any lockable block. If you want to lock a door, you may put a sign on the block above or below the door too. You may also SHIFT+RIGHT CLICK the block to prevent it get automatically locked, or you can write [Private] text manually on signs as well.
Even more information, please see Wiki.Share the chest with another user:
After claiming the chest, you can add another user on the sign. First, right click the sign, then enter /lock 3 <user name>
Share the chest with everyone:
Same as above, you just use [Everyone] (with brackets) in the username.
Add another sign:
If one sign is not enough, you may hold a sign and right click on another surface. It will snap on the surface and become a [More User] sign automatically. Placing the sign while holding SHIFT will bypass the sign creation.
Timer with doors:
I have no idea why Lockette is doing this, but I am adding this feature anyways. If you add a line [timer:X] (with brackets, and X means an integer) to a door lock, the door will automatically close after X seconds.
Commands and Permissions
Main command is /lock. Aliases contains /lockit, /lockette and /lockettepro.
* All players have the permission to lock a chest and edit a chest by default.
* In order to stay consistent with original Lockette, Towny server players need "lockettepro.towny.wilderness" in order to lock chests in the wilds.
* Edit a sign: /lock <line number> <player>
* Reload configuration: /lock reload, requires permission lockettepro.reload
* Admin break lock permission: lockettepro.admin.break
* Admin use block (snoop chests) permission: lockettepro.admin.use
* Admin override placing interference blocks permission: lockettepro.admin.interfere
* Admin edit any sign permission: lockettepro.admin.edit
* More info please see the wiki page.
DO NOT TURN ON FEATURES THAT YOU ARE NOT FAMILIAR WITH BEFORE READING THE PROPER SECTION ON WIKI!
Head to GitHub wiki page for configuration. [config.yml] [lang.yml]
It is currently NOT recommended to use lock expiry feature since it will be changed. Please avoid using it in order to prevent conflicts.
Supported Plugins & Special Lock Line Features
WorldGuard & Residence:
If a player does not have the "break" permission to a block due to WorldGuard or Residence, then he cannot lock it.
If a sign has a user line formatted "[SomeName]", this means any player in town or nation "SomeName" will have access to this chest.
Players are not allowed to lock a chest in the wilderness unless he has permission lockettepro.towny.wilds
Factions (from MassiveCraft):
If a sign has a user line formatted "[FactionName]", this means any player in faction "FactionName" will have access to this chest.
If a sign has a user line formatted "[clantag]", this means any player in that clan will have access to this chest.
If a sign has a [GroupName] in user line, anyone in that group could access it. The group is taken according to Vault.
If a sign has a [TeamName] in user line, anyone in that team could access it. The team is Bukkit's scoreboard.
Some plugins are born to compatible with Lockette/LockettePro thanks to Bukkit's event priority mechanics. Players are not able to lock a chest/block that has already protected by another plugin. Known compatible plugin includes ChestShop.
If you want some plugin to be supported, that plugin must be at least non-trivial with proper API. If that plugin is a premium plugin, source or a free copy of that plugin (from author) is required for me to test it properly as well.
Please post issues to GitHub issue page if possible or leave a comment at discussions. Critical issues (exploits) please PM @connection_lost . Make sure to bring as many information as possible, such as error log, existing plugins etc..
Known Issues & FAQ
1. I have issues with LockettePro + UUID Support + Minecraft 1.8.8...
Please note there is an issue with ProtocolLib, not LockettePro. A fixed version of ProtocolLib by my friend can be found here: http://ci.yumc.pw/job/ProtocolLib/
2. FactionsUUID is not supported...
The goal of LockettePro is to deliver a high-quality, and high performance sign-based lock plugin that can replace original Lockette. My server uses LockettePro too, and I will take full responsible for this plugin.
Like LockettePro? Missing features? Issues or bugs? What can I help to make it better? Leave a comment in the discussion, I want to know!
* My English is not very good, if I made some errors please don't laugh at me
> bookone, CharltonJay, clovisd, HotpotKnight, Jiong8799, 小小马 for discovering critical issues.
> Alarar for Spanish translation (lang_es.yml)
> Maxetto for Italian translation (lang_it.yml)
> And all pull requests on GitHub!
LockettePro - UUID Support [Abandoned - restarting] 2.9.0
High performance sign-based lock plugin, highly customizable
- Residence Fix, SimpleClans & GriefPrevention Aug 11, 2017
- Fix Invisible Signs for Minecraft 1.12 Jun 14, 2017
- Update for Minecraft 1.12 & Lock Expiry (Experimental) Jun 12, 2017
I have this error:
[19:09:22] [Server thread/ERROR]: Could not pass event PlayerInteractEvent to LockettePro v2.9.0
at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:319) ~[spigot-1.15.2.jar:git-Spigot-6de3d4b-a6f8093]
at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:70) ~[spigot-1.15.2.jar:git-Spigot-6de3d4b-a6f8093]
at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:589) ~[spigot-1.15.2.jar:git-Spigot-6de3d4b-a6f8093]
at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:576) ~[spigot-1.15.2.jar:git-Spigot-6de3d4b-a6f8093]
at org.bukkit.craftbukkit.v1_15_R1.event.CraftEventFactory.callPlayerInteractEvent(CraftEventFactory.java:442) ~[spigot-1.15.2.jar:git-Spigot-6de3d4b-a6f8093]
at net.minecraft.server.v1_15_R1.PlayerInteractManager.a(PlayerInteractManager.java:441) ~[spigot-1.15.2.jar:git-Spigot-6de3d4b-a6f8093]
at net.minecraft.server.v1_15_R1.PlayerConnection.a(PlayerConnection.java:1251) ~[spigot-1.15.2.jar:git-Spigot-6de3d4b-a6f8093]
at net.minecraft.server.v1_15_R1.PacketPlayInUseItem.a(PacketPlayInUseItem.java:27) ~[spigot-1.15.2.jar:git-Spigot-6de3d4b-a6f8093]
at net.minecraft.server.v1_15_R1.PacketPlayInUseItem.a(PacketPlayInUseItem.java:1) ~[spigot-1.15.2.jar:git-Spigot-6de3d4b-a6f8093]
at net.minecraft.server.v1_15_R1.PlayerConnectionUtils.lambda$0(PlayerConnectionUtils.java:19) ~[spigot-1.15.2.jar:git-Spigot-6de3d4b-a6f8093]
at net.minecraft.server.v1_15_R1.TickTask.run(SourceFile:18) [spigot-1.15.2.jar:git-Spigot-6de3d4b-a6f8093]
at net.minecraft.server.v1_15_R1.IAsyncTaskHandler.executeTask(SourceFile:144) [spigot-1.15.2.jar:git-Spigot-6de3d4b-a6f8093]
at net.minecraft.server.v1_15_R1.IAsyncTaskHandlerReentrant.executeTask(SourceFile:23) [spigot-1.15.2.jar:git-Spigot-6de3d4b-a6f8093]
at net.minecraft.server.v1_15_R1.IAsyncTaskHandler.executeNext(SourceFile:118) [spigot-1.15.2.jar:git-Spigot-6de3d4b-a6f8093]
at net.minecraft.server.v1_15_R1.MinecraftServer.ba(MinecraftServer.java:918) [spigot-1.15.2.jar:git-Spigot-6de3d4b-a6f8093]
at net.minecraft.server.v1_15_R1.MinecraftServer.executeNext(MinecraftServer.java:911) [spigot-1.15.2.jar:git-Spigot-6de3d4b-a6f8093]
at net.minecraft.server.v1_15_R1.IAsyncTaskHandler.awaitTasks(SourceFile:127) [spigot-1.15.2.jar:git-Spigot-6de3d4b-a6f8093]
at net.minecraft.server.v1_15_R1.MinecraftServer.sleepForTick(MinecraftServer.java:895) [spigot-1.15.2.jar:git-Spigot-6de3d4b-a6f8093]
at net.minecraft.server.v1_15_R1.MinecraftServer.run(MinecraftServer.java:828) [spigot-1.15.2.jar:git-Spigot-6de3d4b-a6f8093]
at java.lang.Thread.run(Thread.java:748) [?:1.8.0_201]
Caused by: java.lang.NullPointerException
at org.bukkit.material.Sign.getFacing(Sign.java:134) ~[spigot-1.15.2.jar:git-Spigot-6de3d4b-a6f8093]
at me.crafter.mc.lockettepro.LocketteProAPI.isLockedSingleBlock(LocketteProAPI.java:163) ~[?:?]
at me.crafter.mc.lockettepro.LocketteProAPI.isLocked(LocketteProAPI.java:58) ~[?:?]
at me.crafter.mc.lockettepro.BlockPlayerListener.onAttemptInteractLockedBlocks(BlockPlayerListener.java:249) ~[?:?]
at sun.reflect.GeneratedMethodAccessor2815.invoke(Unknown Source) ~[?:?]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_201]
at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_201]
at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:315) ~[spigot-1.15.2.jar:git-Spigot-6de3d4b-a6f8093]
... 19 more
Not good. Not updated , no support no way to fix issues. Currently there's an huge issue as people can just bypass this plugin with Minecart hoppers. There's no way to disable them stealing stuff from claimed chests. Every protection is on , this is not a bug or a glitch, this is something that the author hasn't thought off and since the plugin is outdated there's no way to fix it
Great plugin! I use this plugin on my survival server /w towny and it works great! Something that I would love to see in the future is more towny support than just not being able to [private] in the wilderness, like chests going public when land is unclaimed. Thanks a lot for this well-made and free plugin!
Pretty great, wished it supported factionsuuid though.