GlobalMarket
GlobalMarket is a global market system. It allows players to buy and sell items via a convenient in-game interface. It's similar WoW's Auction House or Runescape's Grand Exchange. I created this plugin awhile ago (back in the days of WebAuction, it's what inspired me) for private use, but I've decided to release it to the public. This plugin requires Vault and ProtocolLib, other than that, just drop it in plugins (make sure you have Vault plus a supported economy plugin installed) and start trading!
Features
- Players can put any item up for sale using a dead simple in-game GUI system (see below)
- Uses ProtocolLib for proper item serialization that supports Bukkit, Spigot, and Cauldron
- Real time interface, all trades show up immediately without having to 'refresh' or close the GUI
- No maintenance or admin interaction required
Mailbox system that allows you to set up market areas or auction houses(not currently in 2.0.0)A built in price guide that compiles average prices from previous transactions(not currently in 2.0.0)
Latest Dev Build
Development builds of this project can be acquired at the following continuous integration server.
These builds have not been approved by the BukkitDev staff. Use them at your own risk.
http://build.survivorserver.com/job/GlobalMarket%202.0.0/
Changelog
Usage
- The Interface
- This is a display of all current listings, you click an item to buy it. You can shift+click to remove a listing if you own it, or if you have the "globalmarket.listingsadmin" permission. Listings automatically expire after 1 week (configurable). You can use
/marketto access the menu.

- Stock
- When you purchase an item it will be sent to your stock. Stock is an entirely optional system but is suggested to be enabled, as disabling it will disable certain other features like
/market send. The stock system can hold a configurable amount of stacks of items in a configurable amount of slots. Once you place an item in your stock, you can list it to be sold to other players. Players can also send items to other players' stock via/market sendif they have the "globalmarket.command.send" permission.

