Talk:Trading

Ore


I don't think there is actually a new ore block, but I'm not sure. The image of that block (in the inventory) looks very similar to the smooth stone block, but there seems to be little specks as shown in the enlarged file image. - Asterick6 (talk) 06:07, 22 May 2012 (UTC)


 * That's what an ore block is. It's an overlay on a smoothstone image. Joe4429 06:08, 22 May 2012 (UTC)


 * (I know what an ore block is). Ok then this isn't a real image, and I don't think there is an actual ore block for the coin. - Asterick6 (talk) 06:13, 22 May 2012 (UTC)


 * It's in the top-right corner of the image. I created this out of what I can see. Joe4429 06:22, 22 May 2012 (UTC)


 * Ah I see it now. Interesting. - Asterick6 (talk) 06:36, 22 May 2012 (UTC)


 * Wait maybe this isn't a new ore, but just a new texture for the redstone ore. If there's a new gravel texture, then there might be a new redstone ore texture. We should just wait until more info is released... - Asterick6 (talk) 06:48, 22 May 2012 (UTC)
 * Here's an enhanced screenshot btw. - Asterick6 (talk) 21:43, 22 May 2012 (UTC)


 * I'm under the impression it's either a new texture, an ore he made just for testing, or something which may or may not be related to the trading system. In the case of testing, it'd drop coins just so he knows how the game drops them. I honestly wouldn't like an ore that drops acceptable coins or being able to personally craft coins which a Villager would accept. If money worked like that... Well. If it's crafted from some new gem, maybe it'd make sense, but you'd still have to craft it. The same picture shows 20 raw chickens gets a coin. MegaScience 09:52, 22 May 2012 (UTC)


 * Btw for the other comment about the trade file: I just copied that from the Villager article. You gotta remove that one too then. - Asterick6 (talk) 21:01, 22 May 2012 (UTC)

Chicken clarity
Although it says 1 coin for twenty chickens i bet it is similar to how if you put 64 wood blocks the output on the crafting table still says 4 planks, and you just press it 64 times or shift-click.It basically means you get 64 sets of four, so chicken would go 20 groups of 1.


 * I suspect similarly. Until we're sure of anything, we shouldn't put like "This equals that." or "This ends up as that." I might have added something similar, sorry if I did. Coins might stack to different amounts... Who knows? MegaScience 19:21, 22 May 2012 (UTC)


 * I just spawned around 100 villagers and tried to trade with them. First thing I realized is that most have only one Item in their Inventory, and only few had the possibility to trade 2. Then, I saw that ONE sold me Bottles o' Enchanting, meaning they are now avaliable in Survival Mode. Next thing to mention is that the Prices may differ (2 villagers both sold diamond Chestplates, one for 16, one for 17 Emeralds), and that the price system does not make much sense (4 diamonds for 1 Emerald WUT? never gonna do that). Librarians usually buy Paper/Books and sell Bookshelves.
 * --JayTie


 * You can even trade for chain armors (among all the iron and diamond tools and armors the game has) with blacksmiths. Also only the priests (purple clothes) can give you bottles o' enchanting. However, I noted that the prices aren't always the same from one villager to another.
 * --Pauolo 17:15, 24 May 2012 (UTC)

More Trade Get!
After trading, I noticed the villager had a purple swirly particle effect. The villager then had more options available for trading. So apparently, by trading with a particular villager, you can gain favor and open up more items to trade with that one villager with eight trades maximum. --108.76.103.35 16:44, 24 May 2012 (UTC)


 * That's right, but sometimes it requires more trading than only one to access to new options (maybe a bug, it seems this snapshot is quite laggy and has problems with map loading).
 * --Pauolo 17:01, 24 May 2012 (UTC)

Trading info on Villager article
I added trading info to the Villager article before I knew this article existed. I included a table which includes the quantities villagers buy/sell items and their prices, and I also included a chart of 55 test offers made by each villager class. I'm not sure how to merge that into this article, as some of the information here seems outdated or missing, but I don't think overwriting those parts of this article is necessarily a good idea. If anyone wants to make the merge when more is known about trading, feel free to do so. Just avoid throwing out data from either article :p --WolfieMario 21:09, 24 May 2012 (UTC)

