mirror of
https://github.com/MightyPirates/OpenComputers.git
synced 2025-09-17 11:15:12 -04:00
Hmm, this might make more sense. Maybe.
This commit is contained in:
parent
b31692bbb6
commit
d6514878f7
@ -100,10 +100,10 @@ public final class Driver {
|
|||||||
* will be used.
|
* will be used.
|
||||||
*
|
*
|
||||||
* @param stack the item stack to get a driver for.
|
* @param stack the item stack to get a driver for.
|
||||||
* @param host the object that will host the environment created by returned driver.
|
* @param host the type that will host the environment created by returned driver.
|
||||||
* @return a driver for the item, or <tt>null</tt> if there is none.
|
* @return a driver for the item, or <tt>null</tt> if there is none.
|
||||||
*/
|
*/
|
||||||
public static Item driverFor(ItemStack stack, EnvironmentHost host) {
|
public static Item driverFor(ItemStack stack, Class<? extends EnvironmentHost> host) {
|
||||||
if (instance != null)
|
if (instance != null)
|
||||||
return instance.driverFor(stack, host);
|
return instance.driverFor(stack, host);
|
||||||
return null;
|
return null;
|
||||||
|
@ -73,10 +73,10 @@ public interface DriverAPI {
|
|||||||
* will be used.
|
* will be used.
|
||||||
*
|
*
|
||||||
* @param stack the item stack to get a driver for.
|
* @param stack the item stack to get a driver for.
|
||||||
* @param host the object that will host the environment created by returned driver.
|
* @param host the type that will host the environment created by returned driver.
|
||||||
* @return a driver for the item, or <tt>null</tt> if there is none.
|
* @return a driver for the item, or <tt>null</tt> if there is none.
|
||||||
*/
|
*/
|
||||||
Item driverFor(ItemStack stack, EnvironmentHost host);
|
Item driverFor(ItemStack stack, Class<? extends EnvironmentHost> host);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Looks up a driver for the specified item stack.
|
* Looks up a driver for the specified item stack.
|
||||||
|
@ -32,10 +32,10 @@ public interface Item {
|
|||||||
* be ejected, since this value is only checked when adding components.
|
* be ejected, since this value is only checked when adding components.
|
||||||
*
|
*
|
||||||
* @param stack the item to check.
|
* @param stack the item to check.
|
||||||
* @param host the host the environment would live in.
|
* @param host the type of host the environment would live in.
|
||||||
* @return <tt>true</tt> if the item is supported; <tt>false</tt> otherwise.
|
* @return <tt>true</tt> if the item is supported; <tt>false</tt> otherwise.
|
||||||
*/
|
*/
|
||||||
boolean worksWith(ItemStack stack, EnvironmentHost host);
|
boolean worksWith(ItemStack stack, Class<? extends EnvironmentHost> host);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Used to determine the item types this driver handles.
|
* Used to determine the item types this driver handles.
|
||||||
|
@ -27,7 +27,12 @@ public abstract class DriverItem implements li.cil.oc.api.driver.Item {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean worksWith(final ItemStack stack, final EnvironmentHost host) {
|
public boolean worksWith(final ItemStack stack, final Class<? extends EnvironmentHost> host) {
|
||||||
|
return worksWith(stack);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean worksWith(final ItemStack stack) {
|
||||||
if (stack != null) {
|
if (stack != null) {
|
||||||
for (ItemStack item : items) {
|
for (ItemStack item : items) {
|
||||||
if (item != null && item.isItemEqual(stack)) {
|
if (item != null && item.isItemEqual(stack)) {
|
||||||
|
@ -23,7 +23,7 @@ class Robot(playerInventory: InventoryPlayer, val robot: tileentity.Robot) exten
|
|||||||
case Some(buffer: api.component.TextBuffer) => buffer
|
case Some(buffer: api.component.TextBuffer) => buffer
|
||||||
}.headOption.orNull
|
}.headOption.orNull
|
||||||
|
|
||||||
override protected val hasKeyboard = robot.info.components.map(api.Driver.driverFor).contains(driver.item.Keyboard)
|
override protected val hasKeyboard = robot.info.components.map(api.Driver.driverFor(_, robot.getClass)).contains(driver.item.Keyboard)
|
||||||
|
|
||||||
private val withScreenHeight = 256
|
private val withScreenHeight = 256
|
||||||
private val noScreenHeight = 108
|
private val noScreenHeight = 108
|
||||||
|
@ -15,7 +15,7 @@ import scala.collection.mutable
|
|||||||
class Terminal(val rack: tileentity.ServerRack, val number: Int) {
|
class Terminal(val rack: tileentity.ServerRack, val number: Int) {
|
||||||
val buffer = {
|
val buffer = {
|
||||||
val screenItem = api.Items.get("screen1").createItemStack(1)
|
val screenItem = api.Items.get("screen1").createItemStack(1)
|
||||||
val buffer = api.Driver.driverFor(screenItem, rack).createEnvironment(screenItem, rack).asInstanceOf[api.component.TextBuffer]
|
val buffer = api.Driver.driverFor(screenItem, rack.getClass).createEnvironment(screenItem, rack).asInstanceOf[api.component.TextBuffer]
|
||||||
val (maxWidth, maxHeight) = Settings.screenResolutionsByTier(1)
|
val (maxWidth, maxHeight) = Settings.screenResolutionsByTier(1)
|
||||||
buffer.setMaximumResolution(maxWidth, maxHeight)
|
buffer.setMaximumResolution(maxWidth, maxHeight)
|
||||||
buffer.setMaximumColorDepth(Settings.screenDepthsByTier(1))
|
buffer.setMaximumColorDepth(Settings.screenDepthsByTier(1))
|
||||||
@ -24,7 +24,7 @@ class Terminal(val rack: tileentity.ServerRack, val number: Int) {
|
|||||||
|
|
||||||
val keyboard = {
|
val keyboard = {
|
||||||
val keyboardItem = api.Items.get("keyboard").createItemStack(1)
|
val keyboardItem = api.Items.get("keyboard").createItemStack(1)
|
||||||
val keyboard = api.Driver.driverFor(keyboardItem, rack).createEnvironment(keyboardItem, rack).asInstanceOf[api.component.Keyboard]
|
val keyboard = api.Driver.driverFor(keyboardItem, rack.getClass).createEnvironment(keyboardItem, rack).asInstanceOf[api.component.Keyboard]
|
||||||
keyboard.setUsableOverride(new UsabilityChecker {
|
keyboard.setUsableOverride(new UsabilityChecker {
|
||||||
override def isUsableByPlayer(keyboard: api.component.Keyboard, player: EntityPlayer) = {
|
override def isUsableByPlayer(keyboard: api.component.Keyboard, player: EntityPlayer) = {
|
||||||
val stack = player.getCurrentEquippedItem
|
val stack = player.getCurrentEquippedItem
|
||||||
|
@ -35,7 +35,7 @@ trait ComponentInventory extends Inventory with network.Environment {
|
|||||||
for (slot <- 0 until getSizeInventory if slot >= 0 && slot < components.length) {
|
for (slot <- 0 until getSizeInventory if slot >= 0 && slot < components.length) {
|
||||||
val stack = getStackInSlot(slot)
|
val stack = getStackInSlot(slot)
|
||||||
if (stack != null && components(slot).isEmpty && isComponentSlot(slot)) {
|
if (stack != null && components(slot).isEmpty && isComponentSlot(slot)) {
|
||||||
components(slot) = Option(Driver.driverFor(stack, host)) match {
|
components(slot) = Option(Driver.driverFor(stack, host.getClass)) match {
|
||||||
case Some(driver) =>
|
case Some(driver) =>
|
||||||
Option(driver.createEnvironment(stack, host)) match {
|
Option(driver.createEnvironment(stack, host)) match {
|
||||||
case Some(component) =>
|
case Some(component) =>
|
||||||
@ -81,7 +81,7 @@ trait ComponentInventory extends Inventory with network.Environment {
|
|||||||
components(slot) match {
|
components(slot) match {
|
||||||
case Some(component) =>
|
case Some(component) =>
|
||||||
// We're guaranteed to have a driver for entries.
|
// We're guaranteed to have a driver for entries.
|
||||||
save(component, Driver.driverFor(stack, host), stack)
|
save(component, Driver.driverFor(stack, host.getClass), stack)
|
||||||
case _ => // Nothing special to save.
|
case _ => // Nothing special to save.
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -93,7 +93,7 @@ trait ComponentInventory extends Inventory with network.Environment {
|
|||||||
override def getInventoryStackLimit = 1
|
override def getInventoryStackLimit = 1
|
||||||
|
|
||||||
override protected def onItemAdded(slot: Int, stack: ItemStack) = if (isComponentSlot(slot)) {
|
override protected def onItemAdded(slot: Int, stack: ItemStack) = if (isComponentSlot(slot)) {
|
||||||
Option(Driver.driverFor(stack, host)).foreach(driver =>
|
Option(Driver.driverFor(stack, host.getClass)).foreach(driver =>
|
||||||
Option(driver.createEnvironment(stack, host)) match {
|
Option(driver.createEnvironment(stack, host)) match {
|
||||||
case Some(component) => this.synchronized {
|
case Some(component) => this.synchronized {
|
||||||
components(slot) = Some(component)
|
components(slot) = Some(component)
|
||||||
@ -124,7 +124,7 @@ trait ComponentInventory extends Inventory with network.Environment {
|
|||||||
components(slot) = None
|
components(slot) = None
|
||||||
updatingComponents -= component
|
updatingComponents -= component
|
||||||
Option(component.node).foreach(_.remove())
|
Option(component.node).foreach(_.remove())
|
||||||
Option(Driver.driverFor(stack, host)).foreach(save(component, _, stack))
|
Option(Driver.driverFor(stack, host.getClass)).foreach(save(component, _, stack))
|
||||||
// However, nodes then may add themselves to a network again, to
|
// However, nodes then may add themselves to a network again, to
|
||||||
// ensure they have an address that gets sent to the client, used
|
// ensure they have an address that gets sent to the client, used
|
||||||
// for associating some components with each other. So we do it again.
|
// for associating some components with each other. So we do it again.
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
package li.cil.oc.common.inventory
|
package li.cil.oc.common.inventory
|
||||||
|
|
||||||
import li.cil.oc.api.Driver
|
import li.cil.oc.api.Driver
|
||||||
import li.cil.oc.common.InventorySlots
|
import li.cil.oc.common.{InventorySlots, tileentity}
|
||||||
import net.minecraft.entity.player.EntityPlayer
|
import net.minecraft.entity.player.EntityPlayer
|
||||||
import net.minecraft.item.ItemStack
|
import net.minecraft.item.ItemStack
|
||||||
|
|
||||||
@ -17,7 +17,7 @@ trait ServerInventory extends ItemStackInventory {
|
|||||||
override def isUseableByPlayer(player: EntityPlayer) = false
|
override def isUseableByPlayer(player: EntityPlayer) = false
|
||||||
|
|
||||||
override def isItemValidForSlot(slot: Int, stack: ItemStack) =
|
override def isItemValidForSlot(slot: Int, stack: ItemStack) =
|
||||||
Option(Driver.driverFor(stack)).fold(false)(driver => {
|
Option(Driver.driverFor(stack, classOf[tileentity.ServerRack])).fold(false)(driver => {
|
||||||
val provided = InventorySlots.server(tier)(slot)
|
val provided = InventorySlots.server(tier)(slot)
|
||||||
driver.slot(stack) == provided.slot && driver.tier(stack) <= provided.tier
|
driver.slot(stack) == provided.slot && driver.tier(stack) <= provided.tier
|
||||||
})
|
})
|
||||||
|
@ -221,7 +221,7 @@ class TabletWrapper(var stack: ItemStack, var holder: EntityPlayer) extends Comp
|
|||||||
|
|
||||||
override def cpuArchitecture: Class[_ <: Architecture] = {
|
override def cpuArchitecture: Class[_ <: Architecture] = {
|
||||||
for (i <- 0 until getSizeInventory if isComponentSlot(i)) Option(getStackInSlot(i)) match {
|
for (i <- 0 until getSizeInventory if isComponentSlot(i)) Option(getStackInSlot(i)) match {
|
||||||
case Some(s) => Option(Driver.driverFor(s, host)) match {
|
case Some(s) => Option(Driver.driverFor(s, getClass)) match {
|
||||||
case Some(driver: Processor) if driver.slot(s) == Slot.CPU => return driver.architecture(s)
|
case Some(driver: Processor) if driver.slot(s) == Slot.CPU => return driver.architecture(s)
|
||||||
case _ =>
|
case _ =>
|
||||||
}
|
}
|
||||||
@ -231,7 +231,7 @@ class TabletWrapper(var stack: ItemStack, var holder: EntityPlayer) extends Comp
|
|||||||
}
|
}
|
||||||
|
|
||||||
override def installedMemory = items.foldLeft(0)((acc, itemOption) => acc + (itemOption match {
|
override def installedMemory = items.foldLeft(0)((acc, itemOption) => acc + (itemOption match {
|
||||||
case Some(item) => Option(api.Driver.driverFor(item, host)) match {
|
case Some(item) => Option(api.Driver.driverFor(item, getClass)) match {
|
||||||
case Some(driver: api.driver.Memory) => driver.amount(item)
|
case Some(driver: api.driver.Memory) => driver.amount(item)
|
||||||
case _ => 0
|
case _ => 0
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
package li.cil.oc.common.template
|
package li.cil.oc.common.template
|
||||||
|
|
||||||
import cpw.mods.fml.common.event.FMLInterModComms
|
import cpw.mods.fml.common.event.FMLInterModComms
|
||||||
import li.cil.oc.common.{Slot, Tier}
|
import li.cil.oc.common.{Slot, Tier, tileentity}
|
||||||
import li.cil.oc.util.ExtendedNBT._
|
import li.cil.oc.util.ExtendedNBT._
|
||||||
import li.cil.oc.util.ItemUtils
|
import li.cil.oc.util.ItemUtils
|
||||||
import li.cil.oc.{Settings, api}
|
import li.cil.oc.{Settings, api}
|
||||||
@ -10,6 +10,8 @@ import net.minecraft.item.ItemStack
|
|||||||
import net.minecraft.nbt.{NBTTagCompound, NBTTagList}
|
import net.minecraft.nbt.{NBTTagCompound, NBTTagList}
|
||||||
|
|
||||||
object RobotTemplate extends Template {
|
object RobotTemplate extends Template {
|
||||||
|
override protected def hostClass = classOf[tileentity.Robot]
|
||||||
|
|
||||||
def selectTier1(stack: ItemStack) = ItemUtils.caseTier(stack) == Tier.One
|
def selectTier1(stack: ItemStack) = ItemUtils.caseTier(stack) == Tier.One
|
||||||
|
|
||||||
def selectTier2(stack: ItemStack) = ItemUtils.caseTier(stack) == Tier.Two
|
def selectTier2(stack: ItemStack) = ItemUtils.caseTier(stack) == Tier.Two
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
package li.cil.oc.common.template
|
package li.cil.oc.common.template
|
||||||
|
|
||||||
import cpw.mods.fml.common.event.FMLInterModComms
|
import cpw.mods.fml.common.event.FMLInterModComms
|
||||||
|
import li.cil.oc.common.item.TabletWrapper
|
||||||
import li.cil.oc.{Settings, api}
|
import li.cil.oc.{Settings, api}
|
||||||
import li.cil.oc.common.{Slot, Tier}
|
import li.cil.oc.common.{Slot, Tier}
|
||||||
import li.cil.oc.server.driver.item
|
import li.cil.oc.server.driver.item
|
||||||
@ -17,11 +18,13 @@ object TabletTemplate extends Template {
|
|||||||
"GraphicsCard" -> ((inventory: IInventory) => Array("graphicsCard1", "graphicsCard2", "graphicsCard3").exists(name => hasComponent(name)(inventory))),
|
"GraphicsCard" -> ((inventory: IInventory) => Array("graphicsCard1", "graphicsCard2", "graphicsCard3").exists(name => hasComponent(name)(inventory))),
|
||||||
"OS" -> hasFileSystem _)
|
"OS" -> hasFileSystem _)
|
||||||
|
|
||||||
|
override protected def hostClass = classOf[TabletWrapper]
|
||||||
|
|
||||||
def select(stack: ItemStack) = api.Items.get(stack) == api.Items.get("tabletCase")
|
def select(stack: ItemStack) = api.Items.get(stack) == api.Items.get("tabletCase")
|
||||||
|
|
||||||
def validate(inventory: IInventory): Array[AnyRef] = validateComputer(inventory)
|
def validate(inventory: IInventory): Array[AnyRef] = validateComputer(inventory)
|
||||||
|
|
||||||
def validateUpgrade(inventory: IInventory, slot: Int, tier: Int, stack: ItemStack): Boolean = Option(api.Driver.driverFor(stack)) match {
|
def validateUpgrade(inventory: IInventory, slot: Int, tier: Int, stack: ItemStack): Boolean = Option(api.Driver.driverFor(stack, hostClass)) match {
|
||||||
case Some(driver) if driver.slot(stack) == Slot.Upgrade =>
|
case Some(driver) if driver.slot(stack) == Slot.Upgrade =>
|
||||||
driver != item.Screen &&
|
driver != item.Screen &&
|
||||||
driver.slot(stack) == Slot.Upgrade && driver.tier(stack) <= tier
|
driver.slot(stack) == Slot.Upgrade && driver.tier(stack) <= tier
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package li.cil.oc.common.template
|
package li.cil.oc.common.template
|
||||||
|
|
||||||
import li.cil.oc.api.driver.{Container, Inventory, Memory, Processor}
|
import li.cil.oc.api.driver._
|
||||||
import li.cil.oc.common.{Slot, Tier}
|
import li.cil.oc.common.{Slot, Tier}
|
||||||
import li.cil.oc.{Localization, Settings, api}
|
import li.cil.oc.{Localization, Settings, api}
|
||||||
import net.minecraft.inventory.IInventory
|
import net.minecraft.inventory.IInventory
|
||||||
@ -17,6 +17,8 @@ abstract class Template {
|
|||||||
"Inventory" -> hasInventory _,
|
"Inventory" -> hasInventory _,
|
||||||
"OS" -> hasFileSystem _)
|
"OS" -> hasFileSystem _)
|
||||||
|
|
||||||
|
protected def hostClass: Class[_ <: EnvironmentHost]
|
||||||
|
|
||||||
protected def validateComputer(inventory: IInventory): Array[AnyRef] = {
|
protected def validateComputer(inventory: IInventory): Array[AnyRef] = {
|
||||||
val hasCase = caseTier(inventory) != Tier.None
|
val hasCase = caseTier(inventory) != Tier.None
|
||||||
val hasCPU = this.hasCPU(inventory)
|
val hasCPU = this.hasCPU(inventory)
|
||||||
@ -51,12 +53,12 @@ abstract class Template {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
protected def hasCPU(inventory: IInventory) = exists(inventory, api.Driver.driverFor(_) match {
|
protected def hasCPU(inventory: IInventory) = exists(inventory, api.Driver.driverFor(_, hostClass) match {
|
||||||
case _: Processor => true
|
case _: Processor => true
|
||||||
case _ => false
|
case _ => false
|
||||||
})
|
})
|
||||||
|
|
||||||
protected def hasRAM(inventory: IInventory) = exists(inventory, api.Driver.driverFor(_) match {
|
protected def hasRAM(inventory: IInventory) = exists(inventory, api.Driver.driverFor(_, hostClass) match {
|
||||||
case _: Memory => true
|
case _: Memory => true
|
||||||
case _ => false
|
case _ => false
|
||||||
})
|
})
|
||||||
@ -66,12 +68,12 @@ abstract class Template {
|
|||||||
case _ => false
|
case _ => false
|
||||||
})
|
})
|
||||||
|
|
||||||
protected def hasInventory(inventory: IInventory) = exists(inventory, api.Driver.driverFor(_) match {
|
protected def hasInventory(inventory: IInventory) = exists(inventory, api.Driver.driverFor(_, hostClass) match {
|
||||||
case _: Inventory => true
|
case _: Inventory => true
|
||||||
case _ => false
|
case _ => false
|
||||||
})
|
})
|
||||||
|
|
||||||
protected def hasFileSystem(inventory: IInventory) = exists(inventory, stack => Option(api.Driver.driverFor(stack)) match {
|
protected def hasFileSystem(inventory: IInventory) = exists(inventory, stack => Option(api.Driver.driverFor(stack, hostClass)) match {
|
||||||
case Some(driver) => driver.slot(stack) == Slot.Floppy || driver.slot(stack) == Slot.HDD
|
case Some(driver) => driver.slot(stack) == Slot.Floppy || driver.slot(stack) == Slot.HDD
|
||||||
case _ => false
|
case _ => false
|
||||||
})
|
})
|
||||||
@ -80,7 +82,7 @@ abstract class Template {
|
|||||||
var acc = 0
|
var acc = 0
|
||||||
for (slot <- 1 until inventory.getSizeInventory) {
|
for (slot <- 1 until inventory.getSizeInventory) {
|
||||||
val stack = inventory.getStackInSlot(slot)
|
val stack = inventory.getStackInSlot(slot)
|
||||||
acc += (Option(api.Driver.driverFor(stack)) match {
|
acc += (Option(api.Driver.driverFor(stack, hostClass)) match {
|
||||||
case Some(driver: Processor) => 0 // CPUs are exempt, since they control the limit.
|
case Some(driver: Processor) => 0 // CPUs are exempt, since they control the limit.
|
||||||
case Some(driver: Container) => (1 + driver.tier(stack)) * 2
|
case Some(driver: Container) => (1 + driver.tier(stack)) * 2
|
||||||
case Some(driver) => 1 + driver.tier(stack)
|
case Some(driver) => 1 + driver.tier(stack)
|
||||||
@ -94,7 +96,7 @@ abstract class Template {
|
|||||||
val caseTier = this.caseTier(inventory)
|
val caseTier = this.caseTier(inventory)
|
||||||
val cpuTier = (0 until inventory.getSizeInventory).foldRight(0)((slot, acc) => {
|
val cpuTier = (0 until inventory.getSizeInventory).foldRight(0)((slot, acc) => {
|
||||||
val stack = inventory.getStackInSlot(slot)
|
val stack = inventory.getStackInSlot(slot)
|
||||||
acc + (api.Driver.driverFor(stack) match {
|
acc + (api.Driver.driverFor(stack, hostClass) match {
|
||||||
case processor: Processor => processor.tier(stack)
|
case processor: Processor => processor.tier(stack)
|
||||||
case _ => 0
|
case _ => 0
|
||||||
})
|
})
|
||||||
|
@ -33,7 +33,7 @@ class Case(var tier: Int) extends traits.PowerAcceptor with traits.Computer with
|
|||||||
|
|
||||||
def recomputeMaxComponents() {
|
def recomputeMaxComponents() {
|
||||||
maxComponents = items.foldLeft(0)((sum, stack) => sum + (stack match {
|
maxComponents = items.foldLeft(0)((sum, stack) => sum + (stack match {
|
||||||
case Some(item) => Option(Driver.driverFor(item, host)) match {
|
case Some(item) => Option(Driver.driverFor(item, getClass)) match {
|
||||||
case Some(driver: driver.Processor) => driver.supportedComponents(item)
|
case Some(driver: driver.Processor) => driver.supportedComponents(item)
|
||||||
case _ => 0
|
case _ => 0
|
||||||
}
|
}
|
||||||
@ -42,7 +42,7 @@ class Case(var tier: Int) extends traits.PowerAcceptor with traits.Computer with
|
|||||||
}
|
}
|
||||||
|
|
||||||
override def installedMemory = items.foldLeft(0)((sum, stack) => sum + (stack match {
|
override def installedMemory = items.foldLeft(0)((sum, stack) => sum + (stack match {
|
||||||
case Some(item) => Option(Driver.driverFor(item, host)) match {
|
case Some(item) => Option(Driver.driverFor(item, getClass)) match {
|
||||||
case Some(driver: driver.Memory) => driver.amount(item)
|
case Some(driver: driver.Memory) => driver.amount(item)
|
||||||
case _ => 0
|
case _ => 0
|
||||||
}
|
}
|
||||||
@ -114,7 +114,7 @@ class Case(var tier: Int) extends traits.PowerAcceptor with traits.Computer with
|
|||||||
super.isUseableByPlayer(player) && (!isCreativeCase || player.capabilities.isCreativeMode)
|
super.isUseableByPlayer(player) && (!isCreativeCase || player.capabilities.isCreativeMode)
|
||||||
|
|
||||||
override def isItemValidForSlot(slot: Int, stack: ItemStack) =
|
override def isItemValidForSlot(slot: Int, stack: ItemStack) =
|
||||||
Option(Driver.driverFor(stack, host)).fold(false)(driver => {
|
Option(Driver.driverFor(stack, getClass)).fold(false)(driver => {
|
||||||
val provided = InventorySlots.computer(tier)(slot)
|
val provided = InventorySlots.computer(tier)(slot)
|
||||||
driver.slot(stack) == provided.slot && driver.tier(stack) <= provided.tier
|
driver.slot(stack) == provided.slot && driver.tier(stack) <= provided.tier
|
||||||
})
|
})
|
||||||
|
@ -140,7 +140,7 @@ class Charger extends traits.Environment with traits.PowerAcceptor with traits.R
|
|||||||
|
|
||||||
override def getSizeInventory = 1
|
override def getSizeInventory = 1
|
||||||
|
|
||||||
override def isItemValidForSlot(slot: Int, stack: ItemStack) = (slot, Option(Driver.driverFor(stack, host))) match {
|
override def isItemValidForSlot(slot: Int, stack: ItemStack) = (slot, Option(Driver.driverFor(stack, getClass))) match {
|
||||||
case (0, Some(driver)) => driver.slot(stack) == Slot.Tablet
|
case (0, Some(driver)) => driver.slot(stack) == Slot.Tablet
|
||||||
case _ => false
|
case _ => false
|
||||||
}
|
}
|
||||||
|
@ -29,7 +29,7 @@ class DiskDrive extends traits.Environment with traits.ComponentInventory with t
|
|||||||
|
|
||||||
override def getSizeInventory = 1
|
override def getSizeInventory = 1
|
||||||
|
|
||||||
override def isItemValidForSlot(slot: Int, stack: ItemStack) = (slot, Option(Driver.driverFor(stack, host))) match {
|
override def isItemValidForSlot(slot: Int, stack: ItemStack) = (slot, Option(Driver.driverFor(stack, getClass))) match {
|
||||||
case (0, Some(driver)) => driver.slot(stack) == Slot.Floppy
|
case (0, Some(driver)) => driver.slot(stack) == Slot.Floppy
|
||||||
case _ => false
|
case _ => false
|
||||||
}
|
}
|
||||||
|
@ -13,7 +13,7 @@ class Keyboard extends traits.Environment with traits.Rotatable with traits.Immi
|
|||||||
|
|
||||||
val keyboard = {
|
val keyboard = {
|
||||||
val keyboardItem = api.Items.get("keyboard").createItemStack(1)
|
val keyboardItem = api.Items.get("keyboard").createItemStack(1)
|
||||||
api.Driver.driverFor(keyboardItem, this).createEnvironment(keyboardItem, this)
|
api.Driver.driverFor(keyboardItem, getClass).createEnvironment(keyboardItem, this)
|
||||||
}
|
}
|
||||||
|
|
||||||
override def node = keyboard.node
|
override def node = keyboard.node
|
||||||
|
@ -72,7 +72,7 @@ class Robot extends traits.Computer with traits.PowerInformation with tileentity
|
|||||||
components(slot) match {
|
components(slot) match {
|
||||||
case Some(component) =>
|
case Some(component) =>
|
||||||
// We're guaranteed to have a driver for entries.
|
// We're guaranteed to have a driver for entries.
|
||||||
save(component, Driver.driverFor(stack, host), stack)
|
save(component, Driver.driverFor(stack, getClass), stack)
|
||||||
case _ =>
|
case _ =>
|
||||||
}
|
}
|
||||||
ServerPacketSender.sendRobotInventory(this, slot, stack)
|
ServerPacketSender.sendRobotInventory(this, slot, stack)
|
||||||
@ -493,7 +493,7 @@ class Robot extends traits.Computer with traits.PowerInformation with tileentity
|
|||||||
|
|
||||||
def containerSlotType(slot: Int) = if (containerSlots contains slot) {
|
def containerSlotType(slot: Int) = if (containerSlots contains slot) {
|
||||||
val stack = info.containers(slot - 1)
|
val stack = info.containers(slot - 1)
|
||||||
Option(Driver.driverFor(stack, host)) match {
|
Option(Driver.driverFor(stack, getClass)) match {
|
||||||
case Some(driver: api.driver.Container) => driver.providedSlot(stack)
|
case Some(driver: api.driver.Container) => driver.providedSlot(stack)
|
||||||
case _ => Slot.None
|
case _ => Slot.None
|
||||||
}
|
}
|
||||||
@ -502,7 +502,7 @@ class Robot extends traits.Computer with traits.PowerInformation with tileentity
|
|||||||
|
|
||||||
def containerSlotTier(slot: Int) = if (containerSlots contains slot) {
|
def containerSlotTier(slot: Int) = if (containerSlots contains slot) {
|
||||||
val stack = info.containers(slot - 1)
|
val stack = info.containers(slot - 1)
|
||||||
Option(Driver.driverFor(stack, host)) match {
|
Option(Driver.driverFor(stack, getClass)) match {
|
||||||
case Some(driver: api.driver.Container) => driver.providedTier(stack)
|
case Some(driver: api.driver.Container) => driver.providedTier(stack)
|
||||||
case _ => Tier.None
|
case _ => Tier.None
|
||||||
}
|
}
|
||||||
@ -516,7 +516,7 @@ class Robot extends traits.Computer with traits.PowerInformation with tileentity
|
|||||||
def isInventorySlot(slot: Int) = inventorySlots contains slot
|
def isInventorySlot(slot: Int) = inventorySlots contains slot
|
||||||
|
|
||||||
def isFloppySlot(slot: Int) = isComponentSlot(slot) && (Option(getStackInSlot(slot)) match {
|
def isFloppySlot(slot: Int) = isComponentSlot(slot) && (Option(getStackInSlot(slot)) match {
|
||||||
case Some(stack) => Option(Driver.driverFor(stack, host)) match {
|
case Some(stack) => Option(Driver.driverFor(stack, getClass)) match {
|
||||||
case Some(driver) => driver.slot(stack) == Slot.Floppy
|
case Some(driver) => driver.slot(stack) == Slot.Floppy
|
||||||
case _ => false
|
case _ => false
|
||||||
}
|
}
|
||||||
@ -528,7 +528,7 @@ class Robot extends traits.Computer with traits.PowerInformation with tileentity
|
|||||||
// ----------------------------------------------------------------------- //
|
// ----------------------------------------------------------------------- //
|
||||||
|
|
||||||
override def installedMemory = (containerSlots ++ componentSlots).foldLeft(0)((acc, slot) => acc + (Option(getStackInSlot(slot)) match {
|
override def installedMemory = (containerSlots ++ componentSlots).foldLeft(0)((acc, slot) => acc + (Option(getStackInSlot(slot)) match {
|
||||||
case Some(stack) => Option(Driver.driverFor(stack, host)) match {
|
case Some(stack) => Option(Driver.driverFor(stack, getClass)) match {
|
||||||
case Some(driver: api.driver.Memory) => driver.amount(stack)
|
case Some(driver: api.driver.Memory) => driver.amount(stack)
|
||||||
case _ => 0
|
case _ => 0
|
||||||
}
|
}
|
||||||
@ -537,10 +537,10 @@ class Robot extends traits.Computer with traits.PowerInformation with tileentity
|
|||||||
|
|
||||||
override def componentSlot(address: String) = components.indexWhere(_.exists(env => env.node != null && env.node.address == address))
|
override def componentSlot(address: String) = components.indexWhere(_.exists(env => env.node != null && env.node.address == address))
|
||||||
|
|
||||||
override def hasRedstoneCard = (containerSlots ++ componentSlots).exists(slot => Option(getStackInSlot(slot)).fold(false)(driver.item.RedstoneCard.worksWith(_, host)))
|
override def hasRedstoneCard = (containerSlots ++ componentSlots).exists(slot => Option(getStackInSlot(slot)).fold(false)(driver.item.RedstoneCard.worksWith(_, getClass)))
|
||||||
|
|
||||||
private def computeInventorySize() = math.min(maxInventorySize, (containerSlots ++ componentSlots).foldLeft(0)((acc, slot) => acc + (Option(getStackInSlot(slot)) match {
|
private def computeInventorySize() = math.min(maxInventorySize, (containerSlots ++ componentSlots).foldLeft(0)((acc, slot) => acc + (Option(getStackInSlot(slot)) match {
|
||||||
case Some(stack) => Option(Driver.driverFor(stack, host)) match {
|
case Some(stack) => Option(Driver.driverFor(stack, getClass)) match {
|
||||||
case Some(driver: api.driver.Inventory) => driver.inventoryCapacity(stack)
|
case Some(driver: api.driver.Inventory) => driver.inventoryCapacity(stack)
|
||||||
case _ => 0
|
case _ => 0
|
||||||
}
|
}
|
||||||
@ -607,7 +607,7 @@ class Robot extends traits.Computer with traits.PowerInformation with tileentity
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override def isItemValidForSlot(slot: Int, stack: ItemStack) = (slot, Option(Driver.driverFor(stack, host))) match {
|
override def isItemValidForSlot(slot: Int, stack: ItemStack) = (slot, Option(Driver.driverFor(stack, getClass))) match {
|
||||||
case (0, _) => true // Allow anything in the tool slot.
|
case (0, _) => true // Allow anything in the tool slot.
|
||||||
case (i, Some(driver)) if isContainerSlot(i) =>
|
case (i, Some(driver)) if isContainerSlot(i) =>
|
||||||
// Yay special cases! Dynamic screens kind of work, but are pretty derpy
|
// Yay special cases! Dynamic screens kind of work, but are pretty derpy
|
||||||
|
@ -93,7 +93,7 @@ class ServerRack extends traits.PowerAcceptor with traits.Hub with traits.PowerB
|
|||||||
|
|
||||||
def hasAbstractBusCard = servers exists {
|
def hasAbstractBusCard = servers exists {
|
||||||
case Some(server) => server.machine.isRunning && server.inventory.items.exists {
|
case Some(server) => server.machine.isRunning && server.inventory.items.exists {
|
||||||
case Some(stack) => driver.item.AbstractBusCard.worksWith(stack, server.inventory.host)
|
case Some(stack) => driver.item.AbstractBusCard.worksWith(stack, getClass)
|
||||||
case _ => false
|
case _ => false
|
||||||
}
|
}
|
||||||
case _ => false
|
case _ => false
|
||||||
@ -101,7 +101,7 @@ class ServerRack extends traits.PowerAcceptor with traits.Hub with traits.PowerB
|
|||||||
|
|
||||||
def hasRedstoneCard = servers exists {
|
def hasRedstoneCard = servers exists {
|
||||||
case Some(server) => server.machine.isRunning && server.inventory.items.exists {
|
case Some(server) => server.machine.isRunning && server.inventory.items.exists {
|
||||||
case Some(stack) => driver.item.RedstoneCard.worksWith(stack, server.inventory.host)
|
case Some(stack) => driver.item.RedstoneCard.worksWith(stack, getClass)
|
||||||
case _ => false
|
case _ => false
|
||||||
}
|
}
|
||||||
case _ => false
|
case _ => false
|
||||||
|
@ -134,7 +134,7 @@ class Switch extends traits.Hub with traits.NotAnalyzable with IPeripheral with
|
|||||||
}
|
}
|
||||||
|
|
||||||
private def updateLimits(slot: Int, stack: ItemStack) {
|
private def updateLimits(slot: Int, stack: ItemStack) {
|
||||||
Driver.driverFor(stack, host) match {
|
Driver.driverFor(stack, getClass) match {
|
||||||
case driver if driver.slot(stack) == Slot.CPU =>
|
case driver if driver.slot(stack) == Slot.CPU =>
|
||||||
relayDelay = math.max(1, relayBaseDelay - ((driver.tier(stack) + 1) * relayDelayPerUpgrade))
|
relayDelay = math.max(1, relayBaseDelay - ((driver.tier(stack) + 1) * relayDelayPerUpgrade))
|
||||||
case driver if driver.slot(stack) == Slot.Memory =>
|
case driver if driver.slot(stack) == Slot.Memory =>
|
||||||
@ -149,7 +149,7 @@ class Switch extends traits.Hub with traits.NotAnalyzable with IPeripheral with
|
|||||||
|
|
||||||
override protected def onItemRemoved(slot: Int, stack: ItemStack) {
|
override protected def onItemRemoved(slot: Int, stack: ItemStack) {
|
||||||
super.onItemRemoved(slot, stack)
|
super.onItemRemoved(slot, stack)
|
||||||
Driver.driverFor(stack, host) match {
|
Driver.driverFor(stack, getClass) match {
|
||||||
case driver if driver.slot(stack) == Slot.CPU => relayDelay = relayBaseDelay
|
case driver if driver.slot(stack) == Slot.CPU => relayDelay = relayBaseDelay
|
||||||
case driver if driver.slot(stack) == Slot.Memory => relayAmount = relayBaseAmount
|
case driver if driver.slot(stack) == Slot.Memory => relayAmount = relayBaseAmount
|
||||||
case driver if driver.slot(stack) == Slot.HDD => maxQueueSize = queueBaseSize
|
case driver if driver.slot(stack) == Slot.HDD => maxQueueSize = queueBaseSize
|
||||||
@ -159,7 +159,7 @@ class Switch extends traits.Hub with traits.NotAnalyzable with IPeripheral with
|
|||||||
override def getSizeInventory = InventorySlots.switch.length
|
override def getSizeInventory = InventorySlots.switch.length
|
||||||
|
|
||||||
override def isItemValidForSlot(slot: Int, stack: ItemStack) =
|
override def isItemValidForSlot(slot: Int, stack: ItemStack) =
|
||||||
Option(Driver.driverFor(stack, host)).fold(false)(driver => {
|
Option(Driver.driverFor(stack, getClass)).fold(false)(driver => {
|
||||||
val provided = InventorySlots.switch(slot)
|
val provided = InventorySlots.switch(slot)
|
||||||
driver.slot(stack) == provided.slot && driver.tier(stack) <= provided.tier
|
driver.slot(stack) == provided.slot && driver.tier(stack) <= provided.tier
|
||||||
})
|
})
|
||||||
|
@ -64,7 +64,7 @@ trait Computer extends Environment with ComponentInventory with Rotatable with B
|
|||||||
|
|
||||||
override def cpuArchitecture: Class[_ <: Architecture] = {
|
override def cpuArchitecture: Class[_ <: Architecture] = {
|
||||||
for (i <- 0 until getSizeInventory if isComponentSlot(i)) Option(getStackInSlot(i)) match {
|
for (i <- 0 until getSizeInventory if isComponentSlot(i)) Option(getStackInSlot(i)) match {
|
||||||
case Some(s) => Option(Driver.driverFor(s, host)) match {
|
case Some(s) => Option(Driver.driverFor(s, getClass)) match {
|
||||||
case Some(driver: Processor) if driver.slot(s) == Slot.CPU => return driver.architecture(s)
|
case Some(driver: Processor) if driver.slot(s) == Slot.CPU => return driver.architecture(s)
|
||||||
case _ =>
|
case _ =>
|
||||||
}
|
}
|
||||||
@ -84,12 +84,12 @@ trait Computer extends Environment with ComponentInventory with Rotatable with B
|
|||||||
override def onMachineDisconnect(node: Node) = this.onDisconnect(node)
|
override def onMachineDisconnect(node: Node) = this.onDisconnect(node)
|
||||||
|
|
||||||
def hasAbstractBusCard = items.exists {
|
def hasAbstractBusCard = items.exists {
|
||||||
case Some(item) => machine.isRunning && driver.item.AbstractBusCard.worksWith(item, host)
|
case Some(item) => machine.isRunning && driver.item.AbstractBusCard.worksWith(item, getClass)
|
||||||
case _ => false
|
case _ => false
|
||||||
}
|
}
|
||||||
|
|
||||||
def hasRedstoneCard = items.exists {
|
def hasRedstoneCard = items.exists {
|
||||||
case Some(item) => machine.isRunning && driver.item.RedstoneCard.worksWith(item, host)
|
case Some(item) => machine.isRunning && driver.item.RedstoneCard.worksWith(item, getClass)
|
||||||
case _ => false
|
case _ => false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -7,7 +7,7 @@ import net.minecraft.nbt.NBTTagCompound
|
|||||||
trait TextBuffer extends Environment {
|
trait TextBuffer extends Environment {
|
||||||
lazy val buffer = {
|
lazy val buffer = {
|
||||||
val screenItem = api.Items.get("screen1").createItemStack(1)
|
val screenItem = api.Items.get("screen1").createItemStack(1)
|
||||||
val buffer = api.Driver.driverFor(screenItem, this).createEnvironment(screenItem, this).asInstanceOf[api.component.TextBuffer]
|
val buffer = api.Driver.driverFor(screenItem, getClass).createEnvironment(screenItem, this).asInstanceOf[api.component.TextBuffer]
|
||||||
val (maxWidth, maxHeight) = Settings.screenResolutionsByTier(tier)
|
val (maxWidth, maxHeight) = Settings.screenResolutionsByTier(tier)
|
||||||
buffer.setMaximumResolution(maxWidth, maxHeight)
|
buffer.setMaximumResolution(maxWidth, maxHeight)
|
||||||
buffer.setMaximumColorDepth(Settings.screenDepthsByTier(tier))
|
buffer.setMaximumColorDepth(Settings.screenDepthsByTier(tier))
|
||||||
|
@ -25,7 +25,7 @@ class Server(val rack: tileentity.ServerRack, val number: Int) extends MachineHo
|
|||||||
|
|
||||||
override def cpuArchitecture: Class[_ <: Architecture] = {
|
override def cpuArchitecture: Class[_ <: Architecture] = {
|
||||||
for (i <- 0 until inventory.getSizeInventory if inventory.isComponentSlot(i)) Option(inventory.getStackInSlot(i)) match {
|
for (i <- 0 until inventory.getSizeInventory if inventory.isComponentSlot(i)) Option(inventory.getStackInSlot(i)) match {
|
||||||
case Some(s) => Option(Driver.driverFor(s, inventory.host)) match {
|
case Some(s) => Option(Driver.driverFor(s, rack.getClass)) match {
|
||||||
case Some(driver: Processor) if driver.slot(s) == Slot.CPU => return driver.architecture(s)
|
case Some(driver: Processor) if driver.slot(s) == Slot.CPU => return driver.architecture(s)
|
||||||
case _ =>
|
case _ =>
|
||||||
}
|
}
|
||||||
@ -35,7 +35,7 @@ class Server(val rack: tileentity.ServerRack, val number: Int) extends MachineHo
|
|||||||
}
|
}
|
||||||
|
|
||||||
override def installedMemory = inventory.items.foldLeft(0)((sum, stack) => sum + (stack match {
|
override def installedMemory = inventory.items.foldLeft(0)((sum, stack) => sum + (stack match {
|
||||||
case Some(item) => Option(Driver.driverFor(item, inventory.host)) match {
|
case Some(item) => Option(Driver.driverFor(item, rack.getClass)) match {
|
||||||
case Some(driver: driver.Memory) => driver.amount(item)
|
case Some(driver: driver.Memory) => driver.amount(item)
|
||||||
case _ => 0
|
case _ => 0
|
||||||
}
|
}
|
||||||
@ -44,7 +44,7 @@ class Server(val rack: tileentity.ServerRack, val number: Int) extends MachineHo
|
|||||||
|
|
||||||
lazy val maxComponents = if (!hasCPU) 0
|
lazy val maxComponents = if (!hasCPU) 0
|
||||||
else inventory.items.foldLeft(0)((sum, stack) => sum + (stack match {
|
else inventory.items.foldLeft(0)((sum, stack) => sum + (stack match {
|
||||||
case Some(item) => Option(Driver.driverFor(item, inventory.host)) match {
|
case Some(item) => Option(Driver.driverFor(item, rack.getClass)) match {
|
||||||
case Some(driver: driver.Processor) => driver.supportedComponents(item)
|
case Some(driver: driver.Processor) => driver.supportedComponents(item)
|
||||||
case _ => 0
|
case _ => 0
|
||||||
}
|
}
|
||||||
@ -54,7 +54,7 @@ class Server(val rack: tileentity.ServerRack, val number: Int) extends MachineHo
|
|||||||
override def componentSlot(address: String) = inventory.components.indexWhere(_.exists(env => env.node != null && env.node.address == address))
|
override def componentSlot(address: String) = inventory.components.indexWhere(_.exists(env => env.node != null && env.node.address == address))
|
||||||
|
|
||||||
def hasCPU = inventory.items.exists {
|
def hasCPU = inventory.items.exists {
|
||||||
case Some(stack) => Option(Driver.driverFor(stack, inventory.host)) match {
|
case Some(stack) => Option(Driver.driverFor(stack, rack.getClass)) match {
|
||||||
case Some(driver) => driver.slot(stack) == Slot.CPU
|
case Some(driver) => driver.slot(stack) == Slot.CPU
|
||||||
case _ => false
|
case _ => false
|
||||||
}
|
}
|
||||||
|
@ -57,7 +57,7 @@ private[oc] object Registry extends api.detail.DriverAPI {
|
|||||||
case _ => null
|
case _ => null
|
||||||
}
|
}
|
||||||
|
|
||||||
def driverFor(stack: ItemStack, host: EnvironmentHost) =
|
def driverFor(stack: ItemStack, host: Class[_ <: EnvironmentHost]) =
|
||||||
if (stack != null) items.find(_.worksWith(stack, host)).orNull
|
if (stack != null) items.find(_.worksWith(stack, host)).orNull
|
||||||
else null
|
else null
|
||||||
|
|
||||||
|
@ -12,7 +12,7 @@ object AbstractBusCard extends Item {
|
|||||||
override def worksWith(stack: ItemStack) =
|
override def worksWith(stack: ItemStack) =
|
||||||
isOneOf(stack, api.Items.get("abstractBusCard"))
|
isOneOf(stack, api.Items.get("abstractBusCard"))
|
||||||
|
|
||||||
override def worksWith(stack: ItemStack, host: EnvironmentHost) =
|
override def worksWith(stack: ItemStack, host: Class[_ <: EnvironmentHost]) =
|
||||||
super.worksWith(stack, host) && isComputer(host)
|
super.worksWith(stack, host) && isComputer(host)
|
||||||
|
|
||||||
override def createEnvironment(stack: ItemStack, host: EnvironmentHost) = if (Mods.StargateTech2.isAvailable) host match {
|
override def createEnvironment(stack: ItemStack, host: EnvironmentHost) = if (Mods.StargateTech2.isAvailable) host match {
|
||||||
|
@ -12,15 +12,17 @@ trait Item extends driver.Item {
|
|||||||
|
|
||||||
override def dataTag(stack: ItemStack) = Item.dataTag(stack)
|
override def dataTag(stack: ItemStack) = Item.dataTag(stack)
|
||||||
|
|
||||||
override def worksWith(stack: ItemStack, host: EnvironmentHost) = worksWith(stack)
|
override def worksWith(stack: ItemStack, host: Class[_ <: EnvironmentHost]) = worksWith(stack)
|
||||||
|
|
||||||
protected def isOneOf(stack: ItemStack, items: api.detail.ItemInfo*) = items.filter(_ != null).contains(api.Items.get(stack))
|
protected def isOneOf(stack: ItemStack, items: api.detail.ItemInfo*) = items.filter(_ != null).contains(api.Items.get(stack))
|
||||||
|
|
||||||
protected def isComputer(host: EnvironmentHost) = host.isInstanceOf[tileentity.traits.Computer] || host.isInstanceOf[tileentity.ServerRack]
|
protected def isRotatable(host: Class[_ <: EnvironmentHost]) = classOf[api.tileentity.Rotatable].isAssignableFrom(host)
|
||||||
|
|
||||||
protected def isRobot(host: EnvironmentHost) = host.isInstanceOf[api.tileentity.Robot]
|
protected def isComputer(host: Class[_ <: EnvironmentHost]) = host.isInstanceOf[tileentity.traits.Computer] || host.isInstanceOf[tileentity.ServerRack]
|
||||||
|
|
||||||
protected def isTablet(host: EnvironmentHost) = host.isInstanceOf[item.TabletWrapper]
|
protected def isRobot(host: Class[_ <: EnvironmentHost]) = host.isInstanceOf[api.tileentity.Robot]
|
||||||
|
|
||||||
|
protected def isTablet(host: Class[_ <: EnvironmentHost]) = host.isInstanceOf[item.TabletWrapper]
|
||||||
}
|
}
|
||||||
|
|
||||||
object Item {
|
object Item {
|
||||||
|
@ -10,7 +10,7 @@ object NetworkCard extends Item {
|
|||||||
override def worksWith(stack: ItemStack) =
|
override def worksWith(stack: ItemStack) =
|
||||||
isOneOf(stack, api.Items.get("lanCard"))
|
isOneOf(stack, api.Items.get("lanCard"))
|
||||||
|
|
||||||
override def worksWith(stack: ItemStack, host: EnvironmentHost) =
|
override def worksWith(stack: ItemStack, host: Class[_ <: EnvironmentHost]) =
|
||||||
super.worksWith(stack, host) && !isTablet(host)
|
super.worksWith(stack, host) && !isTablet(host)
|
||||||
|
|
||||||
override def createEnvironment(stack: ItemStack, host: EnvironmentHost) = new component.NetworkCard()
|
override def createEnvironment(stack: ItemStack, host: EnvironmentHost) = new component.NetworkCard()
|
||||||
|
@ -11,7 +11,7 @@ import net.minecraft.item.ItemStack
|
|||||||
object RedstoneCard extends Item {
|
object RedstoneCard extends Item {
|
||||||
override def worksWith(stack: ItemStack) = isOneOf(stack, api.Items.get("redstoneCard1"), api.Items.get("redstoneCard2"))
|
override def worksWith(stack: ItemStack) = isOneOf(stack, api.Items.get("redstoneCard1"), api.Items.get("redstoneCard2"))
|
||||||
|
|
||||||
override def worksWith(stack: ItemStack, host: EnvironmentHost) =
|
override def worksWith(stack: ItemStack, host: Class[_ <: EnvironmentHost]) =
|
||||||
super.worksWith(stack, host) && isComputer(host)
|
super.worksWith(stack, host) && isComputer(host)
|
||||||
|
|
||||||
override def createEnvironment(stack: ItemStack, host: EnvironmentHost) =
|
override def createEnvironment(stack: ItemStack, host: EnvironmentHost) =
|
||||||
|
@ -9,7 +9,7 @@ object Screen extends Item {
|
|||||||
override def worksWith(stack: ItemStack) =
|
override def worksWith(stack: ItemStack) =
|
||||||
isOneOf(stack, api.Items.get("screen1"))
|
isOneOf(stack, api.Items.get("screen1"))
|
||||||
|
|
||||||
override def worksWith(stack: ItemStack, host: EnvironmentHost) =
|
override def worksWith(stack: ItemStack, host: Class[_ <: EnvironmentHost]) =
|
||||||
super.worksWith(stack, host) && !isTablet(host)
|
super.worksWith(stack, host) && !isTablet(host)
|
||||||
|
|
||||||
override def createEnvironment(stack: ItemStack, host: EnvironmentHost) = host match {
|
override def createEnvironment(stack: ItemStack, host: EnvironmentHost) = host match {
|
||||||
|
@ -12,13 +12,13 @@ object Tablet extends Item {
|
|||||||
override def worksWith(stack: ItemStack) =
|
override def worksWith(stack: ItemStack) =
|
||||||
isOneOf(stack, api.Items.get("tablet"))
|
isOneOf(stack, api.Items.get("tablet"))
|
||||||
|
|
||||||
override def worksWith(stack: ItemStack, host: EnvironmentHost) =
|
override def worksWith(stack: ItemStack, host: Class[_ <: EnvironmentHost]) =
|
||||||
super.worksWith(stack, host) && isTablet(host)
|
super.worksWith(stack, host) && isTablet(host)
|
||||||
|
|
||||||
override def createEnvironment(stack: ItemStack, host: EnvironmentHost) = {
|
override def createEnvironment(stack: ItemStack, host: EnvironmentHost) = {
|
||||||
val data = new ItemUtils.TabletData(stack)
|
val data = new ItemUtils.TabletData(stack)
|
||||||
data.items.collect {
|
data.items.collect {
|
||||||
case Some(fs) if FileSystem.worksWith(fs, host) => fs
|
case Some(fs) if FileSystem.worksWith(fs, host.getClass) => fs
|
||||||
}.headOption.map(FileSystem.createEnvironment(_, host)).orNull
|
}.headOption.map(FileSystem.createEnvironment(_, host)).orNull
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -10,7 +10,7 @@ object UpgradeAngel extends Item {
|
|||||||
override def worksWith(stack: ItemStack) =
|
override def worksWith(stack: ItemStack) =
|
||||||
isOneOf(stack, api.Items.get("angelUpgrade"))
|
isOneOf(stack, api.Items.get("angelUpgrade"))
|
||||||
|
|
||||||
override def worksWith(stack: ItemStack, host: EnvironmentHost) =
|
override def worksWith(stack: ItemStack, host: Class[_ <: EnvironmentHost]) =
|
||||||
super.worksWith(stack, host) && isRobot(host)
|
super.worksWith(stack, host) && isRobot(host)
|
||||||
|
|
||||||
override def createEnvironment(stack: ItemStack, host: EnvironmentHost) = new component.UpgradeAngel()
|
override def createEnvironment(stack: ItemStack, host: EnvironmentHost) = new component.UpgradeAngel()
|
||||||
|
@ -10,7 +10,7 @@ object UpgradeChunkloader extends Item {
|
|||||||
override def worksWith(stack: ItemStack) =
|
override def worksWith(stack: ItemStack) =
|
||||||
isOneOf(stack, api.Items.get("chunkloaderUpgrade"))
|
isOneOf(stack, api.Items.get("chunkloaderUpgrade"))
|
||||||
|
|
||||||
override def worksWith(stack: ItemStack, host: EnvironmentHost) =
|
override def worksWith(stack: ItemStack, host: Class[_ <: EnvironmentHost]) =
|
||||||
super.worksWith(stack, host) && isRobot(host)
|
super.worksWith(stack, host) && isRobot(host)
|
||||||
|
|
||||||
override def createEnvironment(stack: ItemStack, host: EnvironmentHost) = new component.UpgradeChunkloader(host)
|
override def createEnvironment(stack: ItemStack, host: EnvironmentHost) = new component.UpgradeChunkloader(host)
|
||||||
|
@ -11,7 +11,7 @@ object UpgradeCrafting extends Item {
|
|||||||
override def worksWith(stack: ItemStack) =
|
override def worksWith(stack: ItemStack) =
|
||||||
isOneOf(stack, api.Items.get("craftingUpgrade"))
|
isOneOf(stack, api.Items.get("craftingUpgrade"))
|
||||||
|
|
||||||
override def worksWith(stack: ItemStack, host: EnvironmentHost) =
|
override def worksWith(stack: ItemStack, host: Class[_ <: EnvironmentHost]) =
|
||||||
super.worksWith(stack, host) && isRobot(host)
|
super.worksWith(stack, host) && isRobot(host)
|
||||||
|
|
||||||
override def createEnvironment(stack: ItemStack, host: EnvironmentHost) =
|
override def createEnvironment(stack: ItemStack, host: EnvironmentHost) =
|
||||||
|
@ -10,7 +10,7 @@ object UpgradeExperience extends Item {
|
|||||||
override def worksWith(stack: ItemStack) =
|
override def worksWith(stack: ItemStack) =
|
||||||
isOneOf(stack, api.Items.get("experienceUpgrade"))
|
isOneOf(stack, api.Items.get("experienceUpgrade"))
|
||||||
|
|
||||||
override def worksWith(stack: ItemStack, host: EnvironmentHost) =
|
override def worksWith(stack: ItemStack, host: Class[_ <: EnvironmentHost]) =
|
||||||
super.worksWith(stack, host) && isRobot(host)
|
super.worksWith(stack, host) && isRobot(host)
|
||||||
|
|
||||||
override def createEnvironment(stack: ItemStack, host: EnvironmentHost) = new component.UpgradeExperience()
|
override def createEnvironment(stack: ItemStack, host: EnvironmentHost) = new component.UpgradeExperience()
|
||||||
|
@ -11,7 +11,7 @@ object UpgradeGenerator extends Item {
|
|||||||
override def worksWith(stack: ItemStack) =
|
override def worksWith(stack: ItemStack) =
|
||||||
isOneOf(stack, api.Items.get("generatorUpgrade"))
|
isOneOf(stack, api.Items.get("generatorUpgrade"))
|
||||||
|
|
||||||
override def worksWith(stack: ItemStack, host: EnvironmentHost) =
|
override def worksWith(stack: ItemStack, host: Class[_ <: EnvironmentHost]) =
|
||||||
super.worksWith(stack, host) && isRobot(host)
|
super.worksWith(stack, host) && isRobot(host)
|
||||||
|
|
||||||
override def createEnvironment(stack: ItemStack, host: EnvironmentHost) =
|
override def createEnvironment(stack: ItemStack, host: EnvironmentHost) =
|
||||||
|
@ -9,7 +9,7 @@ object UpgradeInventory extends Item with Inventory {
|
|||||||
override def worksWith(stack: ItemStack) =
|
override def worksWith(stack: ItemStack) =
|
||||||
isOneOf(stack, api.Items.get("inventoryUpgrade"))
|
isOneOf(stack, api.Items.get("inventoryUpgrade"))
|
||||||
|
|
||||||
override def worksWith(stack: ItemStack, host: EnvironmentHost) =
|
override def worksWith(stack: ItemStack, host: Class[_ <: EnvironmentHost]) =
|
||||||
super.worksWith(stack, host) && isRobot(host)
|
super.worksWith(stack, host) && isRobot(host)
|
||||||
|
|
||||||
override def createEnvironment(stack: ItemStack, host: EnvironmentHost) = null
|
override def createEnvironment(stack: ItemStack, host: EnvironmentHost) = null
|
||||||
|
@ -11,7 +11,7 @@ object UpgradeInventoryController extends Item {
|
|||||||
override def worksWith(stack: ItemStack) =
|
override def worksWith(stack: ItemStack) =
|
||||||
isOneOf(stack, api.Items.get("inventoryControllerUpgrade"))
|
isOneOf(stack, api.Items.get("inventoryControllerUpgrade"))
|
||||||
|
|
||||||
override def worksWith(stack: ItemStack, host: EnvironmentHost) =
|
override def worksWith(stack: ItemStack, host: Class[_ <: EnvironmentHost]) =
|
||||||
super.worksWith(stack, host) && isRobot(host)
|
super.worksWith(stack, host) && isRobot(host)
|
||||||
|
|
||||||
override def createEnvironment(stack: ItemStack, host: EnvironmentHost) = host match {
|
override def createEnvironment(stack: ItemStack, host: EnvironmentHost) = host match {
|
||||||
|
@ -11,8 +11,8 @@ object UpgradeNavigation extends Item {
|
|||||||
override def worksWith(stack: ItemStack) =
|
override def worksWith(stack: ItemStack) =
|
||||||
isOneOf(stack, api.Items.get("navigationUpgrade"))
|
isOneOf(stack, api.Items.get("navigationUpgrade"))
|
||||||
|
|
||||||
override def worksWith(stack: ItemStack, host: EnvironmentHost) =
|
override def worksWith(stack: ItemStack, host: Class[_ <: EnvironmentHost]) =
|
||||||
super.worksWith(stack, host) && host.isInstanceOf[Rotatable]
|
super.worksWith(stack, host) && isRotatable(host)
|
||||||
|
|
||||||
override def createEnvironment(stack: ItemStack, host: EnvironmentHost) =
|
override def createEnvironment(stack: ItemStack, host: EnvironmentHost) =
|
||||||
host match {
|
host match {
|
||||||
|
@ -11,8 +11,8 @@ object UpgradePiston extends Item {
|
|||||||
override def worksWith(stack: ItemStack) =
|
override def worksWith(stack: ItemStack) =
|
||||||
isOneOf(stack, api.Items.get("pistonUpgrade"))
|
isOneOf(stack, api.Items.get("pistonUpgrade"))
|
||||||
|
|
||||||
override def worksWith(stack: ItemStack, host: EnvironmentHost) =
|
override def worksWith(stack: ItemStack, host: Class[_ <: EnvironmentHost]) =
|
||||||
super.worksWith(stack, host) && host.isInstanceOf[Rotatable]
|
super.worksWith(stack, host) && isRotatable(host)
|
||||||
|
|
||||||
override def createEnvironment(stack: ItemStack, host: EnvironmentHost) = host match {
|
override def createEnvironment(stack: ItemStack, host: EnvironmentHost) = host match {
|
||||||
case rotatable: Rotatable with EnvironmentHost => new component.UpgradePiston(rotatable)
|
case rotatable: Rotatable with EnvironmentHost => new component.UpgradePiston(rotatable)
|
||||||
|
@ -11,8 +11,8 @@ object UpgradeSign extends Item {
|
|||||||
override def worksWith(stack: ItemStack) =
|
override def worksWith(stack: ItemStack) =
|
||||||
isOneOf(stack, api.Items.get("signUpgrade"))
|
isOneOf(stack, api.Items.get("signUpgrade"))
|
||||||
|
|
||||||
override def worksWith(stack: ItemStack, host: EnvironmentHost) =
|
override def worksWith(stack: ItemStack, host: Class[_ <: EnvironmentHost]) =
|
||||||
super.worksWith(stack, host) && host.isInstanceOf[Rotatable]
|
super.worksWith(stack, host) && isRotatable(host)
|
||||||
|
|
||||||
override def createEnvironment(stack: ItemStack, host: EnvironmentHost) =
|
override def createEnvironment(stack: ItemStack, host: EnvironmentHost) =
|
||||||
host match {
|
host match {
|
||||||
|
@ -12,7 +12,7 @@ object UpgradeTractorBeam extends Item {
|
|||||||
override def worksWith(stack: ItemStack) =
|
override def worksWith(stack: ItemStack) =
|
||||||
isOneOf(stack, api.Items.get("tractorBeamUpgrade"))
|
isOneOf(stack, api.Items.get("tractorBeamUpgrade"))
|
||||||
|
|
||||||
override def worksWith(stack: ItemStack, host: EnvironmentHost) =
|
override def worksWith(stack: ItemStack, host: Class[_ <: EnvironmentHost]) =
|
||||||
super.worksWith(stack, host) && (isRobot(host) || isTablet(host))
|
super.worksWith(stack, host) && (isRobot(host) || isTablet(host))
|
||||||
|
|
||||||
override def createEnvironment(stack: ItemStack, host: EnvironmentHost) = host match {
|
override def createEnvironment(stack: ItemStack, host: EnvironmentHost) = host match {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user