Current Version:
3.7 (Release)

What is it for?

This plugin allows players to store books, maps, and more into those once useless bookshelves - just like chests! It encourages players to write books and store them in shelves, and can build onto your economy with libraries and bookstores by using the built in Vault support. Unlimited bookshelves make rule walls a thing of the past; store rule books inside an unlimited shelf, and every player can have one! Book Shelves are opened like a chest, by right clicking on the shelf. This opens a chest-like inventory that only allows the storage of books, maps, records, and paper. The items are stored in an SQLite database, so no setup is required to use this plugin! MySQL support is optional. These are just a few of the many features of BookShelf.

What are the Features?

  • Store books, maps, records (music discs), and paper in bookshelves!
  • Right click on shelves to open a familiar chest-like inventory!
  • Configurable top/bottom access. Disable it, and hide the shelves in your floor!
  • Create unlimited shelves that give out infinite copies! - Great for rule books, libraries, newspapers, city maps, and more!
  • Create shop shelves that work with any Economy! (Using Vault)
  • Combine unlimited and shop shelves to create a shop that has unlimited copies! - Great for server stores!
  • Create a donation shelf type that allows the owner to add/remove books, while other players can only add books! Good for library submissions!
  • You can only store books, maps, paper, and records.
  • Items maintain their position in the shelf; none of that "auto-sorting" business.
  • Runs on SQLite - No setup!
  • Can be configured to use MySQL instead of SQLite!!
  • Configurable shelf sizes! (Rows of 9, Max 6 rows)
  • Configurable default shelf names!
  • Each shelf can be individually named - Great for naming library sections!
  • Configure what types of books can be put into shelves!
  • When the shelf is broken, books drop like a chest - nothing is lost!
  • Reloading does not break the plugin!!
  • Support for LWC!
  • Support for Towny!
  • Support for WorldEdit!
  • Support for WorldGuard!
  • Simple Permissions!
  • Easy-to-remember Commands!
  • Signs can be placed on shelves!
  • Enable/disable certain shelves, all shelves with the same name, or Enable/Disable all shelves by default!
  • Multiple players can access the same shelf at the same time!
  • Disable selling books/paper to villagers!
  • Allow books/maps/paper/etc to only be stored in shelves! (No chests!)
  • Shelves have ownership!! Ops are owners of every shelf.


Check out other videos by bizburns01 (Luigi_Vampa)!

Usage and FAQ

Click here to learn about the Config, Permissions, Commands, Economy, and read the FAQ!

Parlez-vous français?

Cliquez ici! (Merci, nefald!)

Last notes

Thanks to Deathmarine for his awesomeness and code samples he let me learn off of!

Thanks to all the awesome people who made videos about BookShelf!

Thanks to lvk and softvelvet for the donations!

Source Code (BitBucket):

You must login to post a comment. Don't have an account? Register to get one!

  • Avatar of SXRWahrheit SXRWahrheit Dec 19, 2014 at 02:56 UTC - 0 likes

    @MitchTalmadge: Go

    No problem, looking forward to it!
    I run and our Minecraft server at - feel free to visit.

  • Avatar of MitchTalmadge MitchTalmadge Dec 19, 2014 at 02:32 UTC - 0 likes

    @SXRWahrheit: Go

    Sorry for the delay, I got disgusted with my code while trying to fix your problem and decided to rewrite a lot of BookShelf. I can't believe how well this plugin works for how dangerously unstable a lot of its code is :P

    3.8 will include a huge performance and stability boost because of the amount of inefficient code being cut out. A ton of un-needed SQLite queries are being removed, which will contribute to the performance boost.

    I'll let you know when I have a snapshot for you to test.

    Author of BookShelf - Store books, maps, and more into those once useless bookshelves - just like chests!

  • Avatar of MitchTalmadge MitchTalmadge Dec 17, 2014 at 05:05 UTC - 0 likes

    @SXRWahrheit: Go

    No :(

    But that's what makes programming fun!! It's always a challenge, and creating your own solution that works is really rewarding. :)

  • Avatar of SXRWahrheit SXRWahrheit Dec 17, 2014 at 04:39 UTC - 0 likes

    @MitchTalmadge: Go

    It can never be easy, can it? :P

  • Avatar of MitchTalmadge MitchTalmadge Dec 17, 2014 at 03:32 UTC - 0 likes

    @SXRWahrheit: Go

    SQLite doesn't allow asynchronous queries or commits and the SQLite portion is what takes the most time, so although you are correct and that would make a difference, it wouldn't help as much as the method I described below. I appreciate the feedback!

  • Avatar of SXRWahrheit SXRWahrheit Dec 17, 2014 at 03:29 UTC - 0 likes

    @MitchTalmadge: Go

    Cool, sounds good. You could also just process it asynchronously.

  • Avatar of MitchTalmadge MitchTalmadge Dec 17, 2014 at 03:13 UTC - 0 likes

    @SXRWahrheit: Go

    I am working on a solution to this issue, but it may take a day or two to get it working. :/ My idea is basically to store all the shelves to be deleted by location inside a list, then every second or so, delete all the shelves which are in that list all at the same time (which will drastically improve performance). If a shelf is placed back down within the second (or however long I set the frequency to) that the shelves are still queued to be deleted, its location will be checked among those in the list, and if it's in the list, it will be removed from the list so that its contents will remain.

    It's a simple idea but it will require some reworking of a bit of stuff, which is what will take time. I'll try and get a jar out to you as soon as possible for you to test. Thanks for using BookShelf!!

    Last edited Dec 17, 2014 by MitchTalmadge
  • Avatar of SXRWahrheit SXRWahrheit Dec 16, 2014 at 21:58 UTC - 0 likes

    @MitchTalmadge: Go

    I think only when nuking them, but my denizen script runs all at once (I can show you if you want to come by the server... it's quite neat).

    I'm pasting a big blank area to nuke the existing blocks before running a command that then generates new ones.

  • Avatar of MitchTalmadge MitchTalmadge Dec 16, 2014 at 21:57 UTC - 0 likes

    Sorry for the late replies everyone, I've been at school all day and haven't had a chance to hop on a computer.

    @luigi_vampa: Go

    It's really odd that you wouldn't be able to access the shelves, but even more odd that it suddenly started working again. I am going to look into the code and see if there is something that could have caused this, because generally when a problem goes away without you doing anything, it will probably come back. I'll let you know if I find anything! Thanks for all the detailed info!

    @Hmmcrunchy: Go

    Can you post the error logs either in the comments or on a new ticket using the ticket tracker? To me it sounds like an outdated LWC plugin, but without the error logs I can't be sure what the problem is. LWC has always worked for me, though.

    @SXRWahrheit: Go

    The error tells me that BookShelf ran out of memory while trying to update the database. I think I have an idea of why this is (beginner me sucked at programming efficiently). Does this only happen when deleting the shelves, or does it happen when creating them too? I will do my best to fix this.

    Thanks for all the comments guys! It really helps!

    Last edited Dec 16, 2014 by MitchTalmadge
  • Avatar of SXRWahrheit SXRWahrheit Dec 16, 2014 at 21:41 UTC - 0 likes

    Bookshelf freaks out when I generate mazes made of books and/or delete them with WorldEdit. Is there a way to avoid this? Lots of this in my logs:

    [21:40:04 WARN]: java.sql.SQLException: [SQLITE_NOMEM] A malloc() failed (out of memory)


Date created
Aug 07, 2012
Last update
Dec 15, 2014
Development stage
GNU General Public License version 2 (GPLv2)
Curse link
Recent files