I'm doing the trade data on this article. I'll go ahead and merge your findings with mine, and remove the table from the Villager page. (I'll leave the picture there for now; that's nifty.)

...Oh, I haven't been paying attention to professions! I'll add the gold ingots to other professions, thanks. I'm merging by taking the min and max from each. I'm going to keep the table format here, but if someone wants to consolidate the formatting down the line, that'd be fine. --Zeta0134 22:40, 24 May 2012 (UTC)

I'm going to bring the Trading text from Villager over to the Trading page, and replace it on the Villager page with a link. That should eliminate the redundancy and let us maintain it in one place.

--Zeta0134 22:49, 24 May 2012 (UTC)

EDIT: All done. Check to make sure I didn't butcher anything; it looks correct to me. --Zeta0134 22:53, 24 May 2012 (UTC)


 * You omitted some data (specifically, larger price ranges I found). I also re-added my observation chart, as there's currently nothing indicating how rare or common various offers are. --WolfieMario 23:13, 24 May 2012 (UTC)


 * Ayaaa, I updated my list in notepad++ but didn't transfer to the wiki. My bad, but looks like you fixed it. This page is certainly coming together. :D Most of the prices have stabilized for my testing; if anything, I think the only deviations will be in the blacksmith. --Zeta0134 23:25, 24 May 2012 (UTC)

pricing is a joke
i do hope this gets made more reasonable at official release, i mean damn, 4-5 diamonds/8-9 iron for a single Em and a compass costs 10 Em? sheeeeeeet. 96.61.162.71 04:21, 25 May 2012 (UTC)

You can also sell (renewable) wool at the rate of 20/1, and buy diamond gear for as little as 7 Em. There does not appear to be any kind of internal value to the items, I mean, a compass costs more than a diamond helmet.2.109.200.145 15:51, 25 May 2012 (UTC)Anonymus


 * I agree about diamonds, but 1 stack of logs gets you 3 Em if you cook them into charcoal so you can get lots of Ems cheaply. 78.150.199.100 13:54, 27 May 2012 (UTC)


 * They buy paper. One can make a huge automatic sugar cane farm for that. 4 stacks of sugar cane buy a diamond pickaxe, or a stack of cooked meat. 17,5 stacks of sugar cane buy a full diamond armor set. 2 inventories and a half buy Bottle o' Enchanting for lvl 50. --88.173.92.54 06:40, 29 May 2012 (UTC)

