001 package net.minecraft.src; 002 003 import cpw.mods.fml.common.Side; 004 import cpw.mods.fml.common.asm.SideOnly; 005 import java.util.Iterator; 006 import java.util.Map; 007 008 public class ContainerRepair extends Container 009 { 010 private IInventory field_82852_f = new InventoryCraftResult(); 011 private IInventory field_82853_g = new InventoryRepair(this, "Repair", 2); 012 private World field_82860_h; 013 private int field_82861_i; 014 private int field_82858_j; 015 private int field_82859_k; 016 public int field_82854_e = 0; 017 private int field_82856_l = 0; 018 private String field_82857_m; 019 private final EntityPlayer field_82855_n; 020 021 public ContainerRepair(InventoryPlayer par1InventoryPlayer, World par2World, int par3, int par4, int par5, EntityPlayer par6EntityPlayer) 022 { 023 this.field_82860_h = par2World; 024 this.field_82861_i = par3; 025 this.field_82858_j = par4; 026 this.field_82859_k = par5; 027 this.field_82855_n = par6EntityPlayer; 028 this.addSlotToContainer(new Slot(this.field_82853_g, 0, 27, 47)); 029 this.addSlotToContainer(new Slot(this.field_82853_g, 1, 76, 47)); 030 this.addSlotToContainer(new SlotRepair(this, this.field_82852_f, 2, 134, 47, par2World, par3, par4, par5)); 031 int var7; 032 033 for (var7 = 0; var7 < 3; ++var7) 034 { 035 for (int var8 = 0; var8 < 9; ++var8) 036 { 037 this.addSlotToContainer(new Slot(par1InventoryPlayer, var8 + var7 * 9 + 9, 8 + var8 * 18, 84 + var7 * 18)); 038 } 039 } 040 041 for (var7 = 0; var7 < 9; ++var7) 042 { 043 this.addSlotToContainer(new Slot(par1InventoryPlayer, var7, 8 + var7 * 18, 142)); 044 } 045 } 046 047 /** 048 * Callback for when the crafting matrix is changed. 049 */ 050 public void onCraftMatrixChanged(IInventory par1IInventory) 051 { 052 super.onCraftMatrixChanged(par1IInventory); 053 054 if (par1IInventory == this.field_82853_g) 055 { 056 this.func_82848_d(); 057 } 058 } 059 060 public void func_82848_d() 061 { 062 ItemStack var1 = this.field_82853_g.getStackInSlot(0); 063 this.field_82854_e = 0; 064 int var2 = 0; 065 byte var3 = 0; 066 int var4 = 0; 067 068 if (var1 == null) 069 { 070 this.field_82852_f.setInventorySlotContents(0, (ItemStack)null); 071 this.field_82854_e = 0; 072 } 073 else 074 { 075 ItemStack var5 = var1.copy(); 076 ItemStack var6 = this.field_82853_g.getStackInSlot(1); 077 Map var7 = EnchantmentHelper.func_82781_a(var5); 078 int var18 = var3 + var1.func_82838_A() + (var6 == null ? 0 : var6.func_82838_A()); 079 this.field_82856_l = 0; 080 int var8; 081 int var9; 082 int var10; 083 int var12; 084 Enchantment var21; 085 Iterator var20; 086 087 if (var6 != null) 088 { 089 if (var5.isItemStackDamageable() && Item.itemsList[var5.itemID].func_82789_a(var1, var6)) 090 { 091 var8 = Math.min(var5.getItemDamageForDisplay(), var5.getMaxDamage() / 4); 092 093 if (var8 <= 0) 094 { 095 this.field_82852_f.setInventorySlotContents(0, (ItemStack)null); 096 this.field_82854_e = 0; 097 return; 098 } 099 100 for (var9 = 0; var8 > 0 && var9 < var6.stackSize; ++var9) 101 { 102 var10 = var5.getItemDamageForDisplay() - var8; 103 var5.setItemDamage(var10); 104 var2 += Math.max(1, var8 / 100) + var7.size(); 105 var8 = Math.min(var5.getItemDamageForDisplay(), var5.getMaxDamage() / 4); 106 } 107 108 this.field_82856_l = var9; 109 } 110 else 111 { 112 if (var5.itemID != var6.itemID || !var5.isItemStackDamageable()) 113 { 114 this.field_82852_f.setInventorySlotContents(0, (ItemStack)null); 115 this.field_82854_e = 0; 116 return; 117 } 118 119 if (var5.isItemStackDamageable()) 120 { 121 var8 = var1.getMaxDamage() - var1.getItemDamageForDisplay(); 122 var9 = var6.getMaxDamage() - var6.getItemDamageForDisplay(); 123 var10 = var9 + var5.getMaxDamage() * 12 / 100; 124 int var11 = var8 + var10; 125 var12 = var5.getMaxDamage() - var11; 126 127 if (var12 < 0) 128 { 129 var12 = 0; 130 } 131 132 if (var12 < var5.getItemDamage()) 133 { 134 var5.setItemDamage(var12); 135 var2 += Math.max(1, var10 / 100); 136 } 137 } 138 139 Map var19 = EnchantmentHelper.func_82781_a(var6); 140 var20 = var19.keySet().iterator(); 141 142 while (var20.hasNext()) 143 { 144 var10 = ((Integer)var20.next()).intValue(); 145 var21 = Enchantment.enchantmentsList[var10]; 146 var12 = var7.containsKey(Integer.valueOf(var10)) ? ((Integer)var7.get(Integer.valueOf(var10))).intValue() : 0; 147 int var13 = ((Integer)var19.get(Integer.valueOf(var10))).intValue(); 148 int var10000; 149 150 if (var12 == var13) 151 { 152 ++var13; 153 var10000 = var13; 154 } 155 else 156 { 157 var10000 = Math.max(var13, var12); 158 } 159 160 var13 = var10000; 161 int var14 = var13 - var12; 162 boolean var15 = true; 163 Iterator var16 = var7.keySet().iterator(); 164 165 while (var16.hasNext()) 166 { 167 int var17 = ((Integer)var16.next()).intValue(); 168 169 if (var17 != var10 && !var21.canApplyTogether(Enchantment.enchantmentsList[var17])) 170 { 171 var15 = false; 172 var2 += var14; 173 } 174 } 175 176 if (var15) 177 { 178 if (var13 > var21.getMaxLevel()) 179 { 180 var13 = var21.getMaxLevel(); 181 } 182 183 var7.put(Integer.valueOf(var10), Integer.valueOf(var13)); 184 byte var23 = 0; 185 186 switch (var21.getWeight()) 187 { 188 case 1: 189 var23 = 8; 190 break; 191 case 2: 192 var23 = 4; 193 case 3: 194 case 4: 195 case 6: 196 case 7: 197 case 8: 198 case 9: 199 default: 200 break; 201 case 5: 202 var23 = 2; 203 break; 204 case 10: 205 var23 = 1; 206 } 207 208 var2 += var23 * var14; 209 } 210 } 211 } 212 } 213 214 if (this.field_82857_m != null && !this.field_82857_m.equalsIgnoreCase(var1.func_82833_r()) && this.field_82857_m.length() > 0) 215 { 216 var4 = var1.isItemStackDamageable() ? 7 : var1.stackSize * 5; 217 var2 += var4; 218 219 if (var1.func_82837_s()) 220 { 221 var18 += var4 / 2; 222 } 223 224 var5.func_82834_c(this.field_82857_m); 225 } 226 227 var8 = 0; 228 byte var22; 229 230 for (var20 = var7.keySet().iterator(); var20.hasNext(); var18 += var8 + var12 * var22) 231 { 232 var10 = ((Integer)var20.next()).intValue(); 233 var21 = Enchantment.enchantmentsList[var10]; 234 var12 = ((Integer)var7.get(Integer.valueOf(var10))).intValue(); 235 var22 = 0; 236 ++var8; 237 238 switch (var21.getWeight()) 239 { 240 case 1: 241 var22 = 8; 242 break; 243 case 2: 244 var22 = 4; 245 case 3: 246 case 4: 247 case 6: 248 case 7: 249 case 8: 250 case 9: 251 default: 252 break; 253 case 5: 254 var22 = 2; 255 break; 256 case 10: 257 var22 = 1; 258 } 259 } 260 261 this.field_82854_e = var18 + var2; 262 263 if (var2 <= 0) 264 { 265 var5 = null; 266 } 267 268 if (var4 == var2 && var4 > 0 && this.field_82854_e >= 40) 269 { 270 System.out.println("Naming an item only, cost too high; giving discount to cap cost to 39 levels"); 271 this.field_82854_e = 39; 272 } 273 274 if (this.field_82854_e >= 40 && !this.field_82855_n.capabilities.isCreativeMode) 275 { 276 var5 = null; 277 } 278 279 if (var5 != null) 280 { 281 var9 = var5.func_82838_A(); 282 283 if (var6 != null && var9 < var6.func_82838_A()) 284 { 285 var9 = var6.func_82838_A(); 286 } 287 288 if (var5.func_82837_s()) 289 { 290 var9 -= 5; 291 } 292 293 if (var9 < 0) 294 { 295 var9 = 0; 296 } 297 298 var9 += 2; 299 var5.func_82841_c(var9); 300 EnchantmentHelper.func_82782_a(var7, var5); 301 } 302 303 this.field_82852_f.setInventorySlotContents(0, var5); 304 this.updateCraftingResults(); 305 } 306 } 307 308 public void addCraftingToCrafters(ICrafting par1ICrafting) 309 { 310 super.addCraftingToCrafters(par1ICrafting); 311 par1ICrafting.updateCraftingInventoryInfo(this, 0, this.field_82854_e); 312 } 313 314 /** 315 * Callback for when the crafting gui is closed. 316 */ 317 public void onCraftGuiClosed(EntityPlayer par1EntityPlayer) 318 { 319 super.onCraftGuiClosed(par1EntityPlayer); 320 321 if (!this.field_82860_h.isRemote) 322 { 323 for (int var2 = 0; var2 < this.field_82853_g.getSizeInventory(); ++var2) 324 { 325 ItemStack var3 = this.field_82853_g.getStackInSlotOnClosing(var2); 326 327 if (var3 != null) 328 { 329 par1EntityPlayer.dropPlayerItem(var3); 330 } 331 } 332 } 333 } 334 335 @SideOnly(Side.CLIENT) 336 public void updateProgressBar(int par1, int par2) 337 { 338 if (par1 == 0) 339 { 340 this.field_82854_e = par2; 341 } 342 } 343 344 public boolean canInteractWith(EntityPlayer par1EntityPlayer) 345 { 346 return this.field_82860_h.getBlockId(this.field_82861_i, this.field_82858_j, this.field_82859_k) != Block.field_82510_ck.blockID ? false : par1EntityPlayer.getDistanceSq((double)this.field_82861_i + 0.5D, (double)this.field_82858_j + 0.5D, (double)this.field_82859_k + 0.5D) <= 64.0D; 347 } 348 349 public ItemStack func_82846_b(EntityPlayer par1EntityPlayer, int par2) 350 { 351 ItemStack var3 = null; 352 Slot var4 = (Slot)this.inventorySlots.get(par2); 353 354 if (var4 != null && var4.getHasStack()) 355 { 356 ItemStack var5 = var4.getStack(); 357 var3 = var5.copy(); 358 359 if (par2 == 2) 360 { 361 if (!this.mergeItemStack(var5, 3, 39, true)) 362 { 363 return null; 364 } 365 366 var4.onSlotChange(var5, var3); 367 } 368 else if (par2 != 0 && par2 != 1) 369 { 370 if (par2 >= 3 && par2 < 39 && !this.mergeItemStack(var5, 0, 2, false)) 371 { 372 return null; 373 } 374 } 375 else if (!this.mergeItemStack(var5, 3, 39, false)) 376 { 377 return null; 378 } 379 380 if (var5.stackSize == 0) 381 { 382 var4.putStack((ItemStack)null); 383 } 384 else 385 { 386 var4.onSlotChanged(); 387 } 388 389 if (var5.stackSize == var3.stackSize) 390 { 391 return null; 392 } 393 394 var4.func_82870_a(par1EntityPlayer, var5); 395 } 396 397 return var3; 398 } 399 400 public void func_82850_a(String par1Str) 401 { 402 this.field_82857_m = par1Str; 403 404 if (this.getSlot(2).getHasStack()) 405 { 406 this.getSlot(2).getStack().func_82834_c(this.field_82857_m); 407 } 408 409 this.func_82848_d(); 410 } 411 412 static IInventory func_82851_a(ContainerRepair par0ContainerRepair) 413 { 414 return par0ContainerRepair.field_82853_g; 415 } 416 417 static int func_82849_b(ContainerRepair par0ContainerRepair) 418 { 419 return par0ContainerRepair.field_82856_l; 420 } 421 }