WorldGuard-based real estate management
Welcome to MineEstates! This plugin was created to make selling and buying houses, apartments, and other plots, much easier on both the server admin and on the users. All WorldGuard plots can be sold or rented out by their owners, and Lockette/Deadbolt signs will be updated when ownership changes. If you're a server admin, tired of having to deal with people constantly wanting new plots or transferred ownership in a city, or if you're a player trying to find a plugin your server can use to get past the fact that your lazy admin never want to deal with players and regions, you're in the right place. This plot works best in a city-like environment, where large amounts of plots can be created initially and then simply bought and sold repeatedly. The rental system allows for large apartment buildings with small per-room plots, which can be owned by the apartment building's owner and recycled over and over. The rent collector scans once every five minutes; however, it only charges rent once per 24 hours on every plot. The rentals work on a pay-in-advance system, so there's no risk of people simply leaving and renewing their rentals to try to evade the system.
All estates-related commands are limited to operation in the world (dimension) that you currently reside in, and none of them are guaranteed to work from the command line.
The short version: 1. /estates search [sales or rents] 2. find one you like 3. /estates goto <plotname> 4. /estates buy <plotname> or /estates rent <plotname> And you're done!
The long version: The sales and rentals markets are separate but use the same commands to search through results. Simply do /estates search sales to get a short five-entry list of results in a clearly displayed format. The estates search command supports logblock-style limiters: /estates search sales size 10x10 price 30000 will display plots that are equal or larger to 10x10 in size, and less than 30,000 in price. Doing /estates page <pagenum> will, starting at 1, display that page of results from your latest search. Once you've found a plot that matches the size and price you want, use /estates tp <plotname> or /estates goto <plotname> to teleport quickly to the region, and /estates buy <plotname> to buy it, or /estates rent <plotname> if it's a rental plot. And that's it! You've successfully bought or rented a plot.
[optional] parameters aren't necessary
<required> parameters are
/estates search <sales | rents> price | owner | name>
This command searches through plots that are available either to sell or to rent. The results can be sorted by one of:
- size They can also be limited by none, any, or all of:
- size (in the format lengthXwidth, i.e. 10x10)
- price (maximum allowable price)
- owner (name of owner of plots)
/estates page <pagenumber>
Search results are organized into pages of 5 results each. Once you have done a search, you can use this command to scroll through the results, which are cached. Caching results in the possibility that the results are out-of-date, especially if the search was performed long ago, and the server has large amounts of estates activity. Small servers should generally not have this problem, and the cache is regenerated for the user every time they perform the search.
/estates goto <plotname> OR /estates tp <plotname>
This command teleports you to the plot that you wish to see. For this to work, the plot must be available on the open market. The teleportation code is currently crude at best, but it will override its teleportation algorithm with the location of the worldguard region teleport flag, if it has one.
/estates buy <plotname>
This command allows you to purchase the plot with the name specified. The price will be deducted from your account and given to the owner. The plot will then be taken off the market automatically.
/estates rent <plotname> <days>
This command adds you as a member- NOT an owner- to the plot. The first payment happens immediately, and the price of the rental recurs once every 24 hours. This system is pay-in-advance on a per-day basis. Setting the <days> flag to a negative number will result in infinite rental duration. The plot will be taken off the rental market until you leave or are evicted. The <days> is simply a maximum duration, and rental properties can be left at any time.
/estates sell <plotname> <price>
This command places the plot specified on the open market for the price given. Size is calculated automatically through WorldGuard. You will NOT receive money for the plot until someone buys it! Once they have bought it, any Lockette or Deadbolt protection signs *will* be updated with the new owner's name, so get your crap out before selling.
/estates lease <plotname> <dailyprice>
This command places the plot specified on the rentals market for the daily price given. Size is calculated automatically through WorldGuard. You will not receive money unless someone is actively renting the plot. If you're running an apartment complex, filling your plots is in your best interests. Renters will be added as members, but you will retain ownership of the plot. Lockette and Deadbolt signs will NOT be updated.
/estates cancel <plotname>
This command removes a plot, whether rental or for sale, from the market entirely. Do not do this to a rental property if a renter is currently there, as it WILL NOT evict them, and in fact should not work at all since renting takes the plot off the market.
/estates evict <plotname>
This command forcibly removes the current renter from the property. No money is returned to them, and no Lockette/Deadbolt signs are updated, but they are removed from the property and the plot is placed back on the rental market. Doing this should be avoided if possible.
/estates leave <plotname>
This command works the same as eviction, but is performed by the renter, not the plot owner. This is used if the renter decides they want to leave the plot. No money is returned, and no Lockette/Deadbolt signs are updated. The renter is removed from the plot and the plot is returned to the rental market.
/estates sellpublic <plotname> <price>
This command is for server administrators. When a plot is originally created, but no owner is immediately available, this will put the plot on the market the same way as /estates sell will, but the money from the sale essentially disappears and is not given to the owner of the plot. This can also be used by administrators to sell abandoned plots.
THIS COMMAND'S PERMISSIONS SHOULD ONLY BE GIVEN TO ADMINISTRATORS.
This provides the permission for buying plots on the open market.
This provides the permission for selling plots on the open market.
This provides the permission for renting AND leaving rental properties.
This provides the permission to set your property up as an available rental property on the rentals market.
This provides the permission to teleport to available rental/for-sale properties.
This provides the permission to sell a region as Public Domain property. The money from the sale disappears. This should be given to administrators only, for the purpose of selling new or abandoned plots. This does *not* check for plot ownership, and so should not be given out to regular users.
This provides the permission to cancel ANY plot that is currently up for sale or rent, whether or not the user owns it. This should only be given to administrators in order to regulate the market.
============================================ As of 2/21/14, the plugin has all the basic functionality finished. Non-SQL databases have *not* been implemented, however.
============================================ IMPORTANT: The download file on the right doesn't use the right file! Download the latest version manually from the files list on the right.
Here's basically how this plugin works.
- You have your WorldGuard setup. You can have it fully set up, running for months, whatever, doesn't matter.
- You have a Vault-compatible permissions plugin.
- You have a Vault-compatible economy plugin.
- Step one: Install the Vault plugin
- * This is very simple. Just put the Vault plugin jarfile in your plugins folder. It takes care of everything else.
- Step two: Figure out what kind of database you want.
- * If your WorldGuard was created with the MySQL database option set to "true" in the config, you don't need to do anything extra to install MineEstates but put the MineEstates.jar in your plugins folder.
- Step Three: Create a MineEstates MySQL database.
- * This is very simple. Simply connect to MySQL, create a database, grant the mineestates user/password in the config all permissions on that database, and you're finished. Make sure you change the database name at the end of the "dsn" string in the config.yml for MineEstates.
- That's it! You're done. That's all you need to do. Simple setup, simple management, simple plugin. Keep in mind, however, that the plugin needs to be started AT LEAST ONCE before you'll get a generated config.yml file. If it isn't generating a config that means something big went wrong, like your server being horribly out of memory or something weird like that. Questions? Concerns? Contact me. See below for contact info.
Code Source @ Github There's always the latest working source code here. If you find that an older version of MineEstates isn't working correctly because it's... well... old, but you need the latest features with a legacy minecraft/bukkit server, you can use the old Bukkit/CraftBukkit code and compile MineEstates against it. Unless it's REALLY old Bukkit, at which point you may be outta luck.
Don't forget that the github has a wiki as well! MineEstates Wiki This'll be expanded and edited over time.
- WorldEdit (Latest dev build)
- WorldGuard (Also latest dev build)
- MySQL Database for MineEstates (permitted to use WorldGuard's MySQL database, if WG uses it)
- Appropriate CraftBukkit version
- Vault(Allows interfacing wth individual economy/permissions systems, such as iConomy and PEX)
============================================ Updated 2/21 **
- Sell/buy WorldGuard plots
- Rent out WorldGuard plots
- Updates Lockette/Deadbolt signs when the plot is bought by a player
- Evicts renters if they run out of money or their lease ends
- Allows teleportation to plots for sale/rent
- Allows searching of sales/rentals markets
- Markets search can be limited to max price, min size (len X wid, i.e. 10x10), or owner name
- Renting of plots
- Separate config with choice of DB type
- Non-MySQL database option
- Blacklisted Users
- Blacklisted Plots
============================================ So far the things that remain to be implemented are as follows:
- Non-MySQL database storage method (WorldGuard's MySQL is no longer required) - implement db4o database
- Config value to limit # of plots players can rent/buy at once (-1 for unlimited)
============================================ If you need to contact me for any reason, help with setup, or anything like that, email me at
- [email protected] I'll get an email back to you probably within six hours or less. I'm always on my email.
yeah, that's the problem right there. There's a slight bug in my own code but that can be fixed. It should be taking you to the top FLOOR of the region, not the top BLOCK, which is what it appears to be doing. I'll edit some code on that when I get some free time and see what the problem is. That shouldn't take longer than fifteen minutes or so.
edit If your regions are underground, for any reason, unfortunately the /goto command will necessarily take you aboveground, unless you set the "teleport" flag on the region, somewhere underground where you want them to be teleported to when they use the /estates goto command.
Well actually, I see what it may be. I used the expand vert to expand the region up to sky and down to bedrock, so I believe it's teleporting to the highest block inside the actual region including the air.
shooting you into the air? do you mean, putting you high in the air? or like, actually throwing you way up high?
as for the region setup, there's not a lot of easy ways to go about doing this. If you're familiar with the worldguard teleport flag, I have a way to use that instead, but it will need to be set manually per-region, or use default behaviour. The problem with making underground regions, is that when you have a region that extends higher than the ground above it, it puts you on the surface because NORMALLY people's regions aren't going to be underneath anything. not like that. You can shift the region so that it doesn't extend above ground, and it should fix that particular issue. However, can you email me your server's IP and port, so I can go on and see this issue in action? I can't seem to get it to do that on my server.
Ahhhh so that's what you meant by shooting you up in the air. Nevermind. I figured out what you were talking about and it's a bug in my code with block placement. i'll try to fix the goto command tonight.
The ground layer is at level 16
Here's an image of the regions: http://i.imgur.com/xQohN.png Each house is a region of it's own.
Now when I use the goto, it TPs me to the ground above still but now it shoots me way up into the air killing those who are on survival.
It also does this for all the other regions, even the above ground ones.
(Congrats on the job)
Well, got some good news and some bad news. The good news is, I got a job. it aint a great paying job, but it's a job, which means i'll be relying less on MineEstates donations. The bad news is, I got a job, which is going to take up a lot of my time. So expect less work done on this in the future. If there's a bug, post a comment, it'll get fixed sooner or later. New features will likely be slow in coming.
ah yeah, the goto implementation was done fairly quickly, basically what it does is when you do /estates goto it takes you to the highest non-air block at the region's max X/Z limit. Basically that was just designed to prevent people from suffocating. Didn't even think about the possibility of underground plots; I'll get working on that asap.
quick edit do these regions extend up above ground level or no? the best I can do is make it so it'll put you on the highest floor inside the region. that'll prevent you from going underground somewhere weird, but if the regions extend above ground... you'll have the same issues.
quick edit again
Went ahead and did my implementation of it. It takes you to the highest-up, 2-block-tall air space in the region, that is NOT above another air block (so no skydiving), and is NOT above a lava block. just to prevent people from dying. Should also add cactus/fire/etc to the list of things not to tp onto. but I'll get to that soon.
File was uploaded but I'm not sure how long it will take to get approved. In the meantime a recently recompiled jarfile is available here: https://github.com/Nach0z/MineEstates/target/MineEstates.jar Have fun. hope that fixes your goto problems. Tell me if you find anything else.
Okay, I did a lot of testing last night and everything is pretty good except the goto teleporting. It's kind of buggy. For instance, I have regions for sale that are at y-16 and when I try to teleport to them, it teleports me way above the region onto the ground above.
yes, I ran into that issue with another user as well. I think it was just an issue with the loading code, I re-compiled the mineestates.jar to fix that issue, and just haven't uploaded it yet. Use the latest jarfile here: MineEstates.jar
However that usually means that either your permissions or your economy system is not compatible with Vault. Check the Vault plugin page for a list of compatible permissions and economy plugins. Also watch the console when you're starting your server with MineEstates, and tell me if you see any Java errors, or any messages that say MineEstates is not enabled.
im not generating a config file....
I see the email that you're talking about.
I'm starting to think that I need to set up a script of some sort to help people with the MySQL database part of this... the other part of me thinks it's time to figure out how to implement a file-based database. that might need to be my next priority.
Ohh! Lol, that one kind of went over my head for a sec. Thanks for explaining, I'll download this right now and report back with an overview of some sort.
UPDATE: I've emailed you with the other problems I ran into
Hey bud, let me try to explain the DB a little bit better. The MineEstates plugin doesn't need the WorldGuard's MySQL database to find regions. MineEstates ONLY needs a database for ITS OWN stuff, not for finding regions. Right now, if you install this thing, no matter how your WorldGuard is set up, it will let you start buying and selling regions right now. It will work immediately basically. All you need to do is set up a MineEstates MySQL database, and creating a database is very simple, just look up a google tutorial. If you need any assistance with anything, just ask, I'll help you through as best I can. But your worldguard how you use it right now CAN work with this plugin, regardless of how your worldguard is set up.
This plugin is exactly what I've been looking for, unfortunately I already have about 200 defined worldguard regions that aren't in a DB, so I guess I'll wait until an alternate storage method is created
UPDATE: Tried to run the plugin and it didn't load. I am using the latest worldedit & worldguard builds, as well as Vault.
And this is my current Bukkit build:
Uploaded the latest jarfile, ladies and gents. Pretty much everything is stable at this point that's been implemented. Rent/lease is still waiting to be done, and a non-mysql database also remains to be created, but in the config you can specify whether to use WorldGuard's MySQL login info or a new, separate MySQL database. The world name doesn't have to be "World" anymore, the command uses the command sender's world to find estates and whatnot. This basically means there's a separate region market for each world.
lol. More stable huh. That's the fun part, is that this project is actually stable. I've found no memory leaks to speak of, (which there really shouldn't be), and the way I go through and code stuff, I make sure what I have works 100% before I go to the next side. I just keep it in "alpha" because I want to make sure it does everything before going to beta/release. It's stable right now, if you want to use it, but it'll probably be updated a couple more times soon anyways.
Alright guys, here's something that I really didn't want to have to do, but I may have to. Long story short, I am in college, and it's difficult to find a job where I'm at right now. I'm looking into getting an internship but that's not going to be enough to keep me going. I have a forty minute commute to class each way, that's fifty to sixty bucks a week in gas, plus insurance (which is higher than normal because I'm a teenage guy.) That costs about 115 a month. So what I think I'm going to end up doing... is setting a donation goal for this project. Currently I've had none, and this IS a voluntary project... so I'm going to start low, and set a 25 dollar donation goal to get the rent/lease functionality of this plugin finished. I'm going to keep working on some of the code, cleaning up, refining, getting bugs fixed, etc etc, maybe getting the non-MySQL database option working. Until I've hit that 25 dollar goal though, I won't be implementing code to get leasing/renting plots more than a simple framework to build on.
I hate doing this but I have to focus on things like school and finding a job if I can't get some kind of extra off of this.
I'm not disabling any current code, or anything like that, I'm just not implementing rent/lease functionality until I can get some kind of return from this project.
Woot. Big update. There is now a config.yml set in by default. It'll 'by default' try to use an SQL database, and use WorldGuard's MySQL database, but as of now your worldguard installation does NOT have to be using MySQL in the backend. MineEstates still requires its own MySQL database, but all you have to do is create the database, and grant the [email protected] in the config all privileges on THAT database, and it'll take care of everything for you. Non-MySQL database is in the works, but now that you can use this with worldguard without wg using MySQL, it should broaden the userbase significantly. Next up: Make a YAML-based database implementation.
yeah, trust me that issue's being worked on a.s.a.p. I'll probably make it easy on everyone and use the command sender's world to check for regions and whatnot. Correct me if I'm wrong, but MOST servers are just going to have plots available in the main world anyways, yes? If not, this's gonna be a pain and I'm going to have to look into some other code. I might end up refining that part anyways, I'm sure it'll be better in the long run.
This looks great. I can't wait for some of the kinks to be ironed out so I can start using it. I would test it, but none of my worlds are named 'world' :\