Rebalance Villagers
» If you like this plugin you should definitely check out our other plugins too «
Rebalance Villagers
This plugin allows you to configure a detailed collection of game mechanics pertaining to villagers. Its most notable feature is complete control over the offers which can be generated - by default, it also starts with an extensively reworked set of prices to make trading dramatically less abusable while still allowing it to be profitable (more on that later).
This plugin's default settings may be enough to repair the currently exploitable villager trading system - however, in case you want your own server to have a few special touches, so trading can be balanced perfectly for it, this plugin allows you to adjust the following:
In config.yml, you'll find general settings:
- Control over offer removal: You can choose how many times an offer can be traded before being removed, how long it takes for offers to be removed, or simply disable offer removal altogether.
- Control over offer generation: You can choose how many offers a villager starts with, how many offers are generated at once, how long it takes for offers to be generated, whether villagers generate offers after any trade, and what the chance of offer generation is.
- General trading settings: You can control how long the decorative particle effect lasts when villagers add/remove offers, choose whether players can trade with villager children, and choose whether players can squabble over villagers by letting them kick each other out of the trading window.
- General settings about villagers themselves: You can specify their max health, make them invulnerable to all harm, and choose which villager professions can spawn naturally.
- There are also some technical settings related to using this plugin with Shopkeepers, but once full compatibility between Shopkeepers and this plugin are established, these will be removed (these settings don't do anything magical; you won't miss them).
In offers.yml, you'll find settings to control the offers villagers can make:
- You can define your primary currency item, which will be used by all non-custom offers you include - it can also be used in your custom offers, for convenience.
- You can define all of the offers which can be generated by each villager profession, and the offers which get generated by default.
- You can define offers for your own custom villager professions (which can be spawned with world editors, or by editing config.yml to allow them to spawn naturally). The number of custom professions is virtually unlimited (unless you want more than 4 billion), but they all appear identical to the unused green villager.
- You can remove existing offers or make them never generate.
- You can define offers as 'buys', or 'sells', to use an existing table of prices, or 'other' to create custom offers.
- Custom offers give you full control of the two input slots and output slot, allowing for offers which don't use the currency item, offers which provide random or specific enchantments, offers with any damage value on any item or block, and almost any type of offer a world/NBT editor could create (the only thing you can't do is have offers which provide books containing specific text). Note that item quantities and enchantment levels can be randomized, too!
- You can control the values in the tables of prices, used by non-custom offers.
All of these features are explained in detail in the config files. In fact, offers.yml has a sort of "tutorial" on how to edit it.
By default, this plugin...
By default, this plugin disables the vanilla system of offer removal, and changes the offers which villagers can generate.
No offers are added or removed, and the chances of offers are also the same as they are in vanilla Minecraft. However, pricing has been extensively reworked, based on my work in this thread. Basically, I have created a chart which carefully balances the values of items based on many criteria, geared at producing a far more sensible and less exploitable set of prices than the vanilla system.
The reason my plugin disables the offer removal system by default is because, aside from many players' complaints, this thread explains why the system makes trading unusable without exploitation. Just as my defaults are intended to reduce the potential for exploitation, they are intended to reduce the need for exploitation.
If you wish to start with vanilla Minecraft settings, simply copy the contents of "offers-vanilla.yml" into offers.yml, and see the top of config.yml for vanilla defaults on offer removal.
Other Features/Conveniences
First, alongside the detailed explanations in config.yml and offers.yml, you'll be happy to know my plugin has a load of failsafes packed in. If you configure it incorrectly, the plugin will not crash (unless you make the config files unreadable!). Instead, it will choose some value which allows it to safely run (for example, if you specified a number as 0 when the lowest accepted value is 1, the plugin will use 1 instead). Now, you may be thinking that's a bad thing, but the plugin will let you know when this happens:
Warnings will only appear when you've done something incorrectly in the config - otherwise, normally the console doesn't get spammed ;)
Also, if you leave a value out of the configuration, the plugin will usually revert to a default - but don't make a habit out of this :p
The vanilla generation system doesn't allow you to earn more than one emerald from selling an item, unless you manually specify a custom offer - despite being able to specify offers which *give* more than one item in exchange for one emerald. My plugin fixes this, making the buy and sell values tables formatted the same way. Thus, it's easy to make offers like this one:
Probably my most convenient features in this plugin are Smart Stacking and Smart Compression. Let's say you want a villager to sell a diamond helmet for 98 emeralds. A player can't place more than 64 emeralds in one slot, and Smart Stacking realizes that. Smart Stacking will automatically do this for you:
Smart Stacking basically makes 128 the maximum amount of an item a villager can accept (warning: Smart Stacking is currently not smart enough to realize certain items do not stack or stack only up to 16. For this, I'm afraid you'll need to make a custom offer, but that's not difficult).
Sometimes you need a villager to take more than 128 of an item, and that's when Smart Compression comes in. Here's how an offer requesting 129 emeralds is handled:
If you were to convert those emerald blocks into emeralds and add the rest of the emeralds to it, you would see the total is indeed 129. Smart Compression effectively increases your maximum up to 640: a stack of the compressed item, and a stack of the uncompressed item. Also, Smart Compression works on emeralds, diamonds, gold ingots, gold nuggets, and iron ingots, all of which can easily be converted into a compressed form at a ratio of 9-per-compressed-item and likewise converted back - thus, you can set your currency item to any of those items and rest assured that Smart Compression will still apply.
Using My Chart to Balance Trading Yourself and Exporting the Results to Your Configuration
I suppose this is also a convenience/feature, but it deserves its own section. Remember that chart I mentioned earlier? It can be downloaded here, and is fully interactive.
The only cell in the chart with a value not calculated from other cells is the gold-colored cell next to Gold Ore. It's a sort of "gold standard", if you will, which determines how much emeralds are worth. Double it, and emeralds are halved in value. Halve it, and emeralds are doubled in value, and so on. The rest of the chart will update with your changes.
If you don't want to use emerald as your currency item, you can choose an item you do want to use. If it's in the chart, find its value in the "Adjusted for Usefulness" column. This column is bold because it represents the actual worth of that item in emeralds. Now, take that number and invert it, and place that inversion in the golden cell (so, to set the currency to diamond, you would put 1/17.7999 into the gold cell). If you did this correctly, the "Adjusted for Usefulness" of that item should read 1, as it is indeed worth one of itself. All other cells in the chart have been recalculated in value, and are now priced in that item instead of emeralds.
You can make any other changes to the chart by editing the formulas of its cells, or editing the special variables to the right of the chart (the "Modifiers" column, U).
Finally, look for "Rebalance Villagers Plugin", cell AC1. Around there, there are four cells (in the "Copy this code into offers.yml" column) which you must copy the contents of into offers.yml. The proper destinations of each are specified in AC, while the actual values to copy are in AD. Simply copy these in, erasing the unwanted original values in the process, and the plugin will new use these values.
Note: If the cell AF6 says there are errors, please look in the column V ("Valid Offer Checker") for what the errors are. These errors are when invalid offers are created, for example offers which are impossible to complete (requesting more items than the player can put in the input slots), offers which would produce impossible item stacks (e.g. stacked tools), or nonsensical situations such as a villager providing items at a cost of zero emeralds. So remember to make sure there are no errors reported in AF6 before you copy the config outputs!
Oh, and if you changed the currency item in the chart, be sure you change 'currency-item' in offers.yml too!
Dev Builds
You can always find the latest snapshot in the Jenkins.¹
Github Source Code
The source code of this plugin can be found here. It's my first plugin, so feel free to let me know if I've done anything horribly nooby :p
If you would like to contribute to the plugin, you may use Pull Requests. Add yourself with an '@author' in the javadoc tags of any part you create or substantially modify - you can identify yourself with whatever name you like. Of course, I will publicly acknowledge that you have contributed to this project.
Special Thanks
- WolfieMario, the initial creator of this plugin: thanks for the whole idea and opportunity with this great plugin and thanks for all your work you've done here!
- nisovin, the creator of the Shopkeepers plugin: thanks to him/her making Shopkeepers open-source, WolfieMario could make the plugin compatible with his and rest assured that he's not doing anything horribly wrong in the code.
- Icyene, for pointing WolfieMario in the right direction when he started - without his good deal of help, he would have had no clue how to start coding this plugin.
¹ 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.
· · ·
» Powered by Cube Nation «
Any chance that the vanilla enchanted book offers will be implemented in a future update? Or at least a guide on how to make them ourselves? :)
Not sure if this has been asked, but can I have 2 currency-items? The default is emeralds. I wanted to also use gold?
currency-item:
emerald
gold (can I do this?)
@DoubleZ Villagers don't understand [:data] of item, it's bug minecraft.
Does this plugin, in any way shape or form, alter villager spawning, or even has anything to do with it? I've been having a problem with one NPC village in superflat that spawns 40000+ villagers in a single chunk for some strange reason. I'm not saying this plugin is doing it, I'm just trying to debug the issue, so I'd figure to start searching in any place possibly relevant, including here.
Thanks for this plugin!
I looked, but didn't see this already asked: Currently my librarians are offering enchanted books for rather high prices using the vanilla system. After looking through the config files that come with the plugin, I don't see anything about those books in the config. Will this plugin remove the offers from the game that my librarians have been giving me?
hi, this is a great plugin and I love it.
I have a question, I have wrote a set of custom trades for 4 types of log.
Then, I found that if one of four new log trades is generated during villagers spawn (ex. by spawn egg), it can be seen but don't work. If one of four new log trades is generated after villager trade, it works normally. Is it a bug?
Here is the part of log trades:
farmer:
buys:
cloth: 0.1
sells:
'103': 0.1
other:
log0:
buyA:
item: currency-item
amount: [1]
sell:
item: log
damage: 0
amount: [20,30]
probability: 0.5
log1:
buyA:
item: currency-item
amount: [1]
sell:
item: log
damage: 1
amount: [20,30]
probability: 0.5
log2:
buyA:
item: currency-item
amount: [1]
sell:
item: log
damage: 2
amount: [20,30]
probability: 0.5
log3:
buyA:
item: currency-item
amount: [1]
sell:
item: log
damage: 3
amount: [20,30]
probability: 0.5
@WolfieMario
Thanks, will let server peeps know that the coal term includes charcoal. And will change offer details to coal.
It doesn't matter whether they ask for coal or charcoal - the items share an ID and differ only by damage value. A coal-buying villager would accept either.
If you really want it to say charcoal instead of coal, you can create a custom offer in the 'other' section (offers.yml has a guide on this), where the item they buy is coal with a damage value of 1. But you really don't have to worry about this aside from aesthetics and potential player confusion - as I said, coal-buying villagers will accept charcoal at the same price.
Have the recent release on our server, but keep getting an issue with only one item - Charcoal.
Regardless of what format or value I attempt, keep getting similar warning statements in console as follows:
2013-02-19 08:55:06 [INFO] [Rebalance Villagers] Warning: 'charcoal' at 'potential-offers.blacksmith.buys.charcoal' is an unknown item! Please check your offers.yml file! Use a data value if necessary. 2013-02-19 08:55:06 [INFO] [Rebalance Villagers] Warning: 'charcoal' at 'buy-values.charcoal' is an unknown item! Please check your offers.yml file! Use a data value if necessary.
2013-02-19 10:04:15 [INFO] [Rebalance Villagers] Enabling Rebalance Villagers v1.4.1 2013-02-19 10:04:15 [WARNING] Plugin from file: file:/home/usky/plugins/RebalanceVillagers-1.4.1.jar has embedded Metrics in the default package. This is not advisable, go nag them! 2013-02-19 10:04:15 [INFO] [Rebalance Villagers] Warning: '263,1' at 'potential-offers.blacksmith.buys.263,1' is an unknown item! Please check your offers.yml file! Use a data value if necessary. 2013-02-19 10:04:15 [INFO] [Rebalance Villagers] Warning: '263,1' at 'buy-values.263,1' is an unknown item! Please check your offers.yml file! Use a data value if necessary.
I have also tried data values: '263:1', '263,1' and 'coal:1'. As this is a Skyblock server, we need charcoal and not coal as a trade item.
Any pointers on this?
@ooarashi I'm not sure why CubeNation's link is broken in the thread, but you can still find it here: Link Removed: http://www.mediafire.com/?bi0xjgswbyyar55
@elias1979 I balanced this system without regard to the rarity of emerald ore. I balanced it by acknowledging that emeralds are currency, nothing more, and that it makes no sense to buy/sell in bulk (if emeralds were worth as much as diamonds, considering their rarity, you'd afford 64-65 coal per emerald, and need to give around 794-795 paper for a single emerald).
You may not be familiar with this, but Jeb at one point removed the ore from the survival game. Does this mean that, at that time, emeralds should have had infinite value, since they'd be infinitely rare without villagers to trade? Then Jeb re-added it, slightly rarer than before (and no longer in veins, but as single blocks), and explicitly said you are not meant to get your emeralds by mining. The ore is just a nice find, and its rarity has no reflection on its value in trading: just pretend villagers all mined away the emeralds in most of the world for their economies.
Thus, I made the value of the currency fairly low - low enough that you don't have to pay more than a stack of anything for an emerald. Do you buy one soda with less than three dollars, or do you buy an entire vending machine of soda for several hundred? Most real-life economies have a very small base currency unit, so that we can buy/sell very cheap items on the individual level. If the penny was worth $100 (and all other currency adjusted accordingly), then you'd need to buy or sell everything in bulk.
Now, if you want emeralds to be worth more, you can just download that chart I linked above, and change the gold-colored cell: making its number lower increases the value of emeralds. The chart even has cells to export the values to the plugin config, complete with warnings that you've rendered certain trades impossible because two slots cannot contain 794 paper.
Personally, I just keep in mind that emeralds aren't the same as emerald ore (breaking open your ore is a one-way process), allowing the ore to remain rare, while the currency is reasonably common. This works well when you consider how rare lapis ore remains on servers despite how common lapis powder may be. If you honestly want emerald ore, bring Silk Touch. If you want money, go trading.
@MrMightyGnome
yes there is.
Thanks for making the plugin, i only have a problem with the economy distribution, im sorry to say but i hate this balancing, if this would be acceptable emerald ore would need to be more common than coal.
The spreadsheet link is broken.
Is there an option to change all that emerald currently to gold and gold nuggets?
@BBFChaser
@datamann10
See the Jenkins for a pre/dev build: http://ci.cube-nation.de/job/Rebalance%20Villagers/
@datamann10
Agreed this will not even launch in 1.4.7
uuuupdate!!!
The actual CB 1.4.6-R0.3 beta seems kind of stable to us so far, so I thought I could now upload the 1.4 release and did so. It's still in review and should come up in a short while in the download section on the right.
Regards DerFlash
Thank you to anyone involved in this project, I can't wait for this plugin to update to 1.4.6 in order to make trading worth existing in my game.
@BONNe1704
@TinCow
1.4.6 is still an alpha release, so until it goes "recommended" or at least some kind of stable beta I can't really give support for it and so I should not release it here.
But for sure there IS already a snapshot build compatible with 1.4.6 in the "Jenkins". See "dev builds" section above.