FrameProtect - Logo

Item frames, paintings and armor stands are, for simplicity, called objects on this page.

Protect your item frames, paintings and armor stands! Very simple to use.

Your server is not running 1.8 or newer? Info page for older versions of FrameProtect


  • Protect item frames, paintings and armor stands
  • Per player protections
  • Respawn disappeared protected objects
  • Save protected objects from natural destruction (e.g. paintings hanging in air)
  • Save protected objects from destruction by mobs (e.g. creepers, skeletons)
  • Save protected objects from destruction by piston movement
  • MySQL support
  • Permissions support
  • Customizable messages (comes with several predefined languages)
  • Many configuration options


> Make sure that your server is running at least Minecraft 1.8.
> Put FrameProtect.jar into your plugins folder and restart the server.

Update from 2.5 or lower to 2.6

If you're already using FrameProtect, I recommend to use my FrameProtectDatabaseUpdater to update your protections and settings.
This will convert all your data (except the language) to the new format.

It depends on wheter you have set useMySQL to true or not if the updater will convert the MySQL database or the flatfile. It's also possible to convert both, you just have to edit the option in the already updated config.yml and restart the server again.

The update does not delete or overwrite the original data.
> old config.yml gets renamed to config.old
> MySQL data gets copied to new tables
> flatfile data gets copied to a new SQLite database.


  1. Shut down your server.
  2. Remove the old FrameProtect.jar from your plugins folder.
  3. Put FrameProtectDatabaseUpdater.jar into the plugins folder and start the server.
  4. Wait until your server is started. In the console you should find the message [FrameProtectDatabaseUpdater] Update completed!. If you can't find it, something went wrong (the updater will disable itself after finishing, don't be irritated).
  5. Shut down the server.
  6. Remove FrameProtectDatabaseUpdater.jar from your plugins folder.
  7. Put the new FrameProtect.jar into your plugins folder and start the server.
  8. Done!

How It Works

Protect & Unprotect

Protect or unprotect an object.

Simply shift left click it.
The permission frameProtect.protect is needed.
Notice: is still needed if you want your players to be able to place objects.

Protected objects will be saved to the database. No other players (except admins) will be able to destroy them or steal your items. If, caused by any issue, some objects disappear unexpected, FrameProtect will, in most cases, be able to respawn them.


Autoprotection will protect each object that you place.

Notice: Armor stand autoprotection doesn't work at the moment.

Place an object.
The permission frameProtect.autoprotect is needed.
Without giving your players frameProtect.protect, autoprotection will still work and they will never be able to unprotect their objects.

It may be helpful if you don't want to teach all your new players in protecting objects.
Also, without the frameProtect.protect permission, you will hardly ever have problems with players fighting for an object.

Object Info

Get the coordinates and the owner of an object.

Simply shift right click it.
The permission is needed.

I don't know :C

Set Owner

Change the owner of an object.

Type /fp owner <name> into the chat and then shift click an object.
The permission frameProtect.admin is needed.

Maybe it will be useful for you at an undefined point of the history of your server.

Admin Stuff

Remove protections of other people
Take items from protected objects
Reload the plugin (config.yml, protections and language)

Reload: /fp reload
The permission frameProtect.admin is needed.

Because admins should be able to administer.


PermissionFunction*place & destroy objects
frameProtect.protect.*protect & unprotect*object info
frameProtect.adminset owner
frameProtect.adminadmin stuff

Instead of .*, which means it's for all objects, you can put .itemframe, .painting or .armorstand

For example:
You want to allow your players to protect paintings but not item frames and armor stands.
The permission you have to give to this group would be: frameProtect.protect.painting


You can find all configuration options including description and default value in the config.yml file.


  • Fix some errors in the updater.
  • Add lcoal buffering for MySql to reduce queries.
  • Add debug commands (find near protections, remove broken protections, etc.)
  • Try to fix object respawning.
  • Add autprotection for armor stands.
  • Readd some commands and add the option to disable direct protecting/deprotecting by clicking.
  • Get the new version to work with 1.7.10.
  • Make FrameProtect able to recognize worlds when they were renamed (use UUIDs).
  • Make the set owner function work for normal players to transfer their protections to others.
  • Any requests?


FrameProtect supports custom languages.

The plugin contains several language files:

en_USEnglishEnglishby Dragon252525
de_DEGermanDeutschby Dragon252525
fr_FRFrenchfrançaisby Dragon252525
eu_ESBasqueEuskaraby galaipa
cs_CZCzechčeštinaby Shadowhacker

Translations that you can download additionally (not yet coming with the plugin):

ru_RURussianрусскийby Aqelius

Creating a new language file

Download example: en_US

%s, %1$s, %2$s and %3$s are placeholders. Please do not remove them.

If your language needs seperate messages for the different objects:

  destroyed: "Privater %s zerstört."
  destroyed_painting: "Privates %s zerstört."

This supports _itemframe, _painting and _armorstand.
If there are only two different messages, you can add the suffix to the one that's only needed once and leave the other like it is.

Sometimes you will see some strange symbols ingame, this is caused by a wrong file encoding, which you can change with most text editors.

