blob: d354480c648bbbb63f4319087ca633fde18fb03f [file] [log] [blame] [raw]
Johannes Lohrer3791bc32013-11-30 18:23:49 +01001package li.cil.oc
2
3import cpw.mods.fml.common.ICraftingHandler
Florian Nücke8fbbd922013-12-23 21:19:20 +01004import li.cil.oc.server.driver.Registry
5import li.cil.oc.util.ExtendedNBT._
Johannes Lohrer3791bc32013-11-30 18:23:49 +01006import net.minecraft.entity.player.EntityPlayer
7import net.minecraft.inventory.IInventory
Johannes Lohrerc66ecb02013-12-18 23:31:35 +01008import net.minecraft.item.{ItemMap, Item, ItemStack}
Johannes Lohrer3791bc32013-11-30 18:23:49 +01009
Florian Nücke28fa4c32013-12-04 00:03:36 +010010object CraftingHandler extends ICraftingHandler {
11 override def onCrafting(player: EntityPlayer, craftedStack: ItemStack, inventory: IInventory) = {
Florian Nücke28fa4c32013-12-04 00:03:36 +010012 if (craftedStack.isItemEqual(Items.acid.createItemStack())) {
Florian Nücke4cefeb22014-01-06 21:59:15 +010013 for (i <- 0 until inventory.getSizeInventory) {
Florian Nücke28fa4c32013-12-04 00:03:36 +010014 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ücke4cefeb22014-01-06 21:59:15 +010023 for (i <- 0 until inventory.getSizeInventory) {
Florian Nücke28fa4c32013-12-04 00:03:36 +010024 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 Lohrer3791bc32013-11-30 18:23:49 +010030 }
31 }
32 }
Florian Nücke8fbbd922013-12-23 21:19:20 +010033
Florian Nücke30434a92013-12-24 14:19:43 +010034 if (craftedStack.isItemEqual(Items.upgradeNavigation.createItemStack())) {
Florian Nückeaa682752013-12-28 21:23:31 +010035 Registry.itemDriverFor(craftedStack) match {
Florian Nücke8fbbd922013-12-23 21:19:20 +010036 case Some(driver) =>
Florian Nücke30434a92013-12-24 14:19:43 +010037 var oldMap = None: Option[ItemStack]
Florian Nücke4cefeb22014-01-06 21:59:15 +010038 for (i <- 0 until inventory.getSizeInventory) {
Florian Nücke8fbbd922013-12-23 21:19:20 +010039 val stack = inventory.getStackInSlot(i)
40 if (stack != null) {
Florian Nückeba46bd52013-12-23 21:39:07 +010041 if (stack.isItemEqual(Items.upgradeNavigation.createItemStack())) {
Florian Nücke8fbbd922013-12-23 21:19:20 +010042 // Restore the map currently used in the upgrade.
43 val nbt = driver.dataTag(stack)
Florian Nücke30434a92013-12-24 14:19:43 +010044 oldMap = Option(ItemStack.loadItemStackFromNBT(nbt.getCompoundTag(Settings.namespace + "map")))
Florian Nücke8fbbd922013-12-23 21:19:20 +010045 }
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 Lohrerf6ab7e42013-12-23 16:38:38 +010057 }
Florian Nücke30434a92013-12-24 14:19:43 +010058 if (oldMap.isDefined) {
59 val map = oldMap.get
60 if (!player.inventory.addItemStackToInventory(map)) {
61 player.dropPlayerItemWithRandomChoice(map, false)
62 }
63 }
Florian Nücke8fbbd922013-12-23 21:19:20 +010064 case _ =>
Johannes Lohrerc66ecb02013-12-18 23:31:35 +010065 }
66 }
Johannes Lohrer3791bc32013-11-30 18:23:49 +010067 }
68
Florian Nücke28fa4c32013-12-04 00:03:36 +010069 override def onSmelting(player: EntityPlayer, item: ItemStack) {}
Johannes Lohrer3791bc32013-11-30 18:23:49 +010070}