Stables
What does it do?
Stables is a plugin that assists with Horse ownership, protection, and other horse related things. Vanilla has no ownership or tracking of horses, only if it has been broken or not. Stables changes this behavior.
Important MC1.11 Notes!
This new version (1.9.11) MAY NOT WORK WITH OLDER MC VERSIONS! It has ONLY been tested with MC 1.11!
MC 1.11 changed a lot with horses. As of Stables v1.9.11, some changes must be made in order to accommodate Llamas, Donkeys, Mules, Zombie horses and Skeleton Horses. In your config.yml, In the "animals" section, you MUST add these to the "allowed" list. Anything NOT in the allowed list will NOT be covered by Stables! (example: allowed: HORSE, ZOMBIE_HORSE, SKELETON_HORSE, LLAMA, DONKEY)
Again, as far as 1.11 is concerned Mules, Donkeys, Zombie/Skeleton horses are NOT Horses, and must be entered SEPARATELY into the config!
As of right this moment, Llama carpet does NOT save. Testing of this version has been VERY limited. Please report any and all bugs via tickets - Be as specific in your reports as possible!
Another note: v1.9.11 will create a new table in your database for stored/stabled horses, and copy all the values over, converting what needs to be converted. For safety purposes, the old table will NOT be removed. It will just no longer be used. I would suggest NOT deleting it yourself for a bit, in case you need to restore a previous version.
All localization messages are still 'Horse' and 'Steed' specific. New default messages will be added in time. As always, you can edit them yourself in the 'language.yml' file.
Requirements
- To use COST based virtual stables, Vault is required. Free storage does not require any additional plugins.
Current Features
- Protect Horses from configurable outside damages, including PVP, Environmental (falling/lava) and Monsters
- Adds recipes for Horse Armor (Barding), Name Tags and Saddles
- Now has customizable recipes for these items!
- Adds 'ownership' to horses so others cannot steal them - Use a name tag on a horse to claim it!
- Store horses in virtual stables, and recover them!
- Abilities for Admin/Staff to Remove Ownership
- Sets a max amount of horses one player can own
- Anyone with the stables.admin permission can use horses without permission
- Allow a friend to ride a claimed horse
- Lure a horse from the wild using an item (defaults Golden Carrot - Other suggestions would be Emeralds, Golden Apples)
- Horse Spawning, including ZOMBIE and SKELETON horses!
- Teleport, Summon and Locate your claimed Horses!
- Allows staff to rename horses without changing ownership
- UUID storage for databases -
- Uses connections to 'api.mojang.com' and 'sessionserver.mojang.com' if UUID cannot be resolved on the server.
What's in store for new releases?
- Horse Trading
- (NPC) Races
- Horse purchasing (from NPC)
Permissions & Commands
Please see the Permissions & Config Page here.
How does it work?
Name a horse to claim it as your own. Hit it (as the owner) with a new Name Tag (un-renamed) to free it!
- To name a horse, you have to get a NAME TAG. Use the NAME TAG in an ANVIL and change it's name to what you want the horse to be called. Then USE (Right Click) The Horse with the NAMED NAME TAG to name it. This is a VANILLA MINECRAFT feature - it is not included with Stables. This action, however, is what will claim a horse with the Stables plugin.
- You can also set the config to 'AutoOwn = true' - This will automatically claim a horse as soon as it is tamed!
Stables also prevents horses from being killed by players, mobs, environmental, or any combination of these. All options are 100% toggle-able through the config.
Virtual Stables
This feature can be disabled by the admins by setting the 'allowCommand' config option to false, and then just not creating any stable signs.
To create a stable, simply place a sign with [stables] as the first line. Stables will take over from there. If 'allowCommand' is disabled, you can ONLY use the Virtual Stables feature with a sign. Punch the sign, or type /stables store to store a horse. Please note: Storage does *NOT* save chests right now, nor will it save saddles. This is a known bug.
- Please note: The stables does *NOT* save Horse Speed. This is a Minecraft/Bukkit shortfall, and will be addressed as soon as there is a way to do so.
The Config
Please see the Permissions & Config Page here.
Recipes
Stables makes several items craftable - specifically Saddles, Barding (Horse Armor) and Name Tags.
Setting the config option for hard mode recipes will change all ingots/bars to blocks instead.
Localization & Custom Messages
Upon the first run, a file called 'language.yml' will be generated. This will have all the phrases, in English. You may change the phrases to whatever you'd like, or any language you'd like.
@bonnydust Most of the first portion is in the config page, found here: Configuration & Permissions
Allowed animals is an in-progress feature that is not yet available.
Deconstruct allows you to deconstruct/disassemble/disenchant horse armor and saddles to receive leather, iron etc from the item. At default settings, it requires you to right click a Gold Block with the item in your hand.
Full Repair is something that is not yet in, nor might not ever be. Random REward set to true makes the amount you get back randomized for the item - ie: Armor takes 6 of an item - if it is set to FALSE you'd get all 6 (diamonds, iron, etc). If it is set to TRUE, you'll get a random number between 1 and 6. Fail percent is how often the person fails, and the item is consumed with no recovery of materials.
What does this bit do in the config?
Also this:
@NicoWaves
I'll have to look into it - That's not something I use specifically, and nobody else has mentioned any issues with it. Not sure if it's a 1.9 issue causing it, or if something broke somewhere down the line of versions.
Regarding /stables find - If "horses.AllowFind" is set to true, it does not require any permissions. If it is set to false, it requires the player to have the "stables.find" perm. If you've verified that allow Find is set to true, open a ticket regarding this, as it'll need to be looked into further.
Hey, that's a great plugin you've made there! However, there seems to be a bug with protection against environmental damage, because whatever I set the settings to, the horse is still damaged by drowning, lava, fire etc. I'm on Spigot 1.9 with Stables 1.9.10.2. BlockAll is enabled. Is there a permission I need or something like that? Any idea what the problem could be?
EDIT: Also, it seems like I need the stables.find permission even though I have enabled AllowFind. Shouldn't I be able to execute the command without the permission?
@raum
I have access to a MySQL server, just haven't used it. Is there any way I can convert the data to MySQL? Don't want to risk losing all the data, but I suppose having it lost is better than no plugin at all.
I also have a bug that I am not sure what's causing it with Stables. Whenever I do a command improperly, such as /stables summon without an id/name/I don't know, it just says: "Syntax is:"
It's confusing to learn how to use the command when it says this.
Edit: I see there is a /stables convert command. It says converts from YML to SQL? Not sure if that's really what it is, or SQLite to MySQL? Some more info on this would be nice
@dddylan98
This particular issue doesn't seem to be effecting many, if any others - The only thing I could think is that there's some sort of issue with your SQL ... As I mentioned, the event for 'onPlayerJoin' is LITERALLY nothing more than an SQL query to keep track of UUIDs. (As an example, here's a small section of timings from my server: http:i.imgur.com/nrM6Mo0.png - You can see several hundred calls in that time, with minimal load on the server.)
Perhaps try one of the free mySQL hosts, such as http://www.freemysqlhosting.net/ for a bit to see if that changes anything? I really am not sure what else to suggest.
Had to uninstall Stables today due to it lagging my server to death. It used almost half the resources and was making the server unplayable. Let me know if there's anything I can change or something I'm doing wrong.
With stables: http://timings.aikar.co/?url=15517456 Without stables: http://timings.aikar.co/?url=15518148
@raum
That's the weird thing about it. Sometimes over longer periods of timings reports (10-12 hours worth), it won't be as bad, but still one of the top few users. It's quite odd though since we're not using MySQL, so that's out of the question for the host throttling it.
I have noticed (and it could be a different plugin) a lag spike occasionally whenever someone joins the server. After seeing the timings for this one and the past ones it's really quite weird. Here's another one of our timings reports. It's a bit older and when our server was less optimized, but it still has stables using quite a bit. I don't fully understand timings but I can see that it's using in that one 1.23% of the resources over time. It's just all very odd since I never used to have this issue with 1.8
http://timings.aikar.co/?url=15431269 Edit: This is a recent one from the past few hours since I first posted this comment: http://timings.aikar.co/?url=15503164
@dddylan98
I'm pretty sure that those stats are reporting incorrectly, as your server would lag to oblivion if anything was actually using 1.1k% of your tick total (not to mention, I think that's fairly impossible :P) - it also shows less than 100 calls to that event (0.0k). Did you start the timings as soon as the server started, as a lot of people were logging on? All of your plugins using onPlayerJoin look to be using quite a bit - if you're using mySQL, it could be that your host is throttling sql queries, or that the host machine's mysql process itself is lagging - there's very little reason that a single query - even several hundred times, should take 593ms - and as mentioned above, it was called less than 100 times.
In addition, the only thing that fires with the 'onPlayerLogin' event is a single SQL query (two if you're using sqlite) to store uuids of players so that we're not getting bogged down with Mojang API calls to get them. There's absolutely nothing that can be optimized about it.
The other portion, onEntityDamage - while that's currently being rewritten (along with everything else), there's not a whole lot to optimize that at this time either - It's doing as little as possible to get as much done as possible.
Hi,
Ever since the 1.9 update with the new skeleton horses being spawned, I've seen the resource usage for this plugin go crazy, assuming the cause is the skeleton horses being spawned left and right. At the bottom is my timings reports for the past 20 minutes. Although it's not a very long timings report over a period of time it's still one of the top few resource-using plugins (as seen by the timings report).
The server is on a shared host with 12GB of RAM, and although it isn't lagging the server, I feel you may be able to improve the performance. I'm using the most recent version of Spigot from BuildTools.jar - thank you for your time and feedback.
Dylan
http://timings.aikar.co/?url=15491047
@WhosHenry
This came up this time - http://pastebin.com/iiwynQWD
@raum
Nothing else listed, I'll keep joining, will see if anything changes.
@raum
The server is on a bungeecord network so yes the server in the background would be set in offline mode but the network would be in online mode which means the UUIDs are valid online UUIDS. I AM USING SQLITE and not SQL
@thefluffywalrus
Are you using an offline server, by chance? (The setting, not like .. locally)
There's literally no way that line could cause errors (unless your DB info in the config is wrong), as it's just logging names & UUIDs so that we don't have to query the Mojang servers since they like to cut off too many API calls.
If you're running an online server, try double checking your SQL details in the config - I just double checked with a fully reset server with nothing but Vault, Essentials and Stables and everything worked as intended.
While it SHOULDN'T cause any issues, also make sure you're using the most up-to-date build of Spigot/Bukkit.
If these things don't help, go ahead and open an actual ticket with all the relevant info and I can try to look into it further.
http://pastebin.com/XeNxpe2j getting an error on player joins i have the full paste of the error for you
@WhosHenry
Is there more to that error log? While that states that it's happening in Stables, there's no other reference to Stables in that at all - Everything listed is coming directly from the Spigot jar.
I get this error on player join in 1.9 http://pastebin.com/sPwJv2wY
Using 1.9.10
@Sparclen
Things have been crazy irl for us, unfortunately (my kid was in a school bus accident :P) - 1.9 doesn't actually effect Stables at all, and will still run as intended with 1.7, 1.8 or 1.9 at this point.
There was a new file that went in, but was never approved for whatever reason, so it never went 'live'.
I'll re-compile and re-upload a version compiled against 1.9 that has the previously mentioned permission fixes in it in a few minutes. If you're subscribed to the file changes, you might see it before it's approved, but Bukkit can't be held responsible yadda yadda standard disclaimer.
@raum
Just checking in to see if you're still working on an update. The ETA in your last post not met. I'm not going to push you for a 1.9 release, I'm simply requesting information on how things stand, so I can determine whether I should start looking for alternatives.
Thank you!
A few years back I was rebuilding my server to open V2 and tested numerous horse plugins. Stables by far stood out as the best on all fronts. It is the only horse plugin I found that would successfully teleport horses without weirdness. To find and tp to the horse is awesome. The recipes are added bonuses. When horses were first added there were many horse plugins that popped up but unfortunately most were fly-by-night as the devs quickly lost interest. Here, years after 1.6's release, is Stables with the devs still active and interested. Many thanks to Raum and Anderwyn for making horses awesome in Minecraft.