Fixed memory slot checks.

Added creative tier case with all max-tier slots, closes #171. This case also generates an infinite amount of energy.
This commit is contained in:
Florian Nücke 2014-04-07 17:20:26 +02:00
parent 7c615026ac
commit 73cbe3127b
8 changed files with 40 additions and 10 deletions

View File

@ -9,6 +9,7 @@ oc:tile.Capacitor.name=Kondensator
oc:tile.Case0.name=Computergehäuse (Stufe 1)
oc:tile.Case1.name=Computergehäuse (Stufe 2)
oc:tile.Case2.name=Computergehäuse (Stufe 3)
oc:tile.Case3.name=Computergehäuse (Creative)
oc:tile.Charger.name=Ladestation
oc:tile.DiskDrive.name=Diskettenlaufwerk
oc:tile.Keyboard.name=Tastatur

View File

@ -9,6 +9,7 @@ oc:tile.Capacitor.name=Capacitor
oc:tile.Case0.name=Computer Case (Tier 1)
oc:tile.Case1.name=Computer Case (Tier 2)
oc:tile.Case2.name=Computer Case (Tier 3)
oc:tile.Case3.name=Computer Case (Creative)
oc:tile.Charger.name=Charger
oc:tile.DiskDrive.name=Disk Drive
oc:tile.Keyboard.name=Keyboard

View File

@ -18,7 +18,7 @@ object Blocks {
var cable: Cable = _
var capacitor: Capacitor = _
var charger: Charger = _
var case1, case2, case3: Case = _
var case1, case2, case3, case4: Case = _
var diskDrive: DiskDrive = _
var keyboard: Keyboard = _
var hologram: Hologram = _
@ -103,6 +103,9 @@ object Blocks {
hologram = Recipes.addBlockDelegate(new Hologram(blockSpecial), "hologram")
wirelessRouter = Recipes.addBlockDelegate(new WirelessRouter(blockSimple), "wirelessRouter")
// v1.2.6
case4 = new Case.TierCreative(blockSimpleWithRedstone)
// Initialize API.
api.Blocks.AccessPoint = wirelessRouter.createItemStack()
api.Blocks.Adapter = adapter.createItemStack()

View File

@ -21,7 +21,7 @@ abstract class Case(val parent: SimpleDelegator) extends RedstoneAware with Simp
def tier: Int
override def rarity = Array(EnumRarity.common, EnumRarity.uncommon, EnumRarity.rare).apply(tier)
override def rarity = Array(EnumRarity.common, EnumRarity.uncommon, EnumRarity.rare, EnumRarity.epic).apply(tier)
@SideOnly(Side.CLIENT)
override def color = Color.byTier(tier)
@ -30,7 +30,8 @@ abstract class Case(val parent: SimpleDelegator) extends RedstoneAware with Simp
val slots = tier match {
case 0 => "2/1/1"
case 1 => "2/2/2"
case 2 => "3/2/3"
case 2 | 3 => "3/2/3"
case _ => "0/0/0"
}
tooltip.addAll(Tooltip.get("Case", slots))
}
@ -118,4 +119,8 @@ object Case {
def tier = 2
}
class TierCreative(parent: SimpleDelegator) extends Case(parent) {
def tier = 3
}
}

View File

