001 package net.minecraft.inventory;
002
003 import cpw.mods.fml.relauncher.Side;
004 import cpw.mods.fml.relauncher.SideOnly;
005 import net.minecraft.entity.player.EntityPlayer;
006 import net.minecraft.entity.player.InventoryPlayer;
007 import net.minecraft.item.ItemStack;
008 import net.minecraft.tileentity.TileEntityBeacon;
009
010 public class ContainerBeacon extends Container
011 {
012 private TileEntityBeacon theBeacon;
013
014 /**
015 * This beacon's slot where you put in Emerald, Diamond, Gold or Iron Ingot.
016 */
017 private final SlotBeacon beaconSlot;
018 private int field_82865_g;
019 private int field_82867_h;
020 private int field_82868_i;
021
022 public ContainerBeacon(InventoryPlayer par1InventoryPlayer, TileEntityBeacon par2TileEntityBeacon)
023 {
024 this.theBeacon = par2TileEntityBeacon;
025 this.addSlotToContainer(this.beaconSlot = new SlotBeacon(this, par2TileEntityBeacon, 0, 136, 110));
026 byte var3 = 36;
027 short var4 = 137;
028 int var5;
029
030 for (var5 = 0; var5 < 3; ++var5)
031 {
032 for (int var6 = 0; var6 < 9; ++var6)
033 {
034 this.addSlotToContainer(new Slot(par1InventoryPlayer, var6 + var5 * 9 + 9, var3 + var6 * 18, var4 + var5 * 18));
035 }
036 }
037
038 for (var5 = 0; var5 < 9; ++var5)
039 {
040 this.addSlotToContainer(new Slot(par1InventoryPlayer, var5, var3 + var5 * 18, 58 + var4));
041 }
042
043 this.field_82865_g = par2TileEntityBeacon.getLevels();
044 this.field_82867_h = par2TileEntityBeacon.getPrimaryEffect();
045 this.field_82868_i = par2TileEntityBeacon.getSecondaryEffect();
046 }
047
048 public void addCraftingToCrafters(ICrafting par1ICrafting)
049 {
050 super.addCraftingToCrafters(par1ICrafting);
051 par1ICrafting.sendProgressBarUpdate(this, 0, this.field_82865_g);
052 par1ICrafting.sendProgressBarUpdate(this, 1, this.field_82867_h);
053 par1ICrafting.sendProgressBarUpdate(this, 2, this.field_82868_i);
054 }
055
056 /**
057 * Looks for changes made in the container, sends them to every listener.
058 */
059 public void detectAndSendChanges()
060 {
061 super.detectAndSendChanges();
062 }
063
064 @SideOnly(Side.CLIENT)
065 public void updateProgressBar(int par1, int par2)
066 {
067 if (par1 == 0)
068 {
069 this.theBeacon.setLevels(par2);
070 }
071
072 if (par1 == 1)
073 {
074 this.theBeacon.func_82128_d(par2);
075 }
076
077 if (par1 == 2)
078 {
079 this.theBeacon.func_82127_e(par2);
080 }
081 }
082
083 /**
084 * Returns the Tile Entity behind this beacon inventory / container
085 */
086 public TileEntityBeacon getBeacon()
087 {
088 return this.theBeacon;
089 }
090
091 public boolean canInteractWith(EntityPlayer par1EntityPlayer)
092 {
093 return this.theBeacon.isUseableByPlayer(par1EntityPlayer);
094 }
095
096 /**
097 * Called when a player shift-clicks on a slot. You must override this or you will crash when someone does that.
098 */
099 public ItemStack transferStackInSlot(EntityPlayer par1EntityPlayer, int par2)
100 {
101 ItemStack var3 = null;
102 Slot var4 = (Slot)this.inventorySlots.get(par2);
103
104 if (var4 != null && var4.getHasStack())
105 {
106 ItemStack var5 = var4.getStack();
107 var3 = var5.copy();
108
109 if (par2 == 0)
110 {
111 if (!this.mergeItemStack(var5, 1, 37, true))
112 {
113 return null;
114 }
115
116 var4.onSlotChange(var5, var3);
117 }
118 else if (!this.beaconSlot.getHasStack() && this.beaconSlot.isItemValid(var5) && var5.stackSize == 1)
119 {
120 if (!this.mergeItemStack(var5, 0, 1, false))
121 {
122 return null;
123 }
124 }
125 else if (par2 >= 1 && par2 < 28)
126 {
127 if (!this.mergeItemStack(var5, 28, 37, false))
128 {
129 return null;
130 }
131 }
132 else if (par2 >= 28 && par2 < 37)
133 {
134 if (!this.mergeItemStack(var5, 1, 28, false))
135 {
136 return null;
137 }
138 }
139 else if (!this.mergeItemStack(var5, 1, 37, false))
140 {
141 return null;
142 }
143
144 if (var5.stackSize == 0)
145 {
146 var4.putStack((ItemStack)null);
147 }
148 else
149 {
150 var4.onSlotChanged();
151 }
152
153 if (var5.stackSize == var3.stackSize)
154 {
155 return null;
156 }
157
158 var4.onPickupFromSlot(par1EntityPlayer, var5);
159 }
160
161 return var3;
162 }
163 }