If you want to share your work, I would be very happy if you send me a PM and post your translation on pastebin or somewhere else ;)

Known Bugs

  • AutoProtection doesn't work for armor stands.
  • The updater does sometimes not convert all/any protections.
  • Respawning doesn't work always.


FrameProtect sends statistics about the usage to You can disable this by setting the option opt-out in the YourServerFolder/plugins/PluginMetrics/config.yml file to true.
FrameProtect - MCStats

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

  • Avatar of Mr_Simba Mr_Simba Apr 23, 2015 at 20:02 UTC - 0 likes

    @AdamTragedy: Go

    It's been a major problem everyone's been having. It seems vaguely related to respawn disappeared, protections in general are buggy in this new version. Dragon's working on it.

    No nudity, even really good nudity!

  • Avatar of AdamTragedy AdamTragedy Apr 23, 2015 at 01:59 UTC - 0 likes

    BUMP for my question.

  • Avatar of AdamTragedy AdamTragedy Apr 14, 2015 at 13:22 UTC - 0 likes

    Looks like protections EXPIRE after about 3 hours. Tested multiple times.

    1. Placed item frame 2. Protected item frame 3. Came back 3-4 hours later to check... 4. Frame was unprotected

    Tested with multiple players of different ranks. Running 1.8.1 with most recent updated version of IF.

  • Avatar of YepImRobbie YepImRobbie Apr 11, 2015 at 13:20 UTC - 0 likes

    Can't remove the [FrameProtect] prefix in the language yml.

  • Avatar of cuddyier cuddyier Apr 08, 2015 at 19:56 UTC - 0 likes

    Players are able to shoot arrows at item frames to get the items out, how do I stop this? Running version 2.6.

  • Avatar of StillSwingin StillSwingin Apr 08, 2015 at 17:39 UTC - 0 likes

    I'm running online mode true.

    Also each time I reload or reboot the server I get this error:

    I tried disabling respawnDisappeared, but it kept showing.

    It's a shame it had worked until 2.6, any way of updating to 1.8 meanwhile it doesn't get solved?


  • Avatar of Dragon252525 Dragon252525 Apr 08, 2015 at 11:49 UTC - 0 likes

    @dedina3: Go

    Ok thanks. I'm happy that at least the UUIDs of players seem to be stable.

    Does anyone else than @MarioAlessandroDevs: Go have problems with the constantly open MySQL connection? I realized that to add buffering for this does not realy solve the problem of too many queries (maybe there are ways to do it better but I'm not that familiar to MySQL in Java). Also it's a lot of work and I'd have to modify the existing database to get it work correctly.

    I recommend to use SQLite instead if MySQL's not working for you.


  • Avatar of dedina3 dedina3 Apr 08, 2015 at 08:24 UTC - 0 likes


    I've been editing some config for another plugin and I had to do server-restart. After the restart one player told me that his clocks (in item frame) got duplicated. Few minutes later, he said that also his paintings got duplicated.

    If it's relevant, i'm running online mode - false, UUIDS of players does not change.

  • Avatar of Dragon252525 Dragon252525 Apr 08, 2015 at 01:04 UTC - 0 likes

    @Mr_Simba: Go

    I don't know why, but on my test servers, the UUIDs were still the same after weeks and dozens of reboots :/

    At this time, the only does-this-protection-exist check is the comparison of the UUIDs. I think I'll replace that with specifc checks. For example "does the picture at this specific location display the same image as stored in the database". It's also possible to check if the items in item frames and armor stands are still the same. So I think, it should work good enough for now.

    Why they respawned the wrong way arround or on the back of the block? I have no clue... shouldn't happen. Hope I'll find a solution for this.

    Thanks for this detailed answer. It really helps me ;)

  • Avatar of Mr_Simba Mr_Simba Apr 08, 2015 at 00:35 UTC - 0 likes

    @Dragon252525: Go

    It wouldn't surprise me if entity UUIDs change over time, the server may redistribute them over time as the entities are loaded and unloaded, as entity UUIDs generally don't need to be permanent. I think the positional check thing you proposed sounds like a good solution.

    Also (if this makes any sense in regards to the plugin) make the position check less specific for respawnDisappeared. Item frames keep duplicating because it thinks they've disappeared even though they're still there, which I assume is either because it's checking a very very specific position for where the item frame was previously, or because whatever thing checks for the item frames is checking the wrong block (item frames tend to duplicate onto adjacent walls or onto the back of chests they're placed on).

    For now, I wouldn't worry about having support for multiple entities in the same location. As you said, that's fairly uncommon. As for #2 (objects being moved while the plugin is disabled), I don't think it's very possible to expect you to account for that.

    My server is in online mode. Player UUIDs will never change, so that wouldn't be your problem. I'm fairly positive it's related to the respawnDisappeared setting. When I had it on, item frames duplicated. When I have it off, protections disappear (meaning it doesn't find the entity there, but instead of spawning a new duplicate one, it just deletes the protection).

    Last edited Apr 08, 2015 by Mr_Simba


Date created
Nov 04, 2012
Last update
Feb 05, 2015
Development stage
  • deDE
  • enUS
  • frFR
  • ruRU
All Rights Reserved
Curse link
Recent files