001 package net.minecraft.inventory;
002
003 import net.minecraft.entity.IMerchant;
004 import net.minecraft.entity.player.EntityPlayer;
005 import net.minecraft.item.ItemStack;
006 import net.minecraft.village.MerchantRecipe;
007
008 public class SlotMerchantResult extends Slot
009 {
010 /** Merchant's inventory. */
011 private final InventoryMerchant theMerchantInventory;
012
013 /** The Player whos trying to buy/sell stuff. */
014 private EntityPlayer thePlayer;
015 private int field_75231_g;
016
017 /** "Instance" of the Merchant. */
018 private final IMerchant theMerchant;
019
020 public SlotMerchantResult(EntityPlayer par1EntityPlayer, IMerchant par2IMerchant, InventoryMerchant par3InventoryMerchant, int par4, int par5, int par6)
021 {
022 super(par3InventoryMerchant, par4, par5, par6);
023 this.thePlayer = par1EntityPlayer;
024 this.theMerchant = par2IMerchant;
025 this.theMerchantInventory = par3InventoryMerchant;
026 }
027
028 /**
029 * Check if the stack is a valid item for this slot. Always true beside for the armor slots.
030 */
031 public boolean isItemValid(ItemStack par1ItemStack)
032 {
033 return false;
034 }
035
036 /**
037 * Decrease the size of the stack in slot (first int arg) by the amount of the second int arg. Returns the new
038 * stack.
039 */
040 public ItemStack decrStackSize(int par1)
041 {
042 if (this.getHasStack())
043 {
044 this.field_75231_g += Math.min(par1, this.getStack().stackSize);
045 }
046
047 return super.decrStackSize(par1);
048 }
049
050 /**
051 * the itemStack passed in is the output - ie, iron ingots, and pickaxes, not ore and wood. Typically increases an
052 * internal count then calls onCrafting(item).
053 */
054 protected void onCrafting(ItemStack par1ItemStack, int par2)
055 {
056 this.field_75231_g += par2;
057 this.onCrafting(par1ItemStack);
058 }
059
060 /**
061 * the itemStack passed in is the output - ie, iron ingots, and pickaxes, not ore and wood.
062 */
063 protected void onCrafting(ItemStack par1ItemStack)
064 {
065 par1ItemStack.onCrafting(this.thePlayer.worldObj, this.thePlayer, this.field_75231_g);
066 this.field_75231_g = 0;
067 }
068
069 public void onPickupFromSlot(EntityPlayer par1EntityPlayer, ItemStack par2ItemStack)
070 {
071 this.onCrafting(par2ItemStack);
072 MerchantRecipe var3 = this.theMerchantInventory.getCurrentRecipe();
073
074 if (var3 != null)
075 {
076 ItemStack var4 = this.theMerchantInventory.getStackInSlot(0);
077 ItemStack var5 = this.theMerchantInventory.getStackInSlot(1);
078
079 if (this.func_75230_a(var3, var4, var5) || this.func_75230_a(var3, var5, var4))
080 {
081 if (var4 != null && var4.stackSize <= 0)
082 {
083 var4 = null;
084 }
085
086 if (var5 != null && var5.stackSize <= 0)
087 {
088 var5 = null;
089 }
090
091 this.theMerchantInventory.setInventorySlotContents(0, var4);
092 this.theMerchantInventory.setInventorySlotContents(1, var5);
093 this.theMerchant.useRecipe(var3);
094 }
095 }
096 }
097
098 private boolean func_75230_a(MerchantRecipe par1MerchantRecipe, ItemStack par2ItemStack, ItemStack par3ItemStack)
099 {
100 ItemStack var4 = par1MerchantRecipe.getItemToBuy();
101 ItemStack var5 = par1MerchantRecipe.getSecondItemToBuy();
102
103 if (par2ItemStack != null && par2ItemStack.itemID == var4.itemID)
104 {
105 if (var5 != null && par3ItemStack != null && var5.itemID == par3ItemStack.itemID)
106 {
107 par2ItemStack.stackSize -= var4.stackSize;
108 par3ItemStack.stackSize -= var5.stackSize;
109 return true;
110 }
111
112 if (var5 == null && par3ItemStack == null)
113 {
114 par2ItemStack.stackSize -= var4.stackSize;
115 return true;
116 }
117 }
118
119 return false;
120 }
121 }