Skip to content

MriPhoneFTW/BetterShop

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

BetterShop - The "better" global command-based shop that ties into iConomy

active developers: jascotty2 & jjfs85
===============================================================================
In-Game Commands:
===============================================================================

/shop 				<command>		for those used to a plugin having one command, this is another way to get to the following (also used for some admin commands)
/shop ver[sion] 					shows version # and if is up-to-date
/shop backup						backup the database to a csv file
/shop import 			<file> 			insert values from file in plugin folder
/shop restore 			<file> 			clear shop & load from saved backup file
/shop restock						manually update stock (if enabled)
/shop update 						OP-only command that forces update & restarts server plugins
/shophelp (shelp)		[command]		shows you all the commands you can use, or more help on [command]
/shoplist (sl,slist)		[pagenum]		shows a listing of items for sale (if -1, all, or full given, will show full list. (for console use))
/shopitems (sitems)					show full listing of items in shop, without prices
/shopcheck (sc,scheck) 		<item> [amount]		lookup a specific item so you don't have to read through pages of prices
/shopbuy (buy,sbuy) 		<item> [amount]		buy an item for the price in the shopshop ("all" is accepted as an amount)
/shopbuyall (buyall,sbuyall) 	<item> 			buy all of an item that you can hold
/shopsell (sell,ssell)   	<item> [amount]		sell an item for the price in the shop
/shopadd (sadd): 		<item> <buy> [sell]	add an item to or update an item in the price list
/shopremove (sremove)		<item>			remove an item from the price list
/shopload (sload)					reload prices from pricelist database
/shopsellall (sellall)		[inv] [item [...]]	Sell all of item from your inventory (alias to command /shop sell all) (inv will not search lower 9 slots)
/shopbuystack (buystack)	<item> [item | amount]	buy a stack of an item (usually 64)
/shopsellstack (sellstack)  	<item> [item | amount]	sell a stack of an item (usually 64)
/shopbuyagain (buyagain,sba) 				repeat last buy action
/shopsellagain (sellagain,ssa) 				repeat last sell action
/shopkits (skits)					show a listing of avalliable kits (will be elaborated later)


===============================================================================
Features:
===============================================================================

=== plugin support
currently dependent on 
- iConomy	http://forums.bukkit.org/threads/40/
--or
- BOSeconomy  	http://forums.bukkit.org/threads/4874/
Permissions support
Help support

=== configurable
Fully configurable colors and message text in config.yml file
shoplist can have text alignment (read config for more info): <item> <l(eft-aligned)> <buy and sell info>
- uses minecraft font character spacing, so is very close to perfectly aligned in chat
shoplist can optionally not show listing tail (or head, but recommended to leave <page> of <pages>)
Items can be colored in the new itemsdb.yml file
also in itemsdb.yml: kits!
- define your own kits that the shop can sell
- three examples provided, edit and add to your liking
Configurable Options:
-max pagesize when printing shoplist
-whether to broadcast all transactions publicly
-name of the pricelist file/table
-customsort: a custom sorting order, so you can have items at the top of the shop list
-allowbuyillegal: if someone without BetterShop.admin.illegal can buy illegal items
-whether maxstack should be honored
-if used tools can be bought back
-default color for items

=== shop flexibility
shopcheck will run a name comparison check, and return all matching items
Item sub-type support for dye colors, cloth colors, etc: magentacloth = 35:2 = cloth:magenta
"all" is a valid amount when buying or selling: "/sell cobblestone all" or "/sell all cobblestone"
damaged tools can be resold for an adjusted value of sellprice*(1-(damage/maxdamage))
buystack can be given multiple items, or number of stacks: "/buystack wool 5" or "/buystack wool blackdye reddye"
shopsellall can be given multiple items (/sell all cobble gravel flint dirt)
plural-insensitive items: if not found, will check if plural & remove "s"
not just items can be bought anymore: can now buy LivingEntities, like dogs (wolf)
signs can be used for buying & selling
- first line: [BetterShop] (not case-sensitive)
- second line: action: buy [amt], buyall, buystack, sell [amt], sellall, sellstack
- third line: item (name, id, etc)
- fourth line: unused (was going to make price, but decided on pricecheck instead)
- to activate, someone with BetterShop.admin.makesign must left-click the sign.. the first line will change color when active
- left-click for price check (or activate), right-click to buy/sell
- if a unauthorized player destroys a block a sign is on, is canceled

