001 package net.minecraft.src;
002
003 import cpw.mods.fml.common.Side;
004 import cpw.mods.fml.common.asm.SideOnly;
005 import cpw.mods.fml.common.registry.VillagerRegistry;
006
007 import java.util.Collections;
008 import java.util.HashMap;
009 import java.util.Map;
010 import java.util.Random;
011
012 public class EntityVillager extends EntityAgeable implements INpc, IMerchant
013 {
014 private int randomTickDivider;
015 private boolean isMating;
016 private boolean isPlaying;
017 Village villageObj;
018
019 /** This villager's current customer. */
020 private EntityPlayer buyingPlayer;
021
022 /** Initialises the MerchantRecipeList.java */
023 private MerchantRecipeList buyingList;
024 private int timeUntilReset;
025
026 /** addDefaultEquipmentAndRecipies is called if this is true */
027 private boolean needsInitilization;
028 private int wealth;
029
030 /** Recipes for buying things from Villagers. */
031 private MerchantRecipe sellingRecipeList;
032
033 /**
034 * a villagers recipe list is intialized off this list ; the 2 params are min/max amount they will trade for 1
035 * emerald
036 */
037 public static final Map villagerStockList = new HashMap();
038
039 /**
040 * Selling list of Blacksmith items. negative numbers mean 1 emerald for n items, positive numbers are n emeralds
041 * for 1 item
042 */
043 public static final Map blacksmithSellingList = new HashMap();
044
045 public EntityVillager(World par1World)
046 {
047 this(par1World, 0);
048 }
049
050 public EntityVillager(World par1World, int par2)
051 {
052 super(par1World);
053 this.randomTickDivider = 0;
054 this.isMating = false;
055 this.isPlaying = false;
056 this.villageObj = null;
057 this.setProfession(par2);
058 this.texture = "/mob/villager/villager.png";
059 this.moveSpeed = 0.5F;
060 this.getNavigator().setBreakDoors(true);
061 this.getNavigator().setAvoidsWater(true);
062 this.tasks.addTask(0, new EntityAISwimming(this));
063 this.tasks.addTask(1, new EntityAIAvoidEntity(this, EntityZombie.class, 8.0F, 0.3F, 0.35F));
064 this.tasks.addTask(1, new EntityAITradePlayer(this));
065 this.tasks.addTask(1, new EntityAILookAtTradePlayer(this));
066 this.tasks.addTask(2, new EntityAIMoveIndoors(this));
067 this.tasks.addTask(3, new EntityAIRestrictOpenDoor(this));
068 this.tasks.addTask(4, new EntityAIOpenDoor(this, true));
069 this.tasks.addTask(5, new EntityAIMoveTwardsRestriction(this, 0.3F));
070 this.tasks.addTask(6, new EntityAIVillagerMate(this));
071 this.tasks.addTask(7, new EntityAIFollowGolem(this));
072 this.tasks.addTask(8, new EntityAIPlay(this, 0.32F));
073 this.tasks.addTask(9, new EntityAIWatchClosest2(this, EntityPlayer.class, 3.0F, 1.0F));
074 this.tasks.addTask(9, new EntityAIWatchClosest2(this, EntityVillager.class, 5.0F, 0.02F));
075 this.tasks.addTask(9, new EntityAIWander(this, 0.3F));
076 this.tasks.addTask(10, new EntityAIWatchClosest(this, EntityLiving.class, 8.0F));
077 }
078
079 /**
080 * Returns true if the newer Entity AI code should be run
081 */
082 public boolean isAIEnabled()
083 {
084 return true;
085 }
086
087 /**
088 * main AI tick function, replaces updateEntityActionState
089 */
090 protected void updateAITick()
091 {
092 if (--this.randomTickDivider <= 0)
093 {
094 this.worldObj.villageCollectionObj.addVillagerPosition(MathHelper.floor_double(this.posX), MathHelper.floor_double(this.posY), MathHelper.floor_double(this.posZ));
095 this.randomTickDivider = 70 + this.rand.nextInt(50);
096 this.villageObj = this.worldObj.villageCollectionObj.findNearestVillage(MathHelper.floor_double(this.posX), MathHelper.floor_double(this.posY), MathHelper.floor_double(this.posZ), 32);
097
098 if (this.villageObj == null)
099 {
100 this.detachHome();
101 }
102 else
103 {
104 ChunkCoordinates var1 = this.villageObj.getCenter();
105 this.setHomeArea(var1.posX, var1.posY, var1.posZ, this.villageObj.getVillageRadius());
106 }
107 }
108
109 if (!this.isTrading() && this.timeUntilReset > 0)
110 {
111 --this.timeUntilReset;
112
113 if (this.timeUntilReset <= 0)
114 {
115 if (this.needsInitilization)
116 {
117 this.addDefaultEquipmentAndRecipies(1);
118 this.needsInitilization = false;
119 }
120
121 if (this.sellingRecipeList != null)
122 {
123 this.buyingList.remove(this.sellingRecipeList);
124 this.sellingRecipeList = null;
125 }
126
127 this.addPotionEffect(new PotionEffect(Potion.regeneration.id, 200, 0));
128 }
129 }
130
131 super.updateAITick();
132 }
133
134 /**
135 * Called when a player interacts with a mob. e.g. gets milk from a cow, gets into the saddle on a pig.
136 */
137 public boolean interact(EntityPlayer par1EntityPlayer)
138 {
139 if (this.isEntityAlive() && !this.isTrading() && !this.isChild())
140 {
141 if (!this.worldObj.isRemote)
142 {
143 this.setCustomer(par1EntityPlayer);
144 par1EntityPlayer.displayGUIMerchant(this);
145 }
146
147 return true;
148 }
149 else
150 {
151 return super.interact(par1EntityPlayer);
152 }
153 }
154
155 protected void entityInit()
156 {
157 super.entityInit();
158 this.dataWatcher.addObject(16, Integer.valueOf(0));
159 }
160
161 public int getMaxHealth()
162 {
163 return 20;
164 }
165
166 /**
167 * (abstract) Protected helper method to write subclass entity data to NBT.
168 */
169 public void writeEntityToNBT(NBTTagCompound par1NBTTagCompound)
170 {
171 super.writeEntityToNBT(par1NBTTagCompound);
172 par1NBTTagCompound.setInteger("Profession", this.getProfession());
173 par1NBTTagCompound.setInteger("Riches", this.wealth);
174
175 if (this.buyingList != null)
176 {
177 par1NBTTagCompound.setCompoundTag("Offers", this.buyingList.getRecipiesAsTags());
178 }
179 }
180
181 /**
182 * (abstract) Protected helper method to read subclass entity data from NBT.
183 */
184 public void readEntityFromNBT(NBTTagCompound par1NBTTagCompound)
185 {
186 super.readEntityFromNBT(par1NBTTagCompound);
187 this.setProfession(par1NBTTagCompound.getInteger("Profession"));
188 this.wealth = par1NBTTagCompound.getInteger("Riches");
189
190 if (par1NBTTagCompound.hasKey("Offers"))
191 {
192 NBTTagCompound var2 = par1NBTTagCompound.getCompoundTag("Offers");
193 this.buyingList = new MerchantRecipeList(var2);
194 }
195 }
196
197 @SideOnly(Side.CLIENT)
198
199 /**
200 * Returns the texture's file path as a String.
201 */
202 public String getTexture()
203 {
204 switch (this.getProfession())
205 {
206 case 0:
207 return "/mob/villager/farmer.png";
208 case 1:
209 return "/mob/villager/librarian.png";
210 case 2:
211 return "/mob/villager/priest.png";
212 case 3:
213 return "/mob/villager/smith.png";
214 case 4:
215 return "/mob/villager/butcher.png";
216 default:
217 return VillagerRegistry.getVillagerSkin(this.getProfession(), super.getTexture());
218 }
219 }
220
221 /**
222 * Determines if an entity can be despawned, used on idle far away entities
223 */
224 protected boolean canDespawn()
225 {
226 return false;
227 }
228
229 /**
230 * Returns the sound this mob makes while it's alive.
231 */
232 protected String getLivingSound()
233 {
234 return "mob.villager.default";
235 }
236
237 /**
238 * Returns the sound this mob makes when it is hurt.
239 */
240 protected String getHurtSound()
241 {
242 return "mob.villager.defaulthurt";
243 }
244
245 /**
246 * Returns the sound this mob makes on death.
247 */
248 protected String getDeathSound()
249 {
250 return "mob.villager.defaultdeath";
251 }
252
253 public void setProfession(int par1)
254 {
255 this.dataWatcher.updateObject(16, Integer.valueOf(par1));
256 }
257
258 public int getProfession()
259 {
260 return this.dataWatcher.getWatchableObjectInt(16);
261 }
262
263 public boolean isMating()
264 {
265 return this.isMating;
266 }
267
268 public void setMating(boolean par1)
269 {
270 this.isMating = par1;
271 }
272
273 public void setPlaying(boolean par1)
274 {
275 this.isPlaying = par1;
276 }
277
278 public boolean isPlaying()
279 {
280 return this.isPlaying;
281 }
282
283 public void setRevengeTarget(EntityLiving par1EntityLiving)
284 {
285 super.setRevengeTarget(par1EntityLiving);
286
287 if (this.villageObj != null && par1EntityLiving != null)
288 {
289 this.villageObj.addOrRenewAgressor(par1EntityLiving);
290 }
291 }
292
293 public void setCustomer(EntityPlayer par1EntityPlayer)
294 {
295 this.buyingPlayer = par1EntityPlayer;
296 }
297
298 public EntityPlayer getCustomer()
299 {
300 return this.buyingPlayer;
301 }
302
303 public boolean isTrading()
304 {
305 return this.buyingPlayer != null;
306 }
307
308 public void useRecipe(MerchantRecipe par1MerchantRecipe)
309 {
310 par1MerchantRecipe.incrementToolUses();
311
312 if (par1MerchantRecipe.hasSameIDsAs((MerchantRecipe)this.buyingList.get(this.buyingList.size() - 1)))
313 {
314 this.timeUntilReset = 60;
315 this.needsInitilization = true;
316 }
317 else if (this.buyingList.size() > 1)
318 {
319 int var2 = this.rand.nextInt(6) + this.rand.nextInt(6) + 3;
320
321 if (var2 <= par1MerchantRecipe.getToolUses())
322 {
323 this.timeUntilReset = 20;
324 this.sellingRecipeList = par1MerchantRecipe;
325 }
326 }
327
328 if (par1MerchantRecipe.getItemToBuy().itemID == Item.emerald.shiftedIndex)
329 {
330 this.wealth += par1MerchantRecipe.getItemToBuy().stackSize;
331 }
332 }
333
334 public MerchantRecipeList getRecipes(EntityPlayer par1EntityPlayer)
335 {
336 if (this.buyingList == null)
337 {
338 this.addDefaultEquipmentAndRecipies(1);
339 }
340
341 return this.buyingList;
342 }
343
344 /**
345 * based on the villagers profession add items, equipment, and recipies adds par1 random items to the list of things
346 * that the villager wants to buy. (at most 1 of each wanted type is added)
347 */
348 private void addDefaultEquipmentAndRecipies(int par1)
349 {
350 MerchantRecipeList var2;
351 var2 = new MerchantRecipeList();
352 label44:
353
354 switch (this.getProfession())
355 {
356 case 0:
357 addMerchantItem(var2, Item.wheat.shiftedIndex, this.rand, 0.9F);
358 addMerchantItem(var2, Block.cloth.blockID, this.rand, 0.5F);
359 addMerchantItem(var2, Item.chickenRaw.shiftedIndex, this.rand, 0.5F);
360 addMerchantItem(var2, Item.fishCooked.shiftedIndex, this.rand, 0.4F);
361 addBlacksmithItem(var2, Item.bread.shiftedIndex, this.rand, 0.9F);
362 addBlacksmithItem(var2, Item.melon.shiftedIndex, this.rand, 0.3F);
363 addBlacksmithItem(var2, Item.appleRed.shiftedIndex, this.rand, 0.3F);
364 addBlacksmithItem(var2, Item.cookie.shiftedIndex, this.rand, 0.3F);
365 addBlacksmithItem(var2, Item.shears.shiftedIndex, this.rand, 0.3F);
366 addBlacksmithItem(var2, Item.flintAndSteel.shiftedIndex, this.rand, 0.3F);
367 addBlacksmithItem(var2, Item.chickenCooked.shiftedIndex, this.rand, 0.3F);
368 addBlacksmithItem(var2, Item.arrow.shiftedIndex, this.rand, 0.5F);
369
370 if (this.rand.nextFloat() < 0.5F)
371 {
372 var2.add(new MerchantRecipe(new ItemStack(Block.gravel, 10), new ItemStack(Item.emerald), new ItemStack(Item.flint.shiftedIndex, 2 + this.rand.nextInt(2), 0)));
373 }
374
375 break;
376 case 1:
377 addMerchantItem(var2, Item.paper.shiftedIndex, this.rand, 0.8F);
378 addMerchantItem(var2, Item.book.shiftedIndex, this.rand, 0.8F);
379 addMerchantItem(var2, Item.writtenBook.shiftedIndex, this.rand, 0.3F);
380 addBlacksmithItem(var2, Block.bookShelf.blockID, this.rand, 0.8F);
381 addBlacksmithItem(var2, Block.glass.blockID, this.rand, 0.2F);
382 addBlacksmithItem(var2, Item.compass.shiftedIndex, this.rand, 0.2F);
383 addBlacksmithItem(var2, Item.pocketSundial.shiftedIndex, this.rand, 0.2F);
384 break;
385 case 2:
386 addBlacksmithItem(var2, Item.eyeOfEnder.shiftedIndex, this.rand, 0.3F);
387 addBlacksmithItem(var2, Item.expBottle.shiftedIndex, this.rand, 0.2F);
388 addBlacksmithItem(var2, Item.redstone.shiftedIndex, this.rand, 0.4F);
389 addBlacksmithItem(var2, Block.glowStone.blockID, this.rand, 0.3F);
390 int[] var3 = new int[] {Item.swordSteel.shiftedIndex, Item.swordDiamond.shiftedIndex, Item.plateSteel.shiftedIndex, Item.plateDiamond.shiftedIndex, Item.axeSteel.shiftedIndex, Item.axeDiamond.shiftedIndex, Item.pickaxeSteel.shiftedIndex, Item.pickaxeDiamond.shiftedIndex};
391 int[] var4 = var3;
392 int var5 = var3.length;
393 int var6 = 0;
394
395 while (true)
396 {
397 if (var6 >= var5)
398 {
399 break label44;
400 }
401
402 int var7 = var4[var6];
403
404 if (this.rand.nextFloat() < 0.1F)
405 {
406 var2.add(new MerchantRecipe(new ItemStack(var7, 1, 0), new ItemStack(Item.emerald, 2 + this.rand.nextInt(3), 0), EnchantmentHelper.addRandomEnchantment(this.rand, new ItemStack(var7, 1, 0), 5 + this.rand.nextInt(15))));
407 }
408
409 ++var6;
410 }
411 case 3:
412 addMerchantItem(var2, Item.coal.shiftedIndex, this.rand, 0.7F);
413 addMerchantItem(var2, Item.ingotIron.shiftedIndex, this.rand, 0.5F);
414 addMerchantItem(var2, Item.ingotGold.shiftedIndex, this.rand, 0.5F);
415 addMerchantItem(var2, Item.diamond.shiftedIndex, this.rand, 0.5F);
416 addBlacksmithItem(var2, Item.swordSteel.shiftedIndex, this.rand, 0.5F);
417 addBlacksmithItem(var2, Item.swordDiamond.shiftedIndex, this.rand, 0.5F);
418 addBlacksmithItem(var2, Item.axeSteel.shiftedIndex, this.rand, 0.3F);
419 addBlacksmithItem(var2, Item.axeDiamond.shiftedIndex, this.rand, 0.3F);
420 addBlacksmithItem(var2, Item.pickaxeSteel.shiftedIndex, this.rand, 0.5F);
421 addBlacksmithItem(var2, Item.pickaxeDiamond.shiftedIndex, this.rand, 0.5F);
422 addBlacksmithItem(var2, Item.shovelSteel.shiftedIndex, this.rand, 0.2F);
423 addBlacksmithItem(var2, Item.shovelDiamond.shiftedIndex, this.rand, 0.2F);
424 addBlacksmithItem(var2, Item.hoeSteel.shiftedIndex, this.rand, 0.2F);
425 addBlacksmithItem(var2, Item.hoeDiamond.shiftedIndex, this.rand, 0.2F);
426 addBlacksmithItem(var2, Item.bootsSteel.shiftedIndex, this.rand, 0.2F);
427 addBlacksmithItem(var2, Item.bootsDiamond.shiftedIndex, this.rand, 0.2F);
428 addBlacksmithItem(var2, Item.helmetSteel.shiftedIndex, this.rand, 0.2F);
429 addBlacksmithItem(var2, Item.helmetDiamond.shiftedIndex, this.rand, 0.2F);
430 addBlacksmithItem(var2, Item.plateSteel.shiftedIndex, this.rand, 0.2F);
431 addBlacksmithItem(var2, Item.plateDiamond.shiftedIndex, this.rand, 0.2F);
432 addBlacksmithItem(var2, Item.legsSteel.shiftedIndex, this.rand, 0.2F);
433 addBlacksmithItem(var2, Item.legsDiamond.shiftedIndex, this.rand, 0.2F);
434 addBlacksmithItem(var2, Item.bootsChain.shiftedIndex, this.rand, 0.1F);
435 addBlacksmithItem(var2, Item.helmetChain.shiftedIndex, this.rand, 0.1F);
436 addBlacksmithItem(var2, Item.plateChain.shiftedIndex, this.rand, 0.1F);
437 addBlacksmithItem(var2, Item.legsChain.shiftedIndex, this.rand, 0.1F);
438 break;
439 case 4:
440 addMerchantItem(var2, Item.coal.shiftedIndex, this.rand, 0.7F);
441 addMerchantItem(var2, Item.porkRaw.shiftedIndex, this.rand, 0.5F);
442 addMerchantItem(var2, Item.beefRaw.shiftedIndex, this.rand, 0.5F);
443 addBlacksmithItem(var2, Item.saddle.shiftedIndex, this.rand, 0.1F);
444 addBlacksmithItem(var2, Item.plateLeather.shiftedIndex, this.rand, 0.3F);
445 addBlacksmithItem(var2, Item.bootsLeather.shiftedIndex, this.rand, 0.3F);
446 addBlacksmithItem(var2, Item.helmetLeather.shiftedIndex, this.rand, 0.3F);
447 addBlacksmithItem(var2, Item.legsLeather.shiftedIndex, this.rand, 0.3F);
448 addBlacksmithItem(var2, Item.porkCooked.shiftedIndex, this.rand, 0.3F);
449 addBlacksmithItem(var2, Item.beefCooked.shiftedIndex, this.rand, 0.3F);
450 }
451
452 VillagerRegistry.manageVillagerTrades(var2, this, this.getProfession(), this.rand);
453
454 if (var2.isEmpty())
455 {
456 addMerchantItem(var2, Item.ingotGold.shiftedIndex, this.rand, 1.0F);
457 }
458
459 Collections.shuffle(var2);
460
461 if (this.buyingList == null)
462 {
463 this.buyingList = new MerchantRecipeList();
464 }
465
466 for (int var8 = 0; var8 < par1 && var8 < var2.size(); ++var8)
467 {
468 this.buyingList.addToListWithCheck((MerchantRecipe)var2.get(var8));
469 }
470 }
471
472 @SideOnly(Side.CLIENT)
473 public void setRecipes(MerchantRecipeList par1MerchantRecipeList) {}
474
475 /**
476 * each recipie takes a random stack from villagerStockList and offers it for 1 emerald
477 */
478 public static void addMerchantItem(MerchantRecipeList par0MerchantRecipeList, int par1, Random par2Random, float par3)
479 {
480 if (par2Random.nextFloat() < par3)
481 {
482 par0MerchantRecipeList.add(new MerchantRecipe(getRandomSizedStack(par1, par2Random), Item.emerald));
483 }
484 }
485
486 private static ItemStack getRandomSizedStack(int par0, Random par1Random)
487 {
488 return new ItemStack(par0, getRandomCountForItem(par0, par1Random), 0);
489 }
490
491 /**
492 * default to 1, and villagerStockList contains a min/max amount for each index
493 */
494 private static int getRandomCountForItem(int par0, Random par1Random)
495 {
496 Tuple var2 = (Tuple)villagerStockList.get(Integer.valueOf(par0));
497 return var2 == null ? 1 : (((Integer)var2.getFirst()).intValue() >= ((Integer)var2.getSecond()).intValue() ? ((Integer)var2.getFirst()).intValue() : ((Integer)var2.getFirst()).intValue() + par1Random.nextInt(((Integer)var2.getSecond()).intValue() - ((Integer)var2.getFirst()).intValue()));
498 }
499
500 public static void addBlacksmithItem(MerchantRecipeList par0MerchantRecipeList, int par1, Random par2Random, float par3)
501 {
502 if (par2Random.nextFloat() < par3)
503 {
504 int var4 = getRandomCountForBlacksmithItem(par1, par2Random);
505 ItemStack var5;
506 ItemStack var6;
507
508 if (var4 < 0)
509 {
510 var5 = new ItemStack(Item.emerald.shiftedIndex, 1, 0);
511 var6 = new ItemStack(par1, -var4, 0);
512 }
513 else
514 {
515 var5 = new ItemStack(Item.emerald.shiftedIndex, var4, 0);
516 var6 = new ItemStack(par1, 1, 0);
517 }
518
519 par0MerchantRecipeList.add(new MerchantRecipe(var5, var6));
520 }
521 }
522
523 private static int getRandomCountForBlacksmithItem(int par0, Random par1Random)
524 {
525 Tuple var2 = (Tuple)blacksmithSellingList.get(Integer.valueOf(par0));
526 return var2 == null ? 1 : (((Integer)var2.getFirst()).intValue() >= ((Integer)var2.getSecond()).intValue() ? ((Integer)var2.getFirst()).intValue() : ((Integer)var2.getFirst()).intValue() + par1Random.nextInt(((Integer)var2.getSecond()).intValue() - ((Integer)var2.getFirst()).intValue()));
527 }
528
529 @SideOnly(Side.CLIENT)
530 public void handleHealthUpdate(byte par1)
531 {
532 if (par1 == 12)
533 {
534 this.generateRandomParticles("heart");
535 }
536 else
537 {
538 super.handleHealthUpdate(par1);
539 }
540 }
541
542 @SideOnly(Side.CLIENT)
543
544 /**
545 * par1 is the particleName
546 */
547 private void generateRandomParticles(String par1Str)
548 {
549 for (int var2 = 0; var2 < 5; ++var2)
550 {
551 double var3 = this.rand.nextGaussian() * 0.02D;
552 double var5 = this.rand.nextGaussian() * 0.02D;
553 double var7 = this.rand.nextGaussian() * 0.02D;
554 this.worldObj.spawnParticle(par1Str, this.posX + (double)(this.rand.nextFloat() * this.width * 2.0F) - (double)this.width, this.posY + 1.0D + (double)(this.rand.nextFloat() * this.height), this.posZ + (double)(this.rand.nextFloat() * this.width * 2.0F) - (double)this.width, var3, var5, var7);
555 }
556 }
557
558 static
559 {
560 villagerStockList.put(Integer.valueOf(Item.coal.shiftedIndex), new Tuple(Integer.valueOf(16), Integer.valueOf(24)));
561 villagerStockList.put(Integer.valueOf(Item.ingotIron.shiftedIndex), new Tuple(Integer.valueOf(8), Integer.valueOf(10)));
562 villagerStockList.put(Integer.valueOf(Item.ingotGold.shiftedIndex), new Tuple(Integer.valueOf(8), Integer.valueOf(10)));
563 villagerStockList.put(Integer.valueOf(Item.diamond.shiftedIndex), new Tuple(Integer.valueOf(4), Integer.valueOf(6)));
564 villagerStockList.put(Integer.valueOf(Item.paper.shiftedIndex), new Tuple(Integer.valueOf(19), Integer.valueOf(30)));
565 villagerStockList.put(Integer.valueOf(Item.book.shiftedIndex), new Tuple(Integer.valueOf(12), Integer.valueOf(15)));
566 villagerStockList.put(Integer.valueOf(Item.writtenBook.shiftedIndex), new Tuple(Integer.valueOf(1), Integer.valueOf(1)));
567 villagerStockList.put(Integer.valueOf(Item.enderPearl.shiftedIndex), new Tuple(Integer.valueOf(3), Integer.valueOf(4)));
568 villagerStockList.put(Integer.valueOf(Item.eyeOfEnder.shiftedIndex), new Tuple(Integer.valueOf(2), Integer.valueOf(3)));
569 villagerStockList.put(Integer.valueOf(Item.porkRaw.shiftedIndex), new Tuple(Integer.valueOf(14), Integer.valueOf(18)));
570 villagerStockList.put(Integer.valueOf(Item.beefRaw.shiftedIndex), new Tuple(Integer.valueOf(14), Integer.valueOf(18)));
571 villagerStockList.put(Integer.valueOf(Item.chickenRaw.shiftedIndex), new Tuple(Integer.valueOf(14), Integer.valueOf(18)));
572 villagerStockList.put(Integer.valueOf(Item.fishCooked.shiftedIndex), new Tuple(Integer.valueOf(9), Integer.valueOf(13)));
573 villagerStockList.put(Integer.valueOf(Item.seeds.shiftedIndex), new Tuple(Integer.valueOf(34), Integer.valueOf(48)));
574 villagerStockList.put(Integer.valueOf(Item.melonSeeds.shiftedIndex), new Tuple(Integer.valueOf(30), Integer.valueOf(38)));
575 villagerStockList.put(Integer.valueOf(Item.pumpkinSeeds.shiftedIndex), new Tuple(Integer.valueOf(30), Integer.valueOf(38)));
576 villagerStockList.put(Integer.valueOf(Item.wheat.shiftedIndex), new Tuple(Integer.valueOf(18), Integer.valueOf(22)));
577 villagerStockList.put(Integer.valueOf(Block.cloth.blockID), new Tuple(Integer.valueOf(14), Integer.valueOf(22)));
578 villagerStockList.put(Integer.valueOf(Item.rottenFlesh.shiftedIndex), new Tuple(Integer.valueOf(36), Integer.valueOf(64)));
579 blacksmithSellingList.put(Integer.valueOf(Item.flintAndSteel.shiftedIndex), new Tuple(Integer.valueOf(3), Integer.valueOf(4)));
580 blacksmithSellingList.put(Integer.valueOf(Item.shears.shiftedIndex), new Tuple(Integer.valueOf(3), Integer.valueOf(4)));
581 blacksmithSellingList.put(Integer.valueOf(Item.swordSteel.shiftedIndex), new Tuple(Integer.valueOf(7), Integer.valueOf(11)));
582 blacksmithSellingList.put(Integer.valueOf(Item.swordDiamond.shiftedIndex), new Tuple(Integer.valueOf(12), Integer.valueOf(14)));
583 blacksmithSellingList.put(Integer.valueOf(Item.axeSteel.shiftedIndex), new Tuple(Integer.valueOf(6), Integer.valueOf(8)));
584 blacksmithSellingList.put(Integer.valueOf(Item.axeDiamond.shiftedIndex), new Tuple(Integer.valueOf(9), Integer.valueOf(12)));
585 blacksmithSellingList.put(Integer.valueOf(Item.pickaxeSteel.shiftedIndex), new Tuple(Integer.valueOf(7), Integer.valueOf(9)));
586 blacksmithSellingList.put(Integer.valueOf(Item.pickaxeDiamond.shiftedIndex), new Tuple(Integer.valueOf(10), Integer.valueOf(12)));
587 blacksmithSellingList.put(Integer.valueOf(Item.shovelSteel.shiftedIndex), new Tuple(Integer.valueOf(4), Integer.valueOf(6)));
588 blacksmithSellingList.put(Integer.valueOf(Item.shovelDiamond.shiftedIndex), new Tuple(Integer.valueOf(7), Integer.valueOf(8)));
589 blacksmithSellingList.put(Integer.valueOf(Item.hoeSteel.shiftedIndex), new Tuple(Integer.valueOf(4), Integer.valueOf(6)));
590 blacksmithSellingList.put(Integer.valueOf(Item.hoeDiamond.shiftedIndex), new Tuple(Integer.valueOf(7), Integer.valueOf(8)));
591 blacksmithSellingList.put(Integer.valueOf(Item.bootsSteel.shiftedIndex), new Tuple(Integer.valueOf(4), Integer.valueOf(6)));
592 blacksmithSellingList.put(Integer.valueOf(Item.bootsDiamond.shiftedIndex), new Tuple(Integer.valueOf(7), Integer.valueOf(8)));
593 blacksmithSellingList.put(Integer.valueOf(Item.helmetSteel.shiftedIndex), new Tuple(Integer.valueOf(4), Integer.valueOf(6)));
594 blacksmithSellingList.put(Integer.valueOf(Item.helmetDiamond.shiftedIndex), new Tuple(Integer.valueOf(7), Integer.valueOf(8)));
595 blacksmithSellingList.put(Integer.valueOf(Item.plateSteel.shiftedIndex), new Tuple(Integer.valueOf(10), Integer.valueOf(14)));
596 blacksmithSellingList.put(Integer.valueOf(Item.plateDiamond.shiftedIndex), new Tuple(Integer.valueOf(16), Integer.valueOf(19)));
597 blacksmithSellingList.put(Integer.valueOf(Item.legsSteel.shiftedIndex), new Tuple(Integer.valueOf(8), Integer.valueOf(10)));
598 blacksmithSellingList.put(Integer.valueOf(Item.legsDiamond.shiftedIndex), new Tuple(Integer.valueOf(11), Integer.valueOf(14)));
599 blacksmithSellingList.put(Integer.valueOf(Item.bootsChain.shiftedIndex), new Tuple(Integer.valueOf(5), Integer.valueOf(7)));
600 blacksmithSellingList.put(Integer.valueOf(Item.helmetChain.shiftedIndex), new Tuple(Integer.valueOf(5), Integer.valueOf(7)));
601 blacksmithSellingList.put(Integer.valueOf(Item.plateChain.shiftedIndex), new Tuple(Integer.valueOf(11), Integer.valueOf(15)));
602 blacksmithSellingList.put(Integer.valueOf(Item.legsChain.shiftedIndex), new Tuple(Integer.valueOf(9), Integer.valueOf(11)));
603 blacksmithSellingList.put(Integer.valueOf(Item.bread.shiftedIndex), new Tuple(Integer.valueOf(-4), Integer.valueOf(-2)));
604 blacksmithSellingList.put(Integer.valueOf(Item.melon.shiftedIndex), new Tuple(Integer.valueOf(-8), Integer.valueOf(-4)));
605 blacksmithSellingList.put(Integer.valueOf(Item.appleRed.shiftedIndex), new Tuple(Integer.valueOf(-8), Integer.valueOf(-4)));
606 blacksmithSellingList.put(Integer.valueOf(Item.cookie.shiftedIndex), new Tuple(Integer.valueOf(-10), Integer.valueOf(-7)));
607 blacksmithSellingList.put(Integer.valueOf(Block.glass.blockID), new Tuple(Integer.valueOf(-5), Integer.valueOf(-3)));
608 blacksmithSellingList.put(Integer.valueOf(Block.bookShelf.blockID), new Tuple(Integer.valueOf(3), Integer.valueOf(4)));
609 blacksmithSellingList.put(Integer.valueOf(Item.plateLeather.shiftedIndex), new Tuple(Integer.valueOf(4), Integer.valueOf(5)));
610 blacksmithSellingList.put(Integer.valueOf(Item.bootsLeather.shiftedIndex), new Tuple(Integer.valueOf(2), Integer.valueOf(4)));
611 blacksmithSellingList.put(Integer.valueOf(Item.helmetLeather.shiftedIndex), new Tuple(Integer.valueOf(2), Integer.valueOf(4)));
612 blacksmithSellingList.put(Integer.valueOf(Item.legsLeather.shiftedIndex), new Tuple(Integer.valueOf(2), Integer.valueOf(4)));
613 blacksmithSellingList.put(Integer.valueOf(Item.saddle.shiftedIndex), new Tuple(Integer.valueOf(6), Integer.valueOf(8)));
614 blacksmithSellingList.put(Integer.valueOf(Item.expBottle.shiftedIndex), new Tuple(Integer.valueOf(-4), Integer.valueOf(-1)));
615 blacksmithSellingList.put(Integer.valueOf(Item.redstone.shiftedIndex), new Tuple(Integer.valueOf(-4), Integer.valueOf(-1)));
616 blacksmithSellingList.put(Integer.valueOf(Item.compass.shiftedIndex), new Tuple(Integer.valueOf(10), Integer.valueOf(12)));
617 blacksmithSellingList.put(Integer.valueOf(Item.pocketSundial.shiftedIndex), new Tuple(Integer.valueOf(10), Integer.valueOf(12)));
618 blacksmithSellingList.put(Integer.valueOf(Block.glowStone.blockID), new Tuple(Integer.valueOf(-3), Integer.valueOf(-1)));
619 blacksmithSellingList.put(Integer.valueOf(Item.porkCooked.shiftedIndex), new Tuple(Integer.valueOf(-7), Integer.valueOf(-5)));
620 blacksmithSellingList.put(Integer.valueOf(Item.beefCooked.shiftedIndex), new Tuple(Integer.valueOf(-7), Integer.valueOf(-5)));
621 blacksmithSellingList.put(Integer.valueOf(Item.chickenCooked.shiftedIndex), new Tuple(Integer.valueOf(-8), Integer.valueOf(-6)));
622 blacksmithSellingList.put(Integer.valueOf(Item.eyeOfEnder.shiftedIndex), new Tuple(Integer.valueOf(7), Integer.valueOf(11)));
623 blacksmithSellingList.put(Integer.valueOf(Item.arrow.shiftedIndex), new Tuple(Integer.valueOf(-5), Integer.valueOf(-19)));
624 }
625 }