blob: eee0a3fc5606111cf8db7de4046c3a8619a778cc [file] [log] [blame] [raw]
package li.cil.oc.common.item
import java.util.Random
import li.cil.oc.Constants
import li.cil.oc.OpenComputers
import li.cil.oc.api
import li.cil.oc.util.InventoryUtils
import li.cil.oc.util.ItemUtils
import net.minecraft.entity.player.EntityPlayer
import net.minecraft.item.ItemStack
import net.minecraft.world.World
import scala.collection.mutable
class Present(val parent: Delegator) extends Delegate {
showInItemList = false
override def onItemRightClick(stack: ItemStack, world: World, player: EntityPlayer) = {
if (stack.stackSize > 0) {
stack.stackSize -= 1
if (!world.isRemote) {
world.playSoundAtEntity(player, "random.levelup", 0.2f, 1f)
val present = Present.nextPresent()
InventoryUtils.addToPlayerInventory(present, player)
}
}
stack
}
}
object Present {
private lazy val Presents = {
val result = mutable.ArrayBuffer.empty[ItemStack]
def add(name: String, weight: Int): Unit = {
val item = api.Items.get(name)
if (item != null) {
val stack = item.createItemStack(1)
// Only if it can be crafted (wasn't disabled in the config).
if (ItemUtils.getIngredients(stack).nonEmpty) {
for (i <- 0 until weight) result += stack
}
}
else {
OpenComputers.log.warn(s"Oops, trying to add '$name' as a present even though it doesn't exist!")
}
}
add(Constants.ItemName.ArrowKeys, 520)
add(Constants.ItemName.ButtonGroup, 460)
add(Constants.ItemName.NumPad, 410)
add(Constants.ItemName.Disk, 370)
add(Constants.ItemName.Transistor, 350)
add(Constants.ItemName.Floppy, 340)
add(Constants.ItemName.PrintedCircuitBoard, 320)
add(Constants.ItemName.ChipTier1, 290)
add(Constants.ItemName.EEPROM, 250)
add(Constants.ItemName.Interweb, 220)
add(Constants.ItemName.Card, 190)
add(Constants.ItemName.Analyzer, 170)
add(Constants.ItemName.SignUpgrade, 150)
add(Constants.ItemName.InventoryUpgrade, 130)
add(Constants.ItemName.CraftingUpgrade, 110)
add(Constants.ItemName.TankUpgrade, 90)
add(Constants.ItemName.PistonUpgrade, 80)
add(Constants.ItemName.LeashUpgrade, 70)
add(Constants.ItemName.AngelUpgrade, 55)
add(Constants.ItemName.RedstoneCardTier1, 50)
add(Constants.ItemName.RAMTier1, 48)
add(Constants.ItemName.ControlUnit, 46)
add(Constants.ItemName.Alu, 45)
add(Constants.ItemName.BatteryUpgradeTier1, 43)
add(Constants.ItemName.NetworkCard, 38)
add(Constants.ItemName.HDDTier1, 36)
add(Constants.ItemName.GeneratorUpgrade, 35)
add(Constants.ItemName.CPUTier1, 31)
add(Constants.ItemName.MicrocontrollerCaseTier1, 30)
add(Constants.ItemName.DroneCaseTier1, 25)
add(Constants.ItemName.UpgradeContainerTier1, 23)
add(Constants.ItemName.CardContainerTier1, 23)
add(Constants.ItemName.GraphicsCardTier1, 19)
add(Constants.ItemName.RedstoneCardTier2, 17)
add(Constants.ItemName.RAMTier2, 15)
add(Constants.ItemName.DatabaseUpgradeTier1, 15)
add(Constants.ItemName.ChipTier2, 15)
add(Constants.ItemName.ComponentBusTier1, 13)
add(Constants.ItemName.BatteryUpgradeTier2, 12)
add(Constants.ItemName.WirelessNetworkCard, 11)
add(Constants.ItemName.RAMTier3, 10)
add(Constants.ItemName.ServerTier1, 10)
add(Constants.ItemName.InternetCard, 9)
add(Constants.ItemName.Terminal, 9)
add(Constants.ItemName.SolarGeneratorUpgrade, 9)
add(Constants.ItemName.HDDTier2, 7)
add(Constants.ItemName.NavigationUpgrade, 7)
add(Constants.ItemName.InventoryControllerUpgrade, 7)
add(Constants.ItemName.TankControllerUpgrade, 7)
add(Constants.ItemName.CPUTier2, 6)
add(Constants.ItemName.MicrocontrollerCaseTier2, 6)
add(Constants.ItemName.ComponentBusTier2, 6)
add(Constants.ItemName.TabletCaseTier1, 5)
add(Constants.ItemName.UpgradeContainerTier2, 5)
add(Constants.ItemName.CardContainerTier2, 5)
add(Constants.ItemName.GraphicsCardTier2, 4)
add(Constants.ItemName.RAMTier4, 4)
add(Constants.ItemName.DroneCaseTier2, 4)
add(Constants.ItemName.DatabaseUpgradeTier2, 4)
add(Constants.ItemName.ServerTier2, 4)
add(Constants.ItemName.ChipTier3, 3)
add(Constants.ItemName.ComponentBusTier3, 3)
add(Constants.ItemName.TractorBeamUpgrade, 3)
add(Constants.ItemName.BatteryUpgradeTier3, 3)
add(Constants.ItemName.ExperienceUpgrade, 2)
add(Constants.ItemName.RAMTier5, 2)
add(Constants.ItemName.UpgradeContainerTier3, 2)
add(Constants.ItemName.CardContainerTier3, 2)
add(Constants.ItemName.TabletCaseTier2, 1)
add(Constants.ItemName.HDDTier3, 1)
add(Constants.ItemName.ChunkloaderUpgrade, 1)
add(Constants.ItemName.CPUTier3, 1)
add(Constants.ItemName.GraphicsCardTier3, 1)
add(Constants.ItemName.ServerTier3, 1)
add(Constants.ItemName.DatabaseUpgradeTier3, 1)
add(Constants.ItemName.RAMTier6, 1)
result.toArray
}
private val rng = new Random()
def nextPresent() = Presents(rng.nextInt(Presents.length)).copy()
}