"villager" class villager
Can anyone find out if the villager (green robes, don't naturally spawn) has anything to sell, and if so, what?
 * It always only buys 8-9 gold ingots per emerald, and has no other offers. I put this information up before, but it seems it's been removed - it seems anything that does not normally occur in vanilla tends to get removed from this wiki :/ --WolfieMario 14:09, 25 May 2012 (UTC)

Will Obsidian be renewable?
You could buy Redstone and pour lava onto it, but is that a bug that might be fixed some time? 78.150.199.100 13:37, 27 May 2012 (UTC)

Will Lapis Lazuli be renewable?
Lapis Lazuli does not appear anywhere so I guess that is still non-renewable. 78.150.199.100 13:49, 27 May 2012 (UTC)

Price Information On all Items
Putting forward the idea to have item/block summary box (usually in the top right of a items page)have a new row added for example |cost = 1:8-10 (1 emerald for 8 to 10 of said item) So that when your on the items page you can see its costs 176.251.34.210 11:17, 28 May 2012 (UTC)

Villager Trading - Multipart Trades
The new trading system allows for multipart trades; 2 items go in (usually one of them Emerald), one item comes out. So far, I'm only seeing the PRIEST use this for applying enchantments. I'm presently building up a list of the options. So far, all enchantments that I've seen are level II of various things on tools and armor. --Zeta0134 14:35, 31 May 2012 (UTC)

Edit: There's the mentioned gravel trade with a blacksmith: 10 gravel and 1 Emerald for 2-3 Flint. No clue why anyone would actually do this of course. I'm also noticing a pattern with the enchantments; it seems to be a random set of enchantments, but the cost is always 2-4 emeralds. My guess is the level is always constant, maybe level 20? (That would make logical sense, requiring the player to get level 30 enchantments on their own.) More testing is needed, but I have to go to work now. Here's my list so far; if someone wants to continue and put this in the wiki, have at. This is bound to be very incomplete.

Enchants (priest) Iron Axe -> 4 -> Unbreaking II - Efficiency II Iron Axe -> 3 -> Unbreaking III Iron Pickaxe -> 2 -> Fortune I

Iron Chestplate -> 2-4 -> Fire Protection II Iron Chestplate -> 4 -> Projectile Protection III

Diamond Axe -> 4 -> Unbreaking II Diamond Pickaxe -> 2 -> Efficiency III

Diamond Chestplate -> 3 -> Protection II

Sells (priest) Eye of Emerald (1) -> 7 - 10

Buys (Librarian) Written Book -> 1

Sells (Librarian) Watch -> 10

Sells (Blacksmith) Arrow (5) -> 1

Converts (Blacksmith) Gravel (10) -> 1 -> Flint (2-3)

Buys (Farmer) Fish (9) -> 1 --Zeta0134 14:51, 31 May 2012 (UTC)


 * Are you sure that's what you got on a diamond axe? I made the same trade, and I got an axe with Unbreaking III and Efficiency III... Which would suggest that 1) These trades are just as random as actual enchanting, or 2) It's dependent on your level: I was in Creative mode, which automatically gives you maximum enchantability. ~GorgeousTaylor


 * The enchantments are random using level 5-19. (What that actually means is sort of up in the air, since enchantments were also scaled back to max level 30 with the update.) WolfieMario is doing disassembly of the code and filling in exact values, so the article should be completely accurate by the end of the day. To answer your question, yes the items will get different enchantments randomly, but it's not based on the player's level. --Zeta0134 17:24, 31 May 2012 (UTC)

Code analysis of 12w22a villager trading
Sorry, I didn't feel like making 275 trades again, so I instead decided to peek at the code :p For 12w22a, the villager class is. appears to be the method behind generating offers, and conveniently lists all offers. is the item class and  is the block class. Ctrl+Clicking in Eclipse makes it easy to find out what each offer is.

At the end of the method, it's revealed that the method is capable of adding multiple offers at once, but all calls to the method only request one new offer to generate. In addition, if no potential offers are generated, a default offer of buying gold ingots is generated - this is why the unused villager will only request gold ingots.

The method  called in the offer-generating method makes a new buy offer, while calls to   make new sell offers.

All buy offers are in exchange for 1 emerald. The quantity of item bought is derived from the contents of the  hashmap defined in the static section at the bottom. If no definition exists for an item in this hashmap, the quantity defaults to 1. If the first Integer in the pair of Integers of  (as defined in the static section) is greater than or equal to the second, then that is the amount which will be used for the stack quantity bought. Otherwise, the stack amount will range anywhere between the two integers (note that it can be as low as the minimum value, but only as high as the maximum value minus one, due to how  means coal is always bought in stacks of 16-23.

For sale offers, the stack value is determined in an identical manner, using the  hashmap (also defined in the static block at the bottom). However, the hashmap has negative values defined for some items. If this happens, the quantity is used (negated of course, so it is positive) for the item stack sold, and the cost in emeralds is 1. Otherwise, the quantity is the cost in emeralds and the item stack sold is 1. Therefore, it is impossible (with the current code) for a generated offer to have multiple emeralds in exchange for multiple items. Note that for negative values, the first Integer is actually the negation of the upper bound, and the second is the negation of one less than the lower bound.

For help understanding the  hashmap entries:   means flint and steel, in exchange for exactly 3 emeralds (remember that the second number is the upper bound plus one, so the actual range is [3,4), or [3,3], aka simply 3).   is bread, sold in stacks of 3-4 (consistent with observed values).

The probability of a given offer being a potential offer is equal to the float value passed to  or. However, the actual probability of getting this offer is less: first all potential offers are selected, and one offer will be selected at random out of these. Nevertheless, this is helpful at gauging the relative rarity of any given offer, so I will add information such as "rare" or "common" to the article itself.

Note that there are also special offers, not generated with the  or   methods.

The first unique offer is a farmer offer: at 50% chance, the following code will add a new potential offer:. This is 10 gravel and an emerald, in exchange for flint in quantities of 2-3.

The other special offers are by priests. Specifically, a 10% chance of each enchantment offer being a potential offer. Items which can be enchanted are iron and diamond swords, iron and diamond chestplates, iron and diamond hatchets, and iron and diamond pickaxes. The line  is repeated for each of these items (assuming that particular item will be a potential offer, which I already mentioned is a 10% chance). The request is the item in question and 2-4 emeralds, and the sold item is, to my understanding, the same item enchanted with a level of 5-19.

Here is the entire code of  (the villager class, containing all information on trade offers):

import java.util.*; public class gd extends arj implements aiq, aro {       public gd(acz acz1) {           this(acz1, 0); }       public gd(acz acz1, int j)        { super(acz1); b = 0; c = false; d = false; a = null; f_(j); bo = "/mob/villager/villager.png"; cl = 0.5F; aP.b(true); aP.a(true); bV.a(0, new aqt(this)); bV.a(1, new hj(this, aqw, 8F, 0.3F, 0.35F)); bV.a(1, new is(this)); bV.a(1, new qb(this)); bV.a(2, new cs(this)); bV.a(3, new ys(this)); bV.a(4, new ajp(this, true)); bV.a(5, new abf(this, 0.3F)); bV.a(6, new ada(this)); bV.a(7, new aeg(this)); bV.a(8, new zy(this, 0.32F)); bV.a(9, new aan(this, aex, 3F, 1.0F)); bV.a(9, new aan(this, gd, 5F, 0.02F)); bV.a(9, new ajl(this, 0.3F)); bV.a(10, new rw(this, ajf, 8F)); }       public boolean b_ {           return true; }       protected void g {           if(--b <= 0) {               o.B.a(iv.c(s), iv.c(t), iv.c(u)); b = 70 + Y.nextInt(50); a = o.B.a(iv.c(s), iv.c(t), iv.c(u), 32); if(a == null) {                   ba; } else {                   zi zi1 = a.a; b(zi1.a, zi1.b, zi1.c, a.b); }           }            if(!A && g > 0) {               g--; if(g <= 0) {                   i(1); e(new atg(agj.l.H, 200, 0)); }           }            super.g; }       public boolean b_(aex aex1) {           if(!A && !bk) {               if(!o.H)                { c_(aex1); aex1.a(this); }               return true; } else {               return super.b_(aex1); }       }        protected void b {           super.b; ag.a(16, Integer.valueOf(0)); }       public int d {           return 20; }       public void b(akt akt1) {           super.b(akt1); akt1.a("Profession", x); akt1.a("Riches", as); if(f != null) akt1.a("Offers", f.a); }       public void a(akt akt1) {           super.a(akt1); f_(akt1.f("Profession")); as = akt1.f("Riches"); if(akt1.c("Offers")) {               akt akt2 = akt1.m("Offers"); f = new ia(akt2); }       }        public String u {           switch(x) {           case 0: // '\0' return "/mob/villager/farmer.png"; case 1: // '\001' return "/mob/villager/librarian.png"; case 2: // '\002' return "/mob/villager/priest.png"; case 3: // '\003' return "/mob/villager/smith.png"; case 4: // '\004' return "/mob/villager/butcher.png"; }           return super.u; }       protected boolean d_ {           return false; }       protected String m {           return "mob.villager.default"; }       protected String n {           return "mob.villager.defaulthurt"; }       protected String c_ {           return "mob.villager.defaultdeath"; }       public void f_(int j)        { ag.b(16, Integer.valueOf(j)); }       public int x {           return ag.c(16); }       public boolean J_ {           return c;        } public void a(boolean flag) {           c = flag; }       public void b(boolean flag) {           d = flag; }       public boolean z {           return d;        } public void a(ajf ajf1) {           super.a(ajf1); if(a != null && ajf1 != null) a.a(ajf1); }       public void c_(aex aex1) {           e = aex1; }       public aex a {           return e;        } public boolean A {           return e != null; }       public void a(aof aof1) {           if(aof1.a((aof)f.get(f.size - 1))) g = 60; if(aof1.a.c == aeq.bH.bT) as += aof1.a.a;       } public ia b(aex aex1) {           if(f == null) i(1); return f;       } private void i(int j)       { ia ia1 = new ia; switch(x) {           case 0: // '\0' a(ia1, aeq.T.bT, Y, 0.9F); a(ia1, tg.ab.bX, Y, 0.5F); a(ia1, aeq.bk.bT, Y, 0.5F); a(ia1, aeq.aV.bT, Y, 0.4F); b(ia1, aeq.U.bT, Y, 0.9F); b(ia1, aeq.bf.bT, Y, 0.3F); b(ia1, aeq.j.bT, Y, 0.3F); b(ia1, aeq.bc.bT, Y, 0.3F); b(ia1, aeq.be.bT, Y, 0.3F); b(ia1, aeq.i.bT, Y, 0.3F); b(ia1, aeq.bl.bT, Y, 0.3F); b(ia1, aeq.l.bT, Y, 0.5F); if(Y.nextFloat < 0.5F) ia1.add(new aof(new agv(tg.F, 10), new agv(aeq.bH), new agv(aeq.ap.bT, 2 + Y.nextInt(2), 0))); break; case 4: // '\004' a(ia1, aeq.m.bT, Y, 0.7F); a(ia1, aeq.aq.bT, Y, 0.5F); a(ia1, aeq.bi.bT, Y, 0.5F); b(ia1, aeq.aA.bT, Y, 0.1F); b(ia1, aeq.W.bT, Y, 0.3F); b(ia1, aeq.Y.bT, Y, 0.3F); b(ia1, aeq.V.bT, Y, 0.3F); b(ia1, aeq.X.bT, Y, 0.3F); b(ia1, aeq.ar.bT, Y, 0.3F); b(ia1, aeq.bj.bT, Y, 0.3F); break; case 3: // '\003' a(ia1, aeq.m.bT, Y, 0.7F); a(ia1, aeq.o.bT, Y, 0.5F); a(ia1, aeq.p.bT, Y, 0.5F); a(ia1, aeq.n.bT, Y, 0.5F); b(ia1, aeq.q.bT, Y, 0.5F); b(ia1, aeq.z.bT, Y, 0.5F); b(ia1, aeq.h.bT, Y, 0.3F); b(ia1, aeq.C.bT, Y, 0.3F); b(ia1, aeq.g.bT, Y, 0.5F); b(ia1, aeq.B.bT, Y, 0.5F); b(ia1, aeq.f.bT, Y, 0.2F); b(ia1, aeq.A.bT, Y, 0.2F); b(ia1, aeq.P.bT, Y, 0.2F); b(ia1, aeq.Q.bT, Y, 0.2F); b(ia1, aeq.ag.bT, Y, 0.2F); b(ia1, aeq.ak.bT, Y, 0.2F); b(ia1, aeq.ad.bT, Y, 0.2F); b(ia1, aeq.ah.bT, Y, 0.2F); b(ia1, aeq.ae.bT, Y, 0.2F); b(ia1, aeq.ai.bT, Y, 0.2F); b(ia1, aeq.af.bT, Y, 0.2F); b(ia1, aeq.aj.bT, Y, 0.2F); b(ia1, aeq.ac.bT, Y, 0.1F); b(ia1, aeq.Z.bT, Y, 0.1F); b(ia1, aeq.aa.bT, Y, 0.1F); b(ia1, aeq.ab.bT, Y, 0.1F); break; case 1: // '\001' a(ia1, aeq.aK.bT, Y, 0.8F); a(ia1, aeq.aL.bT, Y, 0.8F); a(ia1, aeq.bG.bT, Y, 1.3F); b(ia1, tg.an.bX, Y, 0.8F); b(ia1, tg.M.bX, Y, 0.2F); b(ia1, aeq.aQ.bT, Y, 0.2F); b(ia1, aeq.aS.bT, Y, 0.2F); break; case 2: // '\002' b(ia1, aeq.bA.bT, Y, 0.3F); b(ia1, aeq.bD.bT, Y, 0.2F); b(ia1, aeq.aC.bT, Y, 0.4F); b(ia1, tg.bd.bX, Y, 0.3F); int ai[] = { aeq.q.bT, aeq.z.bT, aeq.ae.bT, aeq.ai.bT, aeq.h.bT, aeq.C.bT, aeq.g.bT, aeq.B.bT               }; int ai1[] = ai; int l = ai1.length; for(int i1 = 0; i1 < l; i1++) {                   int j1 = ai1[i1]; if(Y.nextFloat < 0.1F) ia1.add(new aof(new agv(j1, 1, 0), new agv(aeq.bH, 2 + Y.nextInt(3), 0), aqf.a(Y, new agv(j1, 1, 0), 5 + Y.nextInt(15)))); }               break; }           if(ia1.isEmpty) a(ia1, aeq.p.bT, Y, 1.0F); Collections.shuffle(ia1); if(f == null) f = new ia; for(int k = 0; k < j && k < ia1.size; k++) f.a((aof)ia1.get(k)); }       public void a(ia ia1) {       }        private static void a(ia ia1, int j, Random random, float f1) {           if(random.nextFloat < f1) ia1.add(new aof(a(j, random), aeq.bH)); }       private static agv a(int j, Random random) {           return new agv(j, b(j, random), 0); }       private static int b(int j, Random random) {           ey ey1 = (ey)at.get(Integer.valueOf(j)); if(ey1 == null) return 1; if(((Integer)ey1.a).intValue >= ((Integer)ey1.b).intValue) return ((Integer)ey1.a).intValue; else return ((Integer)ey1.a).intValue + random.nextInt(((Integer)ey1.b).intValue - ((Integer)ey1.a).intValue); }       private static void b(ia ia1, int j, Random random, float f1) {           if(random.nextFloat < f1) {               int k = c(j, random); agv agv1; agv agv2; if(k < 0) {                   agv1 = new agv(aeq.bH.bT, 1, 0); agv2 = new agv(j, -k, 0); } else {                   agv1 = new agv(aeq.bH.bT, k, 0); agv2 = new agv(j, 1, 0); }               ia1.add(new aof(agv1, agv2)); }       }        private static int c(int j, Random random) {           ey ey1 = (ey)au.get(Integer.valueOf(j)); if(ey1 == null) return 1; if(((Integer)ey1.a).intValue >= ((Integer)ey1.b).intValue) return ((Integer)ey1.a).intValue; else return ((Integer)ey1.a).intValue + random.nextInt(((Integer)ey1.b).intValue - ((Integer)ey1.a).intValue); }       private int b;        private boolean c;        private boolean d;        nh a;        private aex e;        private ia f;        private int g;        private int as; private static final Map at; private static final Map au; static {           at = new HashMap; au = new HashMap; at.put(Integer.valueOf(aeq.m.bT), new ey(Integer.valueOf(16), Integer.valueOf(24))); at.put(Integer.valueOf(aeq.o.bT), new ey(Integer.valueOf(8), Integer.valueOf(10))); at.put(Integer.valueOf(aeq.p.bT), new ey(Integer.valueOf(8), Integer.valueOf(10))); at.put(Integer.valueOf(aeq.n.bT), new ey(Integer.valueOf(4), Integer.valueOf(6))); at.put(Integer.valueOf(aeq.aK.bT), new ey(Integer.valueOf(19), Integer.valueOf(30))); at.put(Integer.valueOf(aeq.aL.bT), new ey(Integer.valueOf(12), Integer.valueOf(15))); at.put(Integer.valueOf(aeq.bG.bT), new ey(Integer.valueOf(1), Integer.valueOf(1))); at.put(Integer.valueOf(aeq.bn.bT), new ey(Integer.valueOf(3), Integer.valueOf(4))); at.put(Integer.valueOf(aeq.bA.bT), new ey(Integer.valueOf(2), Integer.valueOf(3))); at.put(Integer.valueOf(aeq.aq.bT), new ey(Integer.valueOf(14), Integer.valueOf(18))); at.put(Integer.valueOf(aeq.bi.bT), new ey(Integer.valueOf(14), Integer.valueOf(18))); at.put(Integer.valueOf(aeq.bk.bT), new ey(Integer.valueOf(14), Integer.valueOf(18))); at.put(Integer.valueOf(aeq.aV.bT), new ey(Integer.valueOf(9), Integer.valueOf(13))); at.put(Integer.valueOf(aeq.S.bT), new ey(Integer.valueOf(34), Integer.valueOf(48))); at.put(Integer.valueOf(aeq.bh.bT), new ey(Integer.valueOf(30), Integer.valueOf(38))); at.put(Integer.valueOf(aeq.bg.bT), new ey(Integer.valueOf(30), Integer.valueOf(38))); at.put(Integer.valueOf(aeq.T.bT), new ey(Integer.valueOf(18), Integer.valueOf(22))); at.put(Integer.valueOf(tg.ab.bX), new ey(Integer.valueOf(14), Integer.valueOf(22))); at.put(Integer.valueOf(aeq.bm.bT), new ey(Integer.valueOf(36), Integer.valueOf(64))); au.put(Integer.valueOf(aeq.i.bT), new ey(Integer.valueOf(3), Integer.valueOf(4))); au.put(Integer.valueOf(aeq.be.bT), new ey(Integer.valueOf(3), Integer.valueOf(4))); au.put(Integer.valueOf(aeq.q.bT), new ey(Integer.valueOf(7), Integer.valueOf(11))); au.put(Integer.valueOf(aeq.z.bT), new ey(Integer.valueOf(12), Integer.valueOf(14))); au.put(Integer.valueOf(aeq.h.bT), new ey(Integer.valueOf(6), Integer.valueOf(8))); au.put(Integer.valueOf(aeq.C.bT), new ey(Integer.valueOf(9), Integer.valueOf(12))); au.put(Integer.valueOf(aeq.g.bT), new ey(Integer.valueOf(7), Integer.valueOf(9))); au.put(Integer.valueOf(aeq.B.bT), new ey(Integer.valueOf(10), Integer.valueOf(12))); au.put(Integer.valueOf(aeq.f.bT), new ey(Integer.valueOf(4), Integer.valueOf(6))); au.put(Integer.valueOf(aeq.A.bT), new ey(Integer.valueOf(7), Integer.valueOf(8))); au.put(Integer.valueOf(aeq.P.bT), new ey(Integer.valueOf(4), Integer.valueOf(6))); au.put(Integer.valueOf(aeq.Q.bT), new ey(Integer.valueOf(7), Integer.valueOf(8))); au.put(Integer.valueOf(aeq.ag.bT), new ey(Integer.valueOf(4), Integer.valueOf(6))); au.put(Integer.valueOf(aeq.ak.bT), new ey(Integer.valueOf(7), Integer.valueOf(8))); au.put(Integer.valueOf(aeq.ad.bT), new ey(Integer.valueOf(4), Integer.valueOf(6))); au.put(Integer.valueOf(aeq.ah.bT), new ey(Integer.valueOf(7), Integer.valueOf(8))); au.put(Integer.valueOf(aeq.ae.bT), new ey(Integer.valueOf(10), Integer.valueOf(14))); au.put(Integer.valueOf(aeq.ai.bT), new ey(Integer.valueOf(16), Integer.valueOf(19))); au.put(Integer.valueOf(aeq.af.bT), new ey(Integer.valueOf(8), Integer.valueOf(10))); au.put(Integer.valueOf(aeq.aj.bT), new ey(Integer.valueOf(11), Integer.valueOf(14))); au.put(Integer.valueOf(aeq.ac.bT), new ey(Integer.valueOf(5), Integer.valueOf(7))); au.put(Integer.valueOf(aeq.Z.bT), new ey(Integer.valueOf(5), Integer.valueOf(7))); au.put(Integer.valueOf(aeq.aa.bT), new ey(Integer.valueOf(11), Integer.valueOf(15))); au.put(Integer.valueOf(aeq.ab.bT), new ey(Integer.valueOf(9), Integer.valueOf(11))); au.put(Integer.valueOf(aeq.U.bT), new ey(Integer.valueOf(-4), Integer.valueOf(-2))); au.put(Integer.valueOf(aeq.bf.bT), new ey(Integer.valueOf(-8), Integer.valueOf(-4))); au.put(Integer.valueOf(aeq.j.bT), new ey(Integer.valueOf(-8), Integer.valueOf(-4))); au.put(Integer.valueOf(aeq.bc.bT), new ey(Integer.valueOf(-10), Integer.valueOf(-7))); au.put(Integer.valueOf(tg.M.bX), new ey(Integer.valueOf(-5), Integer.valueOf(-3))); au.put(Integer.valueOf(tg.an.bX), new ey(Integer.valueOf(3), Integer.valueOf(4))); au.put(Integer.valueOf(aeq.W.bT), new ey(Integer.valueOf(4), Integer.valueOf(5))); au.put(Integer.valueOf(aeq.Y.bT), new ey(Integer.valueOf(2), Integer.valueOf(4))); au.put(Integer.valueOf(aeq.V.bT), new ey(Integer.valueOf(2), Integer.valueOf(4))); au.put(Integer.valueOf(aeq.X.bT), new ey(Integer.valueOf(2), Integer.valueOf(4))); au.put(Integer.valueOf(aeq.aA.bT), new ey(Integer.valueOf(6), Integer.valueOf(8))); au.put(Integer.valueOf(aeq.bD.bT), new ey(Integer.valueOf(-4), Integer.valueOf(-1))); au.put(Integer.valueOf(aeq.aC.bT), new ey(Integer.valueOf(-4), Integer.valueOf(-1))); au.put(Integer.valueOf(aeq.aQ.bT), new ey(Integer.valueOf(10), Integer.valueOf(12))); au.put(Integer.valueOf(aeq.aS.bT), new ey(Integer.valueOf(10), Integer.valueOf(12))); au.put(Integer.valueOf(tg.bd.bX), new ey(Integer.valueOf(-3), Integer.valueOf(-1))); au.put(Integer.valueOf(aeq.ar.bT), new ey(Integer.valueOf(-7), Integer.valueOf(-5))); au.put(Integer.valueOf(aeq.bj.bT), new ey(Integer.valueOf(-7), Integer.valueOf(-5))); au.put(Integer.valueOf(aeq.bl.bT), new ey(Integer.valueOf(-8), Integer.valueOf(-6))); au.put(Integer.valueOf(aeq.bA.bT), new ey(Integer.valueOf(7), Integer.valueOf(11))); au.put(Integer.valueOf(aeq.l.bT), new ey(Integer.valueOf(-5), Integer.valueOf(-19))); }   }

I'll be updating the article shortly. --WolfieMario 16:56, 31 May 2012 (UTC)


 * Neat! I updated the Enchantment area for Priests based on the code. I'm not sure if you should be posting the code here, but as the Bukkit team (employed by Mojang) regularly posts disassembled code in their public github, I'm sure it's not a problem.


 * I suppose the trickiest part will be matching up the items, as those garbage class names aren't helping us any. --Zeta0134 17:18, 31 May 2012 (UTC)


 * If I'm reading the code correctly, any time a villager's list is empty (which is rare, but possible) the game adds the offer for Gold Ingots to the list as a fallback. This explains why the green villager only ever offers that trade, and also why it rarely shows up for all the other professions. This also means that the Farmer can very rarely offer it; I'll update the list. --Zeta0134 17:36, 31 May 2012 (UTC)

Enchantments - Multiple of one Item?
Can someone verify whether a Priest will offer to enchant the same item multiple times? Does it check to see if the enchantments are the same, or would a new offer to enchant, say, an Iron Pickaxe with Unbreaking III replace the previous offer of an Iron Pickaxe with Efficiency II?