FrameProtect

FrameProtect - Logo

FrameProtect
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


Features

  • 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


Installation

> 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.

Updating:

  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

What?
Protect or unprotect an object.

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

Why?
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

What?
Autoprotection will protect each object that you place.

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

How?
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.

Why?
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

What?
Get the coordinates and the owner of an object.

How?
Simply shift right click it.
The permission frameProtect.info is needed.

Why?
I don't know :C


Set Owner

What?
Change the owner of an object.

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

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


Admin Stuff

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

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

Why?
Because admins should be able to administer.


Permissions

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

Notice:
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


Configuration

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


Todo

  • 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?


Language

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.


Metrics

FrameProtect sends statistics about the usage to mcstats.org. 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 Dragon252525 Dragon252525 Mar 23, 2015 at 17:51 UTC - 0 likes

    @Marec54: Go

    Nice idea ;) I'll add something like this.

    BFAK:Dragon252525,90599402,6ad922298e21396e238e5c647e498642e3f8467a6b1180b83fe49ffb0f2b9350

  • Avatar of Marec54 Marec54 Mar 23, 2015 at 10:03 UTC - 0 likes

    hello, would it be possible that you add a "cleanup" command?

    I mean just be able to take away all entries that arent used anymore and that where delete either by deleting a world or worldedit?

  • Avatar of Dragon252525 Dragon252525 Mar 18, 2015 at 18:44 UTC - 1 like

    Hello to all!

    I've collected your bug reports and will now try to fix them.

    Sadly, I don't have a big server to test the plugin on, so I would be very happy if some of you could test my dev builds (PM me). I don't want to publish such a buggy version again :c

  • Avatar of andris15 andris15 Mar 09, 2015 at 14:39 UTC - 0 likes

    @Dragon252525: Go

    Protection works on world. No lost protections server restart.

    Protection works on plotworld. Lost protections server restart.

  • Avatar of palindrome96 palindrome96 Mar 08, 2015 at 10:09 UTC - 0 likes

    Je rencontre toujours le même problème avec la version 2.6 sous spigot 1.8. Toutes les protections cadres, tableaux, portes armures sont éffacées à chaques redémmarage . Je n'ai pas eu le choix que de remettre la version 2.5. Acunes erreurs dans les logs.

  • Avatar of externo6 externo6 Mar 07, 2015 at 16:13 UTC - 0 likes

    Disabling respawnDisappeared deletes all database entrys. Can this be fixed?

    Plus respawnDisappeared doesn't really work too well anyway. Getting spammed on every restart with 100+ lines of it unable to respawn itemframes

  • Avatar of Formula350 Formula350 Mar 07, 2015 at 15:24 UTC - 0 likes

    The conversion took way longer than I anticipated, though also when we went to 1.8 it seems that "phantom UUIDs" have been added and so there's no way we've had even 1/3rd of this amount of people pass through my server. Nevertheless, here is what it looked like on the test server, which looked fine...

    [16:39:36] [Server thread/INFO]: [FrameProtectDatabaseUpdater] Enabling FrameProtectDatabaseUpdater v0.3
    [16:39:36] [Server thread/INFO]: [FrameProtectDatabaseUpdater] *************************
    [16:39:36] [Server thread/INFO]: [FrameProtectDatabaseUpdater] Starting update!
    [16:39:36] [Server thread/INFO]: [FrameProtectDatabaseUpdater] *************************
    [16:39:36] [Server thread/INFO]: [FrameProtectDatabaseUpdater] Converting config.yml...
    [16:39:36] [Server thread/INFO]: [FrameProtectDatabaseUpdater] Loading old data...
    [16:39:36] [Server thread/INFO]: [FrameProtectDatabaseUpdater] Registering 26 players...
    [16:39:38] [Server thread/INFO]: [FrameProtectDatabaseUpdater] Converting 3229 protections...
    [16:40:22] [Server thread/INFO]: [FrameProtectDatabaseUpdater] *************************
    [16:40:22] [Server thread/INFO]: [FrameProtectDatabaseUpdater] Update completed!
    [16:40:22] [Server thread/INFO]: [FrameProtectDatabaseUpdater] *************************
    [16:40:22] [Server thread/INFO]: [FrameProtectDatabaseUpdater] FrameProtectDatabaseUpdater will now disable itself.
    [16:40:22] [Server thread/INFO]: [FrameProtectDatabaseUpdater] Disabling FrameProtectDatabaseUpdater v0.3
    

    On my main server though...

    [07:48:22] [Server thread/INFO]: [FrameProtectDatabaseUpdater] Enabling FrameProtectDatabaseUpdater v0.3
    [07:48:22] [Server thread/INFO]: [FrameProtectDatabaseUpdater] *************************
    [07:48:22] [Server thread/INFO]: [FrameProtectDatabaseUpdater] Starting update!
    [07:48:22] [Server thread/INFO]: [FrameProtectDatabaseUpdater] *************************
    [07:48:22] [Server thread/INFO]: [FrameProtectDatabaseUpdater] Converting config.yml...
    [07:48:22] [Server thread/INFO]: [FrameProtectDatabaseUpdater] Loading old data...
    [07:48:24] [Server thread/INFO]: [FrameProtectDatabaseUpdater] Registering 44273 players...
    

    I had lots of people attempting to connect during the conversion and I don't know if this is the cause, or something else. We generally do not have any players who have protected frames on our server so I wasn't thinking that the database would have needed to convert all "44,273 players" (I've generally estimated we've had roughly 10-12K pass through). Nevertheless, this error came up a handful of times during start (it was converting from a 144kb flatfile):

    [08:04:06] [Server thread/WARN]: java.sql.SQLException: near "s": syntax error
    [08:04:06] [Server thread/WARN]: 	at org.sqlite.NativeDB.throwex(NativeDB.java:210)
    [08:04:06] [Server thread/WARN]: 	at org.sqlite.NativeDB._exec(Native Method)
    [08:04:06] [Server thread/WARN]: 	at org.sqlite.Stmt.executeUpdate(Stmt.java:152)
    [08:04:06] [Server thread/WARN]: 	at ch.dragon252525.frameprotect.updater.newFP.SQLite.insertOrUpdatePlayer(SQLite.java:113)
    [08:04:06] [Server thread/WARN]: 	at ch.dragon252525.frameprotect.updater.newFP.DataManager.savePlayer(DataManager.java:124)
    [08:04:06] [Server thread/WARN]: 	at ch.dragon252525.frameprotect.updater.newFP.PlayerManager.registerPlayer(PlayerManager.java:26)
    [08:04:06] [Server thread/WARN]: 	at ch.dragon252525.frameprotect.updater.FrameProtect.insertPlayers(FrameProtect.java:122)
    [08:04:06] [Server thread/WARN]: 	at ch.dragon252525.frameprotect.updater.FrameProtect.onEnable(FrameProtect.java:90)
    [08:04:06] [Server thread/WARN]: 	at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:321)
    [08:04:06] [Server thread/WARN]: 	at org.bukkit.plugin.java.JavaPluginLoader.enablePlugin(JavaPluginLoader.java:327)
    [08:04:06] [Server thread/WARN]: 	at org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManager.java:404)
    [08:04:06] [Server thread/WARN]: 	at org.bukkit.craftbukkit.v1_8_R1.CraftServer.loadPlugin(CraftServer.java:341)
    [08:04:06] [Server thread/WARN]: 	at org.bukkit.craftbukkit.v1_8_R1.CraftServer.enablePlugins(CraftServer.java:313)
    [08:04:06] [Server thread/WARN]: 	at net.minecraft.server.v1_8_R1.MinecraftServer.q(MinecraftServer.java:394)
    [08:04:06] [Server thread/WARN]: 	at net.minecraft.server.v1_8_R1.MinecraftServer.k(MinecraftServer.java:362)
    [08:04:06] [Server thread/WARN]: 	at net.minecraft.server.v1_8_R1.MinecraftServer.a(MinecraftServer.java:317)
    [08:04:06] [Server thread/WARN]: 	at net.minecraft.server.v1_8_R1.DedicatedServer.init(DedicatedServer.java:190)
    [08:04:06] [Server thread/WARN]: 	at net.minecraft.server.v1_8_R1.MinecraftServer.run(MinecraftServer.java:484)
    [08:04:06] [Server thread/WARN]: 	at java.lang.Thread.run(Thread.java:745)
    

    There was no "Update Completed!" either, just...

    [09:15:15] [Server thread/INFO]: Server permissions file permissions.yml is empty, ignoring it
    [09:15:15] [Server thread/INFO]: Done (5221.482s)! For help, type "help" or "?"
    [09:15:15] [Server thread/INFO]: Starting GS4 status listener
    [09:15:15] [Query Listener #1/INFO]: Query running on 0.0.0.0:25565
    

    So my question is, if there are problems after I restart the server, is there any problem with converting it again? Also, can I copy the flatfile to the test server and convert it there, where I don't have 35,000 "Phantom UUIDs"?

    Thanks!

  • Avatar of Mr_Simba Mr_Simba Mar 06, 2015 at 21:55 UTC - 0 likes

    I disabled the respawnDisappeared setting in the config because it seemed to be what was causing item frames to duplicate on nearby walls, but now for some reason players' armor stands keep losing their protections every time the server restarts. Is there going to be a fix soon for the item frame duplication?

    Thanks you!

    No nudity, even really good nudity!

  • Avatar of rustyshakelford2 rustyshakelford2 Mar 04, 2015 at 16:31 UTC - 0 likes

    2.6 is working nicely and we had no issues with the database update. Thanks so much!

  • Avatar of MarioAlessandroDevs MarioAlessandroDevs Mar 02, 2015 at 11:37 UTC - 0 likes

    @Dragon252525: Go

    Thank you, I really appreciate you helping out and adding a local buffering to reduce the queries!

    Cannot wait for that update! Have a great day.

Facts

Date created
Nov 04, 2012
Categories
Last update
Feb 05, 2015
Development stage
Release
Language
  • deDE
  • enUS
  • frFR
License
All Rights Reserved
Curse link
FrameProtect
Downloads
73,589
Recent files

Authors