=== administration
Every item and subtype can be priced differently
Disable buying or selling of an item by giving it a price of -1	 (0 makes it free)
command aliases to stop carpal tunnel
many commands have sub-aliases.. eg. shoplist kits will run shoplistkits
MySQL pricelist support 
MySQL pricelist can be cached for a given timespan (decreases table selects) (flatfile is cached until manually updated)
Transaction records (MySQL or flatfile as .csv)
Downloads mysql-bin.jar dependency automatically
buy/sell cap in program set to 999,999,999 (not that you'd be using that much, but the cap is to prevent other errors)
if encounters errors while editing a player's account, will attempt to reload iConomy (i've had issuses with it before)
can backup the current pricelist: /shop backup
can restore from backup: /shop restore <file>
can import new prices in a batch from a csv (or old yml format) : /shop import <file>
on start, can check the download page to see if there is an update avaliable
shop can be given a finite stock from which to buy & sell
/shop ver[sion] to check the current version & see if there's an update
/shop update to manually download & install the most recent version
MinecraftIM support: forward errors or all messages
checks for missing & unused configuration nodes
strings have default values if missing
auto error reporting added (can be disabled)
custom message you can send with the error report
help main page integration can be disabled
global shop can be disabled & only allow signs to be used


There are two ways to add things to the shop:
Recommended, but slow: use /shopadd [item] [buy-price] [sell-price]
Faster: use a text editor (or spreadsheet program) to add items to the BetterShop.csv file. 
	items are in this order: id, subdata, buy, sell, name
	item id & subdata are checked against itemsdb.yml, and are removed if they don't exist
	for your convinence, you can use names (not subnames, though), so "wool,blue,1,-1" is a valid entry
	The name value is there only for human readability, it's not read by the plugin.

===============================================================================
Permissions:
===============================================================================
Just add the following nodes to Permissions' config.yml file (or data.yml file for GroupManager):

BetterShop.user.*	Allows the user to use the list, sell, buy, and help commands
BetterShop.admin.*	Allows the user to use the add, remove, and load commands

There are other nodes that allow only more specific permissions, but I recommend using the above.

BetterShop.user.list		look through shop listing of prices
BetterShop.user.check		check the price of item(s)
BetterShop.user.help		view ingame help menu
BetterShop.user.buy		buy items from the shop
BetterShop.user.sell		sell items to the shop
BetterShop.admin.add		add/edit items to/in the shop
BetterShop.admin.remove		remove items from the shop
BetterShop.admin.load		reload configuration & pricelist
BetterShop.admin.info		show shop stats (only version number right now)
BetterShop.admin.illegal	gives the ability to purchase 'illegal' items
BetterShop.admin.backup		backing up and restoring the pricelist
BetterShop.admin.restock	manually restock (if item stock is enabled)
BetterShop.admin.makesign	make/remove a bettershop sign