@ -5,7 +5,7 @@ import li.cil.oc.common.tileentity
import net.minecraft.entity.player.{EntityPlayer, InventoryPlayer}
class Case(playerInventory: InventoryPlayer, computer: tileentity.Case) extends Player(playerInventory, computer) {
for (i <- 0 to (if (computer.tier == 2) 2 else 1)) {
for (i <- 0 to (if (computer.tier >= 2) 2 else 1)) {
addSlotToContainer(98, 16 + i * slotSize, api.driver.Slot.Card, computer.maxComponentTierForSlot(getInventory.size))
}
@ -17,11 +17,11 @@ class Case(playerInventory: InventoryPlayer, computer: tileentity.Case) extends
addSlotToContainer(142, 16 + i * slotSize, api.driver.Slot.HardDiskDrive, computer.maxComponentTierForSlot(getInventory.size))
}
if (computer.tier == 2) {
if (computer.tier >= 2) {
addSlotToContainer(142, 16 + 2 * slotSize, api.driver.Slot.Disk)
}
addSlotToContainer(120, 16, api.driver.Slot.Processor, computer.tier)
addSlotToContainer(120, 16, api.driver.Slot.Processor, computer.maxComponentTierForSlot(getInventory.size))
if (computer.tier == 0) {
addSlotToContainer(120, 16 + 2 * slotSize, api.driver.Slot.Memory, computer.maxComponentTierForSlot(getInventory.size))

View File

@ -52,10 +52,18 @@ class Case(var tier: Int, val isRemote: Boolean) extends traits.PowerAcceptor wi
case _ => false
}
override def updateEntity() {
if (tier == 3 && isServer && world.getWorldTime % Settings.get.tickFrequency == 0) {
// Creative case, make it generate power.
node.asInstanceOf[Connector].changeBuffer(Double.PositiveInfinity)
}
super.updateEntity()
}
// ----------------------------------------------------------------------- //
override def readFromNBT(nbt: NBTTagCompound) {
tier = nbt.getByte(Settings.namespace + "tier") max 0 min 2
tier = nbt.getByte(Settings.namespace + "tier") max 0 min 3
color = Color.byTier(tier)
super.readFromNBT(nbt)
recomputeMaxComponents()
@ -79,6 +87,7 @@ class Case(var tier: Int, val isRemote: Boolean) extends traits.PowerAcceptor wi
case 0 => 6
case 1 => 7
case 2 => 9
case 3 => 9
case _ => 0
}
@ -114,6 +123,16 @@ class Case(var tier: Int, val isRemote: Boolean) extends traits.PowerAcceptor wi
case (7, Some(driver)) => driver.slot(stack) == Slot.Disk
case (8, Some(driver)) => driver.slot(stack) == Slot.Processor && driver.tier(stack) <= maxComponentTierForSlot(slot)
case _ => false // Invalid slot.
}
case 3 => (slot, Registry.itemDriverFor(stack)) match {
case (_, None) => false // Invalid item.
case (0 | 1 | 2, Some(driver)) => driver.slot(stack) == Slot.Card
case (3 | 4, Some(driver)) => driver.slot(stack) == Slot.Memory
case (5 | 6, Some(driver)) => driver.slot(stack) == Slot.HardDiskDrive
case (7, Some(driver)) => driver.slot(stack) == Slot.Disk
case (8, Some(driver)) => driver.slot(stack) == Slot.Processor
case _ => false // Invalid slot.
}
case _ => false
}
@ -139,6 +158,7 @@ class Case(var tier: Int, val isRemote: Boolean) extends traits.PowerAcceptor wi
case 8 => 2
case _ => -1 // Invalid slot.
}
case 3 => 2
case _ => -1
}
}

View File

@ -13,7 +13,7 @@ object Memory extends Item with driver.Memory {
case _ => 0
}
override def worksWith(stack: ItemStack) = isOneOf(stack, Items.ram1, Items.ram2, Items.ram3, Items.ram4, Items.ram5)
override def worksWith(stack: ItemStack) = isOneOf(stack, Items.ram1, Items.ram2, Items.ram3, Items.ram4, Items.ram5, Items.ram6)
override def createEnvironment(stack: ItemStack, container: MCTileEntity) = null
@ -21,7 +21,7 @@ object Memory extends Item with driver.Memory {
override def tier(stack: ItemStack) =
Items.multi.subItem(stack) match {
case Some(memory: item.Memory) => (memory.tier + 1) / 2
case Some(memory: item.Memory) => memory.tier / 2
case _ => 0
}
}

View File

@ -47,7 +47,7 @@ object Color {
"dyeOrange" -> Orange,
"dyeWhite" -> White)
val byTier = Array(LightGray, Yellow, Cyan)
val byTier = Array(LightGray, Yellow, Cyan, Magenta)
def isDye(stack: ItemStack) = byOreName.contains(OreDictionary.getOreName(OreDictionary.getOreID(stack)))