Johannes Lohrer | 3791bc3 | 2013-11-30 18:23:49 +0100 | [diff] [blame] | 1 | package li.cil.oc |
| 2 | |
| 3 | import cpw.mods.fml.common.ICraftingHandler |
Florian Nücke | 8fbbd92 | 2013-12-23 21:19:20 +0100 | [diff] [blame] | 4 | import li.cil.oc.server.driver.Registry |
| 5 | import li.cil.oc.util.ExtendedNBT._ |
Johannes Lohrer | 3791bc3 | 2013-11-30 18:23:49 +0100 | [diff] [blame] | 6 | import net.minecraft.entity.player.EntityPlayer |
| 7 | import net.minecraft.inventory.IInventory |
Johannes Lohrer | c66ecb0 | 2013-12-18 23:31:35 +0100 | [diff] [blame] | 8 | import net.minecraft.item.{ItemMap, Item, ItemStack} |
Johannes Lohrer | 3791bc3 | 2013-11-30 18:23:49 +0100 | [diff] [blame] | 9 | |
Florian Nücke | 28fa4c3 | 2013-12-04 00:03:36 +0100 | [diff] [blame] | 10 | object CraftingHandler extends ICraftingHandler { |
| 11 | override def onCrafting(player: EntityPlayer, craftedStack: ItemStack, inventory: IInventory) = { |
Florian Nücke | 28fa4c3 | 2013-12-04 00:03:36 +0100 | [diff] [blame] | 12 | if (craftedStack.isItemEqual(Items.acid.createItemStack())) { |
Florian Nücke | 4cefeb2 | 2014-01-06 21:59:15 +0100 | [diff] [blame] | 13 | for (i <- 0 until inventory.getSizeInventory) { |
Florian Nücke | 28fa4c3 | 2013-12-04 00:03:36 +0100 | [diff] [blame] | 14 | val stack = inventory.getStackInSlot(i) |
| 15 | if (stack != null && stack.getItem == Item.bucketWater) { |
| 16 | stack.stackSize = 0 |
| 17 | inventory.setInventorySlotContents(i, null) |
| 18 | } |
| 19 | } |
| 20 | } |
| 21 | |
| 22 | if (craftedStack.isItemEqual(Items.pcb.createItemStack())) { |
Florian Nücke | 4cefeb2 | 2014-01-06 21:59:15 +0100 | [diff] [blame] | 23 | for (i <- 0 until inventory.getSizeInventory) { |
Florian Nücke | 28fa4c3 | 2013-12-04 00:03:36 +0100 | [diff] [blame] | 24 | val stack = inventory.getStackInSlot(i) |
| 25 | if (stack != null && stack.isItemEqual(Items.acid.createItemStack())) { |
| 26 | val container = new ItemStack(Item.bucketEmpty, 1) |
| 27 | if (!player.inventory.addItemStackToInventory(container)) { |
| 28 | player.dropPlayerItem(container) |
| 29 | } |
Johannes Lohrer | 3791bc3 | 2013-11-30 18:23:49 +0100 | [diff] [blame] | 30 | } |
| 31 | } |
| 32 | } |
Florian Nücke | 8fbbd92 | 2013-12-23 21:19:20 +0100 | [diff] [blame] | 33 | |
Florian Nücke | 30434a9 | 2013-12-24 14:19:43 +0100 | [diff] [blame] | 34 | if (craftedStack.isItemEqual(Items.upgradeNavigation.createItemStack())) { |
Florian Nücke | aa68275 | 2013-12-28 21:23:31 +0100 | [diff] [blame] | 35 | Registry.itemDriverFor(craftedStack) match { |
Florian Nücke | 8fbbd92 | 2013-12-23 21:19:20 +0100 | [diff] [blame] | 36 | case Some(driver) => |
Florian Nücke | 30434a9 | 2013-12-24 14:19:43 +0100 | [diff] [blame] | 37 | var oldMap = None: Option[ItemStack] |
Florian Nücke | 4cefeb2 | 2014-01-06 21:59:15 +0100 | [diff] [blame] | 38 | for (i <- 0 until inventory.getSizeInventory) { |
Florian Nücke | 8fbbd92 | 2013-12-23 21:19:20 +0100 | [diff] [blame] | 39 | val stack = inventory.getStackInSlot(i) |
| 40 | if (stack != null) { |
Florian Nücke | ba46bd5 | 2013-12-23 21:39:07 +0100 | [diff] [blame] | 41 | if (stack.isItemEqual(Items.upgradeNavigation.createItemStack())) { |
Florian Nücke | 8fbbd92 | 2013-12-23 21:19:20 +0100 | [diff] [blame] | 42 | // Restore the map currently used in the upgrade. |
| 43 | val nbt = driver.dataTag(stack) |
Florian Nücke | 30434a9 | 2013-12-24 14:19:43 +0100 | [diff] [blame] | 44 | oldMap = Option(ItemStack.loadItemStackFromNBT(nbt.getCompoundTag(Settings.namespace + "map"))) |
Florian Nücke | 8fbbd92 | 2013-12-23 21:19:20 +0100 | [diff] [blame] | 45 | } |
| 46 | else if (stack.getItem == Item.map) { |
| 47 | // Store information of the map used for crafting in the result. |
| 48 | val nbt = driver.dataTag(craftedStack) |
| 49 | val map = stack.getItem.asInstanceOf[ItemMap] |
| 50 | val info = map.getMapData(stack, player.getEntityWorld) |
| 51 | nbt.setInteger(Settings.namespace + "xCenter", info.xCenter) |
| 52 | nbt.setInteger(Settings.namespace + "zCenter", info.zCenter) |
| 53 | nbt.setInteger(Settings.namespace + "scale", 128 * (1 << info.scale)) |
| 54 | nbt.setNewCompoundTag(Settings.namespace + "map", stack.writeToNBT) |
| 55 | } |
| 56 | } |
Johannes Lohrer | f6ab7e4 | 2013-12-23 16:38:38 +0100 | [diff] [blame] | 57 | } |
Florian Nücke | 30434a9 | 2013-12-24 14:19:43 +0100 | [diff] [blame] | 58 | if (oldMap.isDefined) { |
| 59 | val map = oldMap.get |
| 60 | if (!player.inventory.addItemStackToInventory(map)) { |
| 61 | player.dropPlayerItemWithRandomChoice(map, false) |
| 62 | } |
| 63 | } |
Florian Nücke | 8fbbd92 | 2013-12-23 21:19:20 +0100 | [diff] [blame] | 64 | case _ => |
Johannes Lohrer | c66ecb0 | 2013-12-18 23:31:35 +0100 | [diff] [blame] | 65 | } |
| 66 | } |
Johannes Lohrer | 3791bc3 | 2013-11-30 18:23:49 +0100 | [diff] [blame] | 67 | } |
| 68 | |
Florian Nücke | 28fa4c3 | 2013-12-04 00:03:36 +0100 | [diff] [blame] | 69 | override def onSmelting(player: EntityPlayer, item: ItemStack) {} |
Johannes Lohrer | 3791bc3 | 2013-11-30 18:23:49 +0100 | [diff] [blame] | 70 | } |