HomeSpawnPlus
HomeSpawnPlus (HSP) / SpawnControl: the most advanced Home/Spawn plugin for Bukkit. HSP has flexible events and strategies that you can customize for your unique needs. If you just want dead-simple home/spawn management, HSP can do that too, but you might find some other plugin easier to setup or understand. If you want full control and maximum flexibility to do whatever YOU want and not be limited by just basic /home and /spawn functionality, then HSP might be for you.
HSP's events and strategies, custom commands and integrations with plugins like WorldGuard and Multiverse allow you to completely control every aspect of spawns and homes, so that unique edge or setup you want, chances are good that HSP can do it for you.
Please read the FAQ before posting questions or tickets (especially Essentials users). Also there are Examples.
Versions
- Official releases are on the Files tab of this page
- Development builds of this project can be acquired at the provided continuous integration server. These builds have not been approved by the BukkitDev staff. Use them at your own risk. Jenkins
HomeSpawnPlus has these Features:
- Multi-world homes (one-home per world, multiple homes per world or even just one global home, your choice)
- Specific control as to what happens on events such as player login, player death, typing /spawn or /home commands using strategies. Should the user always stay on the same world? Spawn at the nearest of multiple spawns (ie. graveyard concept)? Maybe they always go to a specific group spawn on that world (for PvP factions, perhaps)? Your choice.
- Ability to set a one-time new player spawn point
- Cooldowns and warmups Can be set to cancel on movement or damage. Advanced details here.
- Economy support (via Vault) to optionally charge players for commands
- Home limits, definable per-group or per-permission. More documentation.
- Configurable per-world or per-permission for just about every option (events, cooldowns, warmups, costs, homeLimits)
- Define your own custom commands Documentation here
- WorldGuard region-spawn support (allow people to spawn at WG region spawn when inside that WG region)
- Ability to visit homes other people have set, on any world (controlled by Permissions)
- Language localization Also you can customize any message in HSP. Details here.
- Home invites - documentation here
- Set homes by clicking on a bed: read bed-related options documentation.
- Dynmap integration built in, very configurable to meet your own needs
- Persistence choice: Sqlite (default), MySQL or YAML
- Standard YML config.yml: with live reloading in-game (/hsp rc)
- Import home data from other plugins (Essentials 2.9, CommandBook 2.1 and SpawnControl v0.8)
Installation:
- Download HomeSpawnPlus.jar and put it in your Bukkit plugins folder
- Startup Bukkit, HomeSpawnPlus will automatically put the default config.yml into plugins/HomeSpawnPlus/config.yml
- Configure config.yml to your liking, then either '/hsp rc' to live reload the config, or restart your server.
Additional info
This plugin was designed to work with Vault, WEPIF, PEX, Permissions 2.x/3.x, or any Superperms-compatible plugin. Please read more about permissions here.
Under the hood: How HSP works
Examples
Spawn strategy documentation
Advanced Cooldown and Warmup information
User Command Reference
Admin Command Reference
Permissions
Changelog
Source Code
Metrics plugin
This plugin utilises Hidendra's plugin metrics system, which means that the following information is collected and sent to mcstats.org:
A unique identifier The server's version of Java Whether the server is in offline or online mode The plugin's version The server's version The OS version/name and architecture The core count for the CPU The number of players online The Metrics version
Opting out of this service can be done by editing plugins/Plugin Metrics/config.yml and changing opt-out to true.
Have an issue? Got a new idea?
If you find a bug or have an enhancement request, please create a ticket so I don't lose track of the request or issue in a comment stream. If you have a basic question, feel free to post in the comments here or visit the forums on forums.bukkit.org.
Thanks to @Timberjaw for the awesome work on SpawnControl that gave me a great base to start from!
@Sparclen
While spawnNearest doesn't accept arguments, there is a spawnNearestWithPrefix strategy that was built for this use case. If you name all of your graveyards with a common prefix, you can use this to restrict spawnNearest like so:
I've been trying to implement a graveyard concept on my server with the on death: - spawnNearest strategy. This works.
However, I don't want players to be teleported into graveyards when they type /spawn, so I added a regular spawn to my world too.
Problem is, when a player dies and the regular spawn is closer than a graveyard, they'll spawn in the regular spawn instead of the graveyard.
Would it be possible to add some additional arguments to the -spawNearest strategy, for example I would like to do - spawnNearest:Graveyard01,Graveyard02,Graveyard03 to make the player spawn at the nearest of the listed spawnpoints and disregard other spawns.
These arguments already exist in the - spawnRandomNamed:name1,name2,name3 strategy so I believe it should be possible.
Many thanks!
First, apologies, life has been super busy and while I sometimes see email notifications for posts here, I have been too busy to come respond and have secretly been hoping other veteran HSP users would be able to help others out.
I don't have time even now to respond to all the issues, but I'll try to tackle a few of the latest ones here that I can answer quickly.
To @frizzbee30, MySQL is supported. There's docs on the site here somewhere, but it basically boils down to modifying your ebeans.properties to tell Bukkit's ebeans server to use MySQL instead of sqlite.
To keytastic: best bet is to run a backup (/hsp backup), then change your storage mechanism, restart, and do an /hsp restore. I recommend using SQLlite, you'll find the performance is much better. But if it's a small enough server (few hundred users say), YAML is more than sufficient. I recommend multiple YAML files.
@DarkRyuZ7: Hmm I recall seeing something similar, I thought it was an issue with one of the betas, though it may even have snuck into a release. I'd recommend the latest dev build from Jenkins and if you still get the issue there, please open a ticket. I'm probably long overdue for an update release from the dev builds to be published here on DBO.
@SanCarlo: it's certainly possible and since I already have integrations with Essentials, the work itself probably isn't that much. Unfortunately, I barely have time to respond to issues, least of all add and test new code. If I do find myself with free time in the future, this is certainly something I could add. Please open an enhancement ticket request so this doesn't get lost in the comments here.
My host recently stopped being able to maintain a database connection to save its life. Is there a way to convert a database back to flat files? Which do you recommend? One file or multiple files?
Just working on configuring and testing this (been playing around with it for a bit) ,it is perfect for what we want to achieve :) Any plans to allow external MySQL storage?
Using the newest Version of HSP, is causing an Error if i want to use YAML Storage....
[02:45:51] [Server thread/ERROR]: [HomeSpawnPlus] Caught exception loading plugin, shutting down com.andune.minecraft.hsp.shade.commonlib.FeatureNotImplemented at com.andune.minecraft.hsp.storage.yaml.PlayerDAOYaml.purgePlayer(PlayerDAOYaml.java:112) [HomeSpawnPlus.jar:2.0]
Known? Create Ticket?
Could you pls add a hook for the essentials "/back" command?
@bmlzootown
This is true, "d" is an alias for "delete" for the uber command "/home". While you can configure command aliases in HSP however you like, I don't believe I added any facility for changing the uber command mappings.
One option is simply to disable uberCommands, at which point "/home" will resort to 1.7-style home command (not an Uber Command) and then this problem wouldn't exist.
A player mentioned to me earlier that if you name a home "d" (/sethome d) and then attempt to go to it (/home d), the plugin acts as if the player tried to delete the default home. Here's a screenshot: http://prntscr.com/6r0j32 I didn't see anything mentioned in prior comments, so I thought I'd mention it.
I'm also having a problem, but with the /groupspawn <arg> command.
Since a while (can't recall how long) i can't visit other groupspawns (as long as i enter an argument), instead it shows:
A system error was encountered, please contact your administrator.
and in the console: http://dev.bukkit.org/paste/11942/
Resetting (deleting + setting) the groupspawn doesn't solve the problem either.
I'm kinda worried the SQLite database got corrupted somehow as i'm pretty sure the dev build is compatible with Spigot 1.8.3.
Tested with HSP dev build #628 / #629 @ latest compiled Spigot:
I really tried everything and my hosting guys did what you suggested but spigot is refusing to load the plugin. Even tried it on a local machine.
Thanks a lot for your answer and for your time, this is really nice of you. Actually, even in the same world, the command and the onDeath are returning different result.
"In a more complex case where you have groupspawns scattered across worlds and want different behaviors depending on the group a person is in, you'll probably have to use per-permission strategies specific to each group." That's exactly our situation. :(
Here's the verboseStrategyLogging's return http://pastebin.com/N5ig7buY As you can see, the locations selected by each event are not the same...
Could you give me an example of a per-permission strategy for OnDeath spawn that would be specific for each group ? I read the events-config-example but I'm not really sure about how to use it.
Thanks again !
The hosting guys had not changed the permissions for months, they have now made the change you suggested but it still does not work, the error I get from plugman is:
That file is not a valid plugin
Not sure how an error like that would be a permission thing to start with?
@AlbireoKel
This is tickling a vague memory of a bug reported in the 1.7 series related to group spawns, but I don't recall if that was fixed or was worked around.
Taking it at face value: You are using the same strategy in "/groupspawn" as you are in onDeath. In theory, this means HSP should be returning identical results for both, but that's not what you're seeing.
My best guess as to the cause is the fact that groups in permission systems are world-specific (and so are HSP groupSpawns). So if you have multiple worlds and are expecting that someone dying in world X will be transported to world Y, this won't work. The behavior should be consistent between death and /groupspawn, however: so if you're standing on world X and you type /groupspawn or you die, you should get the same behavior.
To fix to work the way you want, use spawnGroupSpecificWorld. In the simplest case, if all of your groupspawns are on a single world, you could just use that instead in your events below, ie: spawnGroupSpecificWorld:myworld. In a more complex case where you have groupspawns scattered across worlds and want different behaviors depending on the group a person is in, you'll probably have to use per-permission strategies specific to each group.
Also one last troubleshooting step you could try, turn on verboseStrategyLogging. When you run /groupspawn or when a user dies, you'll see the results of HSP processing the strategies, so you can look for clues as to what is wrong. If that help, you can pastebin the results here and I can look for clues in it as well.
@puckman1971
It looks like you're running in a hosted environment? If so, you need to report this problem to your hosting service. They've locked down the java permissions such that it can't read environment variables, which apparently ebeans (built into Bukkit) depends on.
Your other option is to not use ebeans, HSP can use YML files as the database instead. You might have to edit the plugin.yml in the jar and set "database: false" - unfortunately Bukkit provides no way for a plugin to do this dynamically.
Hi andune ! Thanks for your work on this plugin.
I'm really sorry to bother you but we can't figure out our problem... And it's been two days haha.
We are on the v1.7.8 for CB1.7.2, and it looks like there is a groupspawn problem (which is problematic, because all our spawn system is based on groups). Pex and Vault are installed. Not essentialspawn.
The command /groupspawn works fine, but the Ondeath strategy that is supposed to spawn the player in his groupspawn when he dies keeps teleporting him at the hsp default spawn of the world. And when this defaultspawn isn't defined, the player goes to the multiverse's spawn.
The /groupquery command works fine, and the groups for each player are the good ones.
Thanks a lot (and sorry about my poor english).
Have a nice day :)
@ThisUsernameIsMine
Hi!
Here ya go: http://dev.bukkit.org/paste/11890/
Hope you can resolve this as its driving us NUTS and while I can try and find another plugin I rather use this one!
@puckman1971
Can you share/paste the error log (if any) on http://dev.bukkit.org/paste/ ?
It could help with narrowing it down to the root cause.
Further comment, I have plugman installed which lets me manage plugins and when I try to load it from there I get "that file is not a valid plugin"
Out of the blue the plugin will refuse to load. My hosting company has updated to the latest version of spigot so it could be that. I simply get: [Server] ERROR Could not load 'plugins/HomeSpawnPlus.jar' in folder 'plugins'
Followed by roughly 100 lines of java errors.
HELP, I need this plugin!