- Server Listings
- You can create 'infinite listings' that do not expire and can't be bought out. Create them with
/market createinf <price> <[amount]>. There's a dedicated section to server listings in the Market menu. You'll need the "globalmarket.command.createserverlisting" permission to do this. Or you can disable this system all-together in the config.
Commands
| Command | Description | Permission |
|---|---|---|
| /market | Opens the Market menu. | globalmarket.use |
| /market ? | Shows command help. | <no permission> |
| /market send <player> <[amount]> | Sends the item you're holding to <player>'s stock. Amount is optional. | globalmarket.command.send |
| /market createinf <price> <[amount]> | Creates a server listing. Amount is optional. | globalmarket.command.createserverlisting |
| /market reload | Reloads config.yml | globalmarket.command.reload |
Permissions
- globalmarket.use - base permission, required to use /market
- globalmarket.listingsadmin - ability to remove all listings
- globalmarket.command.send - ability to use /market send
- globalmarket.command.createserverlisting - ability to use /market createinf
- globalmarket.command.reload - ability to use /market reload
Config
All config values have comments that explain what they do in config.yml, how convenient for me!
If you wish to blacklist items from being used on the Market, there is blacklist.json. You can add material values with meta values:
- APPLE:0 - blacklist apples
- INK_SAC:-1 - blacklist all dies
If you're running Cauldron, you can do things like:
- oredict:ingotSteel - blacklist any item with an OreDictionary value matching ingotSteel
- extracells:storage.component:-1 - blacklist all ExtraCells storage cells
Locale
Virtually every string in the plugin is editable via the "en_US.json" file, inside the plugin's JAR. It's pretty straightforward to edit. Don't replace or edit the %s or %1$s's, these are variables. For example, "Item sold: %s" would appear as "Item sold: Cobblestone" in-game. You can add/edit colors by typing & plus a color code. So light green (the color code is a) would be &a. You can find color codes here: http://ess.khhq.net/mc/
You can also create an entirely different language set, name it something like ch_CN.json, stick it in the server's JAR, and change the appropriate config value in config.yml to use it.
Source
https://github.com/Dasfaust/GlobalMarket
That's all for now. Sorry if things are unclear, I'll be updating this page with more information periodically. If you're stuck just add a reply and I'll do my best to help!
-
View User Profile
-
Send Message
Posted Jan 17, 2014The " globalmarket.util " permssion isn't working for me :'( everything else does though
-
View User Profile
-
Send Message
Posted Jan 17, 2014@ken91062
Yep!
Speaking of translations... The new dev build pulls item names directly from the Minecraft language files instead of Vault, so you can now localize the item names that are shown in history, transaction logs, etc. To change from english, grab a new locale file from your .minecraft folder (they are usually in assets/virtual/legacy/lang), like pirate speak, which is en_PT.lang. Copy that file into your GlobalMarket directory, open config.yml and change "language_file" to the file name of your new language file, like "en_PT.lang" and restart your server.
@S4BRE
Ok, I'll need the entire error though.
@lanceryy
I'm investigating that, thanks.
@Gametista
That should be fixed in the newest build (#109). You might see some debug on startup while it cleans the database. It was mismatching cached itemstack IDs. It's a lot to explain, but it should be fixed now.
-
View User Profile
-
Send Message
Posted Jan 17, 2014Tried out #107/#108 and when someone leaves mail in the mailbox after a restart, it makes the mailboxes error:
http://pastebin.com/ujSxuaaw
This is with using mySQL. The settings are correct because the database is being populated as far as I can tell.
Upon testing the flatfile (sqlite), it doesn't produce the same error.
Running:
Spigot #1245
Vault 1.2.29-b370
-
View User Profile
-
Send Message
Posted Jan 15, 2014HI xdasfaust , i use the.#107 . When you right click the Search icon then you will be kick by server . Is it a bug ?
http://pastebin.com/hWHswjqc
-
View User Profile
-
Send Message
Posted Jan 15, 2014@xdasfaust
i dont see any errors on start up, i reloaded the plugin by wiping out the files that it created and it worked. Now its doing it again to other players. For the market not the bank. Using Essentials and Vault
-
View User Profile
-
Send Message
Posted Jan 14, 2014Hi,Could i translate your GlobalMarket to Chinese??
-
View User Profile
-
Send Message
Posted Jan 14, 2014@Ackuraku
Any. Use the latest release if you're worried about stability. The dev builds contain lots of new features but may have bugs.
@lanceryy
Oh, I see what you're saying, fixed in the most recent build.
-
View User Profile
-
Send Message
Posted Jan 14, 2014May i know how to prevent the buyer after left click the item then they can't to click another items? If the first item cost $1000 then the buyer who make a mistake to click the near ones which cost $100000 then in the late dev build the buy will deduct $100000....ty
-
View User Profile
-
Send Message
Posted Jan 14, 2014What's the most recent version with no-known money dupes? I'm using Fe economy and would love this plugin
-
View User Profile
-
Send Message
Posted Jan 14, 2014@lanceryy
There should be an option in the Essentials config to disable negative balances. GlobalMarket has its own internal item management, so don't worry about weird IDs.
-
View User Profile
-
Send Message
Posted Jan 14, 2014@xdasfaust
. #106 2014/1/13 AM 02:21:56 and i am using Essential econ..
Moreover, I am using java 7 MYSQL and using . #106 .i saw the items mysql was wrong. Such as the Beacon ID:138 will become ID:13.....
-
View User Profile
-
Send Message
Posted Jan 13, 2014@lanceryy
What economy plugin are you using? What's your GlobalMarket version?
@S4BRE
Is there an error at startup? I'll need the entire error.
-
View User Profile
-
Send Message
Posted Jan 13, 2014everything was working fine then all the sudden today 9:49:14 AM CONSOLE: [SEVERE] Could not pass event PlayerInteractEvent to GlobalMarket v1.2.2 9:53:28 AM CONSOLE: exception executing command 'market' in plugin GlobalMarket v1.2.2
getting internal error message as well and this only happens to some players not all
-
View User Profile
-
Send Message
Posted Jan 13, 2014It is big BUG. When the buyer get enough money to buy the first item then left click the fist item once but now click the other item which the price is highest than the first item .The player can bypass to buy it and got negative money. The buyer can create too many accounts and get a lot of money ......please help! Thanks
-
View User Profile
-
Send Message
Posted Jan 12, 2014@hellphish
No, it isn't possible yet. But it is an upcoming feature.
-
View User Profile
-
Send Message
Posted Jan 12, 2014Hi! Me and my users are really enjoying this plugin. A quick question: Is there a way to create "buy orders?" In other words, can a player create a listing offering to buy a certain amount of something at a certain price? This could really help the market go two ways and create a deeper sense of supply and demand, since the demand would be tangible. My apologies if I have overlooked something, and thanks again for the great plugin.
-
View User Profile
-
Send Message
Posted Jan 12, 2014@lanceryy
Try the latest build. Also when posting errors try to use pastebin, it makes it a lot easier for me to read.
-
View User Profile
-
Send Message
Posted Jan 12, 2014Could you help ?
[22:51:21] [Craft Scheduler Thread - 78][33m[WARN][m: java.sql.SQLException: Parameter index out of range (7 > number of parameters, which is 6). [22:51:21] [Craft Scheduler Thread - 78][33m[WARN][m: at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1073) [22:51:21] [Craft Scheduler Thread - 78][33m[WARN][m: at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:987) [22:51:21] [Craft Scheduler Thread - 78][33m[WARN][m: at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:982) [22:51:21] [Craft Scheduler Thread - 78][33m[WARN][m: at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:927) [22:51:21] [Craft Scheduler Thread - 78][33m[WARN][m: at com.mysql.jdbc.PreparedStatement.checkBounds(PreparedStatement.java:3709) [22:51:21] [Craft Scheduler Thread - 78][33m[WARN][m: at com.mysql.jdbc.PreparedStatement.setInternal(PreparedStatement.java:3693) [22:51:21] [Craft Scheduler Thread - 78][33m[WARN][m: at com.mysql.jdbc.PreparedStatement.setInternal(PreparedStatement.java:3735) [22:51:21] [Craft Scheduler Thread - 78][33m[WARN][m: at com.mysql.jdbc.PreparedStatement.setDouble(PreparedStatement.java:3641) [22:51:21] [Craft Scheduler Thread - 78][33m[WARN][m: at com.mysql.jdbc.PreparedStatement.setObject(PreparedStatement.java:3960) [22:51:21] [Craft Scheduler Thread - 78][33m[WARN][m: at com.survivorserver.GlobalMarket.SQL.MarketStatement.setObject(MarketStatement.java:84) [22:51:21] [Craft Scheduler Thread - 78][33m[WARN][m: at com.survivorserver.GlobalMarket.SQL.QueuedStatement.buildStatement(QueuedStatement.java:39) [22:51:21] [Craft Scheduler Thread - 78][33m[WARN][m: at com.survivorserver.GlobalMarket.SQL.AsyncDatabase.processQueue(AsyncDatabase.java:64) [22:51:21] [Craft Scheduler Thread - 78][33m[WARN][m: at com.survivorserver.GlobalMarket.SQL.AsyncDatabase$1.run(AsyncDatabase.java:37) [22:51:21] [Craft Scheduler Thread - 78][33m[WARN][m: at org.bukkit.craftbukkit.v1_7_R1.scheduler.CraftTask.run(CraftTask.java:58) [22:51:21] [Craft Scheduler Thread - 78][33m[WARN][m: at org.bukkit.craftbukkit.v1_7_R1.scheduler.CraftAsyncTask.run(CraftAsyncTask.java:53) [22:51:21] [Craft Scheduler Thread - 78][33m[WARN][m: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) [22:51:21] [Craft Scheduler Thread - 78][33m[WARN][m: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) [22:51:21] [Craft Scheduler Thread - 78][33m[WARN][m: at java.lang.Thread.run(Thread.java:724) [22:51:21] [Craft Scheduler Thread - 78][37m[INFO][m: [GlobalMarket] An exception occurred while executing an SQL statement: [22:51:21] [Craft Scheduler Thread - 78][33m[WARN][m: java.sql.SQLException: Column count doesn't match value count at row 1 [22:51:21] [Craft Scheduler Thread - 78][33m[WARN][m: at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1073) [22:51:21] [Craft Scheduler Thread - 78][33m[WARN][m: at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3593) [22:51:21] [Craft Scheduler Thread - 78][33m[WARN][m: at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3525) [22:51:21] [Craft Scheduler Thread - 78][33m[WARN][m: at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1986) [22:51:21] [Craft Scheduler Thread - 78][33m[WARN][m: at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2140) [22:51:21] [Craft Scheduler Thread - 78][33m[WARN][m: at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2626) [22:51:21] [Craft Scheduler Thread - 78][33m[WARN][m: at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2111) [22:51:21] [Craft Scheduler Thread - 78][33m[WARN][m: at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2407) [22:51:21] [Craft Scheduler Thread - 78][33m[WARN][m: at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2325) [22:51:21] [Craft Scheduler Thread - 78][33m[WARN][m: at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2310) [22:51:21] [Craft Scheduler Thread - 78][33m[WARN][m: at com.survivorserver.GlobalMarket.SQL.MarketStatement.execute(MarketStatement.java:96) [22:51:21] [Craft Scheduler Thread - 78][33m[WARN][m: at com.survivorserver.GlobalMarket.SQL.AsyncDatabase.processQueue(AsyncDatabase.java:64) [22:51:21] [Craft Scheduler Thread - 78][33m[WARN][m: at com.survivorserver.GlobalMarket.SQL.AsyncDatabase$1.run(AsyncDatabase.java:37) [22:51:21] [Craft Scheduler Thread - 78][33m[WARN][m: at org.bukkit.craftbukkit.v1_7_R1.scheduler.CraftTask.run(CraftTask.java:58) [22:51:21] [Craft Scheduler Thread - 78][33m[WARN][m: at org.bukkit.craftbukkit.v1_7_R1.scheduler.CraftAsyncTask.run(CraftAsyncTask.java:53) [22:51:21] [Craft Scheduler Thread - 78][33m[WARN][m: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) [22:51:21] [Craft Scheduler Thread - 78][33m[WARN][m: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) [22:51:21] [Craft Scheduler Thread - 78][33m[WARN][m: at java.lang.Thread.run(Thread.java:724)
-
View User Profile
-
Send Message
Posted Jan 11, 2014@Gametista and anyone else using dev builds:
I've got a new build out that should fix the duping issue (build #104.) It also addresses some other stuff like weird listing stacking. I came across a really derpy mistake I made with the database indexing and have fixed it, but if you use SQLite you will have to delete data.db and let the plugin re-create it, otherwise you'll get a nasty error with the new build. MySQL users will be fine. Sorry about that :(
@Grant1204
An alias would be nice, I'll try to do that. For the other suggestion, maybe I can add it if I ever get the time, haha.
@KeithSt0ne
I will investigate the expiring infinite listings.
@mal67
It's probably a timing issue with closing and opening the inventory on the same tick. Some weird things can happen in those situations. I'll look into it, I have a fix in mind.
-
View User Profile
-
Send Message
Posted Jan 11, 2014@Bodyash
A player just reported to me this same thing, items being added back to the mailbox after restarts.