- I originally made this plugin because I wanted to make a dynamic shop without "spawning" items into it. Starting with 0 items in the shop has several advantages. First, it means that even if something goes terribly wrong, your server's economy won't be flooded with diamonds or other valuable materials. Secondly, it makes setting prices far easier, as the prices of items will essentially regulate themselves after HyperConomy reaches "hyperbolic" mode. (When initiation = false) For instance, if someone feels that a certain item's price is too high, they will simply sell a lot of that item to the shop in order to make money, or exploit the high price. Once the item's initial price reaches the item's dynamic price, its price will begin to decline. It will continue to decline until that player is no longer willing to sell the item for the offered shop price. Third, allowing only player created items in the shop means that players will still have to work for rare materials. Someone will actually have to mine the diamonds, or collect the redstone ore with Silk Touch, rather than simply buying it after farming thousands of cobblestone, or something to that effect.
- If, despite the disadvantages, you would still prefer to "stock" your shop. Simply set the stock equal to the median stock value. This is the point at which the actual cost/value will be equal to the item's cost in the items.yml file. It's the point at which prices will center on the hyperbolic curve. If you'd like to set all items and enchantments to their respective median stock values. Just use the /setstockmedianall command. This will make it easy to pre-stock your shop. Be careful with this, however, as it will stock your shop with dangerous items such as bedrock, experience bottles, and spawn eggs. Make sure to either remove these items from your shop(s) with /removeitem, remove them from your items.yml file, or simply set their stock back to 0.
- Also, it works to allow some items to be prestocked and others to start at 0 stock. Each item has its own unique settings. Read the items.yml page in the Advanced Configuration section for more information.
- On my server I like to allow players to purchase items such as ice, chainmail armor, and spider webs for a very high price. If you'd like rare items with high prices that players can save up for, it works quite well to set those items to use a static price. A static price simply means that the item will always cost the same amount, no matter how much stock is in the shop. After setting a static price it works well to increase the static tax to a high level, so that players can't buy the item and then sell it back to the shop after using it with no loss. On my server the static tax is set to 300%
- The default values/medians are the same as the ones that are active on my server. I will update them periodically. This means that the default prices and values are *probably* not terrible. And if you'd rather not have to set all of your own prices, it will probably work alright to just use the default ones. They've been working alright on my server. Let me know if you feel that initial prices or other settings for items should be adjusted in the default items.yml file.
- The plugin's pricing system is based on a hyperbolic curve. Google "hyperbola" if you don't know what that is. If you were to graph the prices of an item in HyperConomy, they would look similar to the graph of y = (1/x), or f(x) = (1/x). The prices would be the y axis, and the stock the x axis. The point at (1,1) is the median. As the stock decreases (x decreases), the price (y) increases toward infinity as it approaches the vertical asymptote at x = 0. Similarly, as the stock increases, the price approaches 0 as the graph approaches the horizontal asymptote at y = 0.
- The advantage of using a hyperbola over other dynamic pricing schemes is that it is highly reactionary. Once an item reaches dynamic pricing. (initiation = false) it will become impossible for anyone to ever buy all of that item from the shop again. This is simply because the price will accelerate toward infinity as the stock of the item approaches 0. If someone wanted to buy the last item in the shop, they would have to spend an infinite amount of money.
- When making the plugin I encountered a major issue in my pricing algorithm. If I wanted to start my shop with 0 items in it, the first item would have been worth an infinite amount of money. This would obviously not work, as everyone on my server would have had unlimited money the moment they sold their first item. The initial pricing period was designed to prevent players from making absurd amounts of money while the stock of an item was near 0. If you'd like to encourage players to sell an item to the shop, you can simply increase its initial price. The more you increase the initial price, the more quickly the item will start using a dynamic price. For instance, if you set an item's initial price to 1 million $, a player would typically only need to sell a single item before the item's dynamic price would be higher than its initial price. Therefore, the second item sold would switch over to dynamic pricing and sell for less than 1 million. The question is: how much extra money do you want players that sell the first items to your shop to make? I feel that selling should be encouraged with a price incentive, but not too much. Setting the initial price to one million would quickly inflate your servers economy. (And make your currency worthless.) On my server it has worked well to set the initial price to be double the item's actual value. (The value of the item when the items stock is equal to the median stock.)
- When setting up your prices, keep in mind that the larger the item's median value, the more slowly its price will change. If you want an item's price to change rapidly, set the median to a low value. If you're running a very large server, you'll likely want to raise the median stock to a higher number for most items, since I tried to balance the default settings for a medium sized server (20-30 players).
- I wanted to allow players to trade enchanted items, but I quickly realized that the number of possible unique item/enchantment combinations was massive. And it will likely increase in future Minecraft updates. To solve this problem enchantments are treated like items themselves, separate from the items they're on. This means that to buy and sell enchanted items, you will first have to sell the enchantment and then the item. If you'd like to buy an enchanted item you'll first have to buy the item and then buy an enchantment for that item.
- I decided that making each enchantment have the same value regardless of what item it was on wasn't a good idea. Instead, the enchantment's value/cost is associated with the material that its on. By default, diamond enchantments, for instance, are worth far more than enchantments on other material classes. One reason for this is that it's far easier to enchant a gold item than it is other materials. It would be very unfair for someone to get to level 20, get fortune 3 on a gold pick, sell it, and then buy it back on a diamond pick. Diamond is the second hardest material to enchant, after stone. And secondly, an enchantment on a material that is weaker than diamond just isn't worth as much, simply because it won't last very long and is unlikely to be as effective as one on a diamond item. Normally it would be impossible to detach an enchantment from its item class, so it only makes sense to associate the enchantment's value with the material that it's on. Doing otherwise would be a massive disadvantage to enchantments on diamond items and a huge buff to enchantments on lesser materials. Without item class specific enchantment values (class values), players would just skip going to level 50 and would instead just enchant high level enchantments at level 25 on a gold item, sell it to the shop, and then buy it back on their diamond items. If you'd like players on your server to have easy access to enchantments, however, you could simply set all of the enchantment class values to the same value. The class value is just a price modifier.