===============================================================================
TODO (items are removed as they're added)
===============================================================================

calculated/derived item prices
/shopvalue item[@amount] item  	to show the current trade value for two items
discount system: users or groups can be charged less/more for an item or all items (sell prices also affected)
dynamic market pricing, based off of logged market activity
region shops (items added while in a region defined as a shop are only added to that shop)
add option for amount in stock for surplus decreases how much item is worth to the shop
/shop alias <item> - show the itemname, with a list of aliases
add pages for /shopitems
more descriptive kit listing, similar to shoplist:
- pages
- show what makes up a kit
- enable admin.add to see avaliable kits
SQLite support?
tie item prices to stock quotes?
craftables' stock is tied to source material stock (if using sell craftables)
make LivingEntities follow the owner around?
change buystock if itemStock is enabled so that if trying to buy multiple stacks (buystack item 20) and stock runs out to stop buying (stop showing "out of stock")
individually-customizable restock stock values per-item
chest shop interface ? 
automatically add missing config nodes (preserving comments)
add a simple builtin economy system, if none found?
add categories to items
- can search, buy, & sell with category
user-owned shops (signs, linked to chests)
4th line for configurable prices or shop profit owner


=== Removed (not going to implement)
persistentMySQL: if false, will disconnect from db when now using it (use if have a high cacheUpdate)
		(the MySQL connection is now shared with other features, so disonnecting could cause more performance issues)
dynamicDiscount: if a user has an applicable discount, will also discount items crafted using discount
		(if i do implement discounts, this will be automatic)
Cookies	integration:  http://forums.bukkit.org/threads/5327/
		(might implement if becomes active again)
items as currency (if no economy plugin)
		(as i began to write this, i realized that it's an entire economy plugin... one that i just might develop)


===============================================================================
Changelog:  (the (?) means plugin didn't report that as the version.. sorry :))
===============================================================================

Version 1.6.5.5 - ?- jascotty2
hopefully fixed an update restart error
wolves fixed for 1.5


Version 1.6.5.4 - 4/18/11 - jascotty2
misc. nullpointer fixes


Version 1.6.5.3 - 4/11/11 - jascotty2
added option to disable sign protection
added sign action wait, to prevent sign click spamming
fixed a nullpointer error when selling


Version 1.6.5.2 - 4/11/11 - jascotty2
removed spawnwolf debugging line
wolves bought have correct health


Version 1.6.5.1 - 4/10/11 - jascotty2
removed a debugging line
wolfs bought have their owner already set (need to increase health)
- thanks goes out to ashtonw (jynxdaddy) for working this out: https://github.com/ashtonw/WolfSpawn


Version 1.6.5.0 - 4/10/11 - jascotty2
corrected new settings (missed some previously)
fixed default sign pricecheck showing wrong one
fixed messenger formatting error
misc. null fixes
BOSEconomy support added
changed block protection from scan to save (should improve performance)
added tnt protection, in the form of a scanner that routinely checks that all shop signs & their anchors still exist
added syntax check for /buy & /sell # [item] (like the sign syntax)
allowbuyillegal now defaults to true
fixed color set (hidden logic error)
signs can have the item name colored according to the defined item color


Version 1.6.4.2 - 4/9/11 - jascotty2
fixed sign destroy permission check to only check bettershop signs


Version 1.6.4.1 - 4/8/11 - jascotty2
"inhand" and "inv" added as valid sellall/buyall items (signs only)
- "in hand" buys/sells all of the type of item in the player's hand
sign destroy protection algorithm improved (still can't check for explosions :( )


Version 1.6.4.0 (?) - 4/8/11 - jascotty2
stock message error fixed when selling too much
fixed <curr> causing a server freeze
added amount to pricecheck, so can check the result buy/sell price
fixed a buying error when already has some of the item
added a sign interface
- first line: [BetterShop] (not case-sensitive)
- second line: action: buy [amt], buyall, buystack, sell [amt], sellall, sellstack
- third line: item (name, id, etc)
- fourth line: unused (was going to make price, but decided on pricecheck instead)
- to activate, someone with BetterShop.admin.makesign must left-click the sign.. the first line will change color when active
- left-click to pricecheck
- right-click to run action
if a unauthorized player destroys a block a sign is on, is canceled
fixed column check for table updating 
updated for 670
configuration nodes are moved to more organized parent nodes (easier to edit if using an intelligent text editor)
- older nodes are still supported (for now)


Version 1.6.3.6 - 4/6/11 - jascotty2
again, previously forgot to update the date in last version
- added additional checks to prevent future false-positives 
-- (also checks if comment on download matches plugin, not if plugin >= comment version)
figured out the integrity check errors :)
now runs checks on changed tables to check if needs updating (and adds columns as necessary)
- just transaction log table for now (only table with added columns)
another option added: AutoUpdate
- if a new update is found, will download & install
- can also run manually with /shop updade (OP-only, since forces update & restarts server plugins)


Version 1.6.3.5 - 4/4/11 - jascotty2
fixed a rare null exception in integretycheck?
fixed saving errors when transaction logging disabled
implemented infinite stock (setting stock to -1 makes infinite)
# 1,000+ downloads in one day!


Version 1.6.3.4 - 4/3/11 - jascotty2
fixed a rare invalid function signature error
fixed if a player tries to buy/sell air
OPs now completely bypass security checks
more changes to error reporting format: added a custom message
# 10,000+ lines of code :)


Version 1.6.3.3 - 4/2/11 - jascotty2
renamed monstertamer package, to avoid conflicts if you're using the monstertamer plugin
should have a reported bug in integrety check taken care of.. not sure of the cause, though


Version 1.6.3.2 - 4/2/11 - jascotty2
fixed more error reporting bugs (still can't find one stupid stock flatfile bug)
added stock messages to config


Version 1.6.3.1 - 4/1/11 - jascotty2
fixed chickens & buying more than one animal
updated error reporting(again)
rand libary update for my version of CookieMonster


Version 1.6.3 - 4/1/11 - jascotty2
fixed buy/sell == 0 ? no (in shoplist, 0 incorrectly showed as no)
updated for 612 (and 600+ .. had accidently been using the wrong libary)
LivingEntities can now be purchased! :D
- special thanks to fullwall for the MonsterTamer plugin, from which this ability comes from (1.3)
- if capable, will attack the anything attacking the purchaser (if nearby)
-- todo? make them follow the purchaser around?


Version 1.6.2.8 - 3/31/11 - jascotty2
nullpointer fixed if running 602 with old groupmanager
other misc. null fixes
removed redundant reload points for iConomy
repaired a mysql totalTransactionLog format error
error reporting now begins with a portion of the date, so i can see them listed in order
more info added to error reports.. still can't figure out the stock flatfile save bug


Version 1.6.2.7 - 3/30/11 - jascotty2
improved error reporting format & removed a few unnecessary send triggers


Version 1.6.2.6 - 3/30/11 - jascotty2
now checks for missing & unused configuration nodes
strings have default values if missing
auto error reporting added (can be disabled)
now compatible with bukkit 602
help main page integration can be disabled
hidden changes to get one step closer to dynamic pricing


Version 1.6.2.5 - 3/28/11 - jascotty2
forgot to update the date in the last release, so a false 'newer release' was showing up
fixed help support when help loaded before bettershop


Version 1.6.2.4 - 3/25/11 - jascotty2
Added support for my new plugin: MinecraftIM :)
removed a stock debugging line i forgot to remove
manually set locale for updating date format.. should fix non-us countries?


Version 1.6.2.3 - 3/23/11 - jascotty2
added stock db to reload
fixed a stock update on sell
updated plugin commands to include sellstack


Version 1.6.2.2 - 3/23/11 - jascotty2
more commands added to register with help
fixed a MySQL update syntax error for stock


Version 1.6.2.1 - 3/23/11 - jascotty2
fixed a plural search bug
added /sellstack (much like buystack)
fixed a buyagain logic error
/shop import <file> - insert values from file in plugin folder
/shop restore <file> - clear shop & load from saved backup file
flatfile itemstock repaired


Version 1.6.2 - 3/23/11 - jascotty2
stock option - items can have a finite amount
	- selling to the shop increases the stock, buying decreases
	- can have a minimum update interval: time before will reset stock to initial amounts
	- maximum stock: most will hold 
	- noOverStock: will not allow selling if item stock is full
- note on stock: does not track each item's damage values (if tools) .'.  selling a damaged good allows 1 intact to be bought
/shop restock		(permission BetterShop.admin.restock) to update how much stock the shop has
permission node BetterShop.admin.backup added for backing up (and eventually restoring) the pricelist
added Help plugin integration: will automatically register commands with help
added some more MySQL db connection reconnect points (autoReconnect=true not working is becomming irritating)
more checking for iConomy account mod failures (i've had more problems with it)
fixed a format error if using a replacement char (like <l.>)
retructured sellall inventory editing
# passed 7500 lines of code! (430KB) 


Version 1.6.1.4 - 3/21/11 - jascotty2
(hopefully) fixed MySQL region formatting errors (such as europe where the decimal is a comma)
addto/updated help menu
added [command] to help: lookup a specific command (also accepts aliases)
fixed flatfile total transactions log
shop ver[sion] also shows if the plugin is up-to-date


Version 1.6.1.3 - 3/20/11 - jascotty2
default color for items
plural-insensitive items: if not found, will check if plural & remove "s"
fixed transaction log insert missing the price
was having problems reading bit from php, so shanged SOLD column from bit to tinyint
-  alter table BetterShopMarketActivity change column SOLD SOLD TINYINT;
finished flatfile support for transaction logging


Version 1.6.1.2 - 3/20/11 - jascotty2
runs MySQL connection check before executing database queries, and manually attempts reload if not connected
- (still trying to iron out MySQL connection bugs)
removed list debugging lines i forgot to remove earlier


Version 1.6.1.1 - 3/19/11 - jascotty2
removed double negative add check.. can add an item for -1, -1
fixed some Item errors: color and .equals(ItemStack).. fixes itemdb colors and sellall
fixed page numbering for when there are hidden items
fixed sell for 0: a <= instead of < .. thought i'd fixed that, but apparently not all of those.


Version 1.6.1 - 3/19/11 - jascotty2
update check is optional (in config)
/shop backup to save pricelist to a backup csv file
updates itemsdb on shopload, in case the admin wanted to update colors/kits and such
added price column in marketHistory table
- upgrading from older version?
-	ALTER TABLE BetterShopMarketActivity ADD COLUMN PRICE DECIMAL(11,2);
added flatfile support for transaction logging (uses csv)
removed pricelist save file on close (is already saved on edit)
if an item is marked as no buy, no sell, don't show on shoplist
itemsdb names can be saved (and outputted) with title formatting (eg RedstoneTorch) 
- included itemsdb also expanded & names formatted
case-insensitive item matching


Version 1.6.1 alpha - 3/18/11 - jascotty2
Checks git to see if there is a newer version avaliable (todo: config & download update?)
fixed price = 0 to be free
fixed null in sellall if selling all sellable


Version 1.6.0f - 3/18/11 - jascotty2
better error check for config & importing old yml pricelist
MySQL pricelist can be cached for a given timespan (decreases table selects)
fixed sell bug (selling one would credit for amount in the first stack)


Version 1.6.0e - 3/17/11 - jascotty2
fixed a removal error - there was a typecast exception previously


Version 1.6.0d - 3/17/11 - jascotty2
if the old PriceList.yml file exists, will import into whatever db is enabled, then rename the file
fixed public message bug - would send broadcast (num players-1) times


Version 1.6.0c (?) - 3/17/11 - jascotty2
added more options:  allowbuyillegal, usemaxstack, buybacktools
fixed buystack history
major buystack logic error repaired - previously didn't work correctly
buystack can now be given multiple items, or number of stacks: "/buystack wool 5" or "/buystack wool blackdye reddye"
damaged tools can now be resold for an adjusted value of sellprice*(1-(damage/maxdamage))


Version 1.6.0b (?) - 3/16/11 - jascotty2
fixed a minor buy error if tried to buy more than they can hold, and could hold 0 more
major MySQL problem fixed - pricelist table wasn't being created


Version 1.6.0 - 3/16/11 - jascotty2
major code restructure & reorganization (technically a 'version 2')
changed item db to a more descriptive yml file
- can define what items make an item (for calculated/dynamic costs)
- can change what color it will be outputted as in the listing
- define kits (sold.. store won't buy them)
MySQL buy & sell fields increased to decimal(11,2), and cap in program set to 999,999,999
shoplist can now optionally not show listing tail (or head, but recommended to leave <page> of <pages>)
removed value check - can now "sell" items that sell for 0 
added /shop command alias - for if a user is more used to "/shop help" than "/shophelp"
many commands have sub-aliases.. eg. shoplist kits will run shoplistkits
now does pre-check for if user can hold as much as they're trying to buy
-	and "all" to try to buy as many as they can hold
items can be marked as illegal, and can only be purchased by a select few (using permissions)
-	also not shown to users who cannot buy them, except with pricecheck
option in config to make transactions publicly broadcasted
option in config to have a custom sort order
shopsellall can be given multiple items (/sell all cobble gravel flint dirt)
now shows what items were sold when using shopsellall
fixed bug where single sell parameter would == sell [item] all
all, full, -1 added as a pricelist pagenumber: will print the full list (intended for console use)
marketactivity table truncate logic repaired.. 
marketactivity MySQL table changed with primary key(DATE, USER, ID) (instead of DATE, USER) to resolve conflits with sellall
items can be marked as 'legal: false', and only those with permissions can buy them (can still sell)
if encounters errors while editing a player's account, will attempt to reload iConomy
sellall can be given "inv" as first parameter to only sell from inventory (not in quick access slots)
shopcheck given partial name matching: "/shopcheck wool" (not "shopcheck 35") will show all colored wool prices :)
fixed sellall bug when an item not for sale
/shopbuystack (buystack): 	buy a stack of an item (usually 64)
/shopbuyagain (buyagain,sba): 	repeat last buy action
/shopsellagain (sellagain,ssa): repeat last sell action
/shopkits (skits):		show a listing of avalliable kits (will be elaborated later)
can now buy kits :)
/add now has sell as an optional parameter.. will set to -1 if not given (or if is a kit)


Version 1.5.9b - 3/11/11 - jascotty2
width outputting in minecraft chat (for /shoplist): now can have item (or listing) right-align, left-align, or centered
implemented transaction log and total transactions record
no longer dependent on permissions: if missing, ops have .admin.* & everyone has .user.*
bugs: MySQL buy & sell is decimal(6,2), limiting price to 9,999 (plus a nondescriptive error)
	- to fix (db minecraft, table BetterShop): 
		alter table minecraft.BetterShop change column buy buy decimal(11,2);
		alter table minecraft.BetterShop change column sell sell decimal(11,2);
     unkown error: MySQL connection seems to get dropped & won't connect until restart plugin
		seems to stem from iConomy (v4.4 (Arcadia)) or v0.2 [Coelho].. i only have 4.4, but .2 is being logged
		shopload should fix this, but iconomy will still be down.. if you have a plugin like hotswap, reload iConomy
     not a bug, but forgot to remove: logs select statements being executed

Version 1.5.8(?) - 3/10/11 - jascotty2
fixed a sell error for one parameter
major-ish code restructure - removed data redundancy
/ shopsell all [item] (alias to /shopsell [item] all)


Version 1.5.7(?) - 3/10/11 - jascotty2
/ shopsell [item] all added: sell all of an item that you have
fixed total sell value min to .01 instead of 1 (if your server uses low prices)
	before this fix, one could get around this check by trying to sell alot of an item
now automatically downloads mysql dependency (zip from mysql mirror & unzip or from iConomy mirror)


Version 1.5.5(?) - 3/9/11 - jascotty2
Pricelist can now be in a MySQL database


Version 1.5.4 - 3/2/11
Fixed some lingering bugs with lologarithm's help.


Version 1.5.3
Fixed sell 0 < sellprice < 1 bug.


Version 1.5.2
Now it'll convert your old pricelist.yml to the new 1.5.x format automagically!


Version 1.5.1
Fixed the bug where setting a price to -1 didn't disable it
Fixed the "LOLWTFDOESN'TWORK" bug. 
Made price-list listing configurable in config.yml. The way it was 'sposta be.

(older versions not shown..)

===============================================================================
Building
===============================================================================

To build, you need to include the following as libraries:
    CraftBukki:      #684
    Bukkit:          #654
    iConomy.jar	     (4.6.5)
    Permissions.jar 
    Help.jar	     (0.2)
    BOSEconomy.jar   (0.6.2)
    Minecraft IM.jar (0.1.5)
    mysql-connector-java-5.1.15-bin.jar
    

If you want helpful bukkit javadocs, you should get:
    the Bukkit source code

Once it builds, compress on linux using:
    jar or an equivalent archiver
      jenny:~/workspace/BetterShop/bin$ jar -cf BetterShop.jar *

or on Windows using:
    I have no clue. I guess something similar to jar.

try NetBeans :)

And it's ready to be placed in a plugins directory :)

About

Bukkit shop plugin that uses iConomy

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published