Merge branch 'master-MC1.8' of github.com:MightyPirates/OpenComputers into OC1.5-MC1.8

Conflicts:
	build.properties
This commit is contained in:
Florian Nücke 2015-05-26 15:10:34 +02:00
commit 2abd68845f
23 changed files with 139 additions and 75 deletions

Binary file not shown.

View File

@ -1,7 +1,7 @@
minecraft.version=1.8 minecraft.version=1.8
forge.version=11.14.1.1354 forge.version=11.14.1.1354
oc.version=1.5.11 oc.version=1.5.12
oc.subversion= oc.subversion=
ae2.version=rv2-beta-26 ae2.version=rv2-beta-26

View File

@ -45,6 +45,7 @@ item.oc.ALU.name=Arithmetic Logic Unit (ALU)
item.oc.Analyzer.name=Analyzer item.oc.Analyzer.name=Analyzer
item.oc.APU0.name=Accelerated Processing Unit (APU) (Tier 1) item.oc.APU0.name=Accelerated Processing Unit (APU) (Tier 1)
item.oc.APU1.name=Accelerated Processing Unit (APU) (Tier 2) item.oc.APU1.name=Accelerated Processing Unit (APU) (Tier 2)
item.oc.APU2.name=Accelerated Processing Unit (APU) (Creative)
item.oc.ArrowKeys.name=Arrow Keys item.oc.ArrowKeys.name=Arrow Keys
item.oc.ButtonGroup.name=Button Group item.oc.ButtonGroup.name=Button Group
item.oc.CardBase.name=Card Base item.oc.CardBase.name=Card Base

View File

@ -0,0 +1,6 @@
{
"parent": "opencomputers:item/flat",
"textures": {
"layer0": "opencomputers:items/apuCreative"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 887 B

View File

@ -0,0 +1,18 @@
{
"animation": {
"frametime": 1,
"frames": [
{ "index": 0, "time": 3 },
{ "index": 1, "time": 3 },
{ "index": 2, "time": 3 },
{ "index": 3, "time": 3 },
{ "index": 4, "time": 3 },
{ "index": 5, "time": 3 },
{ "index": 4, "time": 3 },
{ "index": 3, "time": 3 },
{ "index": 2, "time": 3 },
{ "index": 1, "time": 3 },
{ "index": 0, "time": 3 }
]
}
}

View File

@ -49,6 +49,7 @@ object Constants {
final val Alu = "alu" final val Alu = "alu"
final val Analyzer = "analyzer" final val Analyzer = "analyzer"
final val AngelUpgrade = "angelUpgrade" final val AngelUpgrade = "angelUpgrade"
final val APUCreative = "apuCreative"
final val APUTier1 = "apu1" final val APUTier1 = "apu1"
final val APUTier2 = "apu2" final val APUTier2 = "apu2"
final val ArrowKeys = "arrowKeys" final val ArrowKeys = "arrowKeys"

View File

@ -121,13 +121,15 @@ object Cable {
case _ => !world.isAirBlock(tpos) case _ => !world.isAirBlock(tpos)
}) { }) {
val neighborTileEntity = world.getTileEntity(tpos) val neighborTileEntity = world.getTileEntity(tpos)
val neighborHasNode = hasNetworkNode(neighborTileEntity, side.getOpposite) if (neighborTileEntity != null && neighborTileEntity.getWorld != null) {
val canConnectColor = canConnectBasedOnColor(tileEntity, neighborTileEntity) val neighborHasNode = hasNetworkNode(neighborTileEntity, side.getOpposite)
val canConnectFMP = !Mods.ForgeMultipart.isAvailable || val canConnectColor = canConnectBasedOnColor(tileEntity, neighborTileEntity)
(canConnectFromSideFMP(tileEntity, side) && canConnectFromSideFMP(neighborTileEntity, side.getOpposite)) val canConnectFMP = !Mods.ForgeMultipart.isAvailable ||
val canConnectIM = canConnectFromSideIM(tileEntity, side) && canConnectFromSideIM(neighborTileEntity, side.getOpposite) (canConnectFromSideFMP(tileEntity, side) && canConnectFromSideFMP(neighborTileEntity, side.getOpposite))
if (neighborHasNode && canConnectColor && canConnectFMP && canConnectIM) { val canConnectIM = canConnectFromSideIM(tileEntity, side) && canConnectFromSideIM(neighborTileEntity, side.getOpposite)
result |= (1 << side.getIndex) if (neighborHasNode && canConnectColor && canConnectFMP && canConnectIM) {
result |= (1 << side.getIndex)
}
} }
} }
} }

View File

@ -2,9 +2,12 @@ package li.cil.oc.common.block
import java.util.Random import java.util.Random
import li.cil.oc.Constants
import li.cil.oc.api import li.cil.oc.api
import li.cil.oc.common.tileentity import li.cil.oc.common.tileentity
import li.cil.oc.util.BlockPosition
import li.cil.oc.util.ExtendedEnumFacing._ import li.cil.oc.util.ExtendedEnumFacing._
import li.cil.oc.util.InventoryUtils
import net.minecraft.block.Block import net.minecraft.block.Block
import net.minecraft.block.material.Material import net.minecraft.block.material.Material
import net.minecraft.block.state.IBlockState import net.minecraft.block.state.IBlockState
@ -87,10 +90,12 @@ class Keyboard extends SimpleBlock(Material.rock) with traits.OmniRotatable {
override def onNeighborBlockChange(world: World, pos: BlockPos, state: IBlockState, neighborBlock: Block) = override def onNeighborBlockChange(world: World, pos: BlockPos, state: IBlockState, neighborBlock: Block) =
world.getTileEntity(pos) match { world.getTileEntity(pos) match {
case keyboard: tileentity.Keyboard if canPlaceBlockOnSide(world, pos, keyboard.facing) => // Can stay. case keyboard: tileentity.Keyboard =>
if (!canPlaceBlockOnSide(world, pos, keyboard.facing)) {
world.setBlockToAir(pos)
InventoryUtils.spawnStackInWorld(BlockPosition(pos, world), api.Items.get(Constants.BlockName.Keyboard).createItemStack(1))
}
case _ => case _ =>
dropBlockAsItem(world, pos, world.getBlockState(pos), 0)
world.setBlockToAir(pos)
} }
override def localOnBlockActivated(world: World, pos: BlockPos, player: EntityPlayer, side: EnumFacing, hitX: Float, hitY: Float, hitZ: Float) = override def localOnBlockActivated(world: World, pos: BlockPos, player: EntityPlayer, side: EnumFacing, hitX: Float, hitY: Float, hitZ: Float) =

View File

@ -19,7 +19,7 @@ import scala.collection.mutable.ArrayBuffer
class ServerRack extends RedstoneAware with traits.PowerAcceptor with traits.Rotatable with traits.StateAware with traits.GUI { class ServerRack extends RedstoneAware with traits.PowerAcceptor with traits.Rotatable with traits.StateAware with traits.GUI {
@SideOnly(Side.CLIENT) @SideOnly(Side.CLIENT)
override def getMixedBrightnessForBlock(world: IBlockAccess, pos: BlockPos) = { override def getMixedBrightnessForBlock(world: IBlockAccess, pos: BlockPos) = {
world.getTileEntity(pos) match { if (pos.getY >= 0 && pos.getY < 256) world.getTileEntity(pos) match {
case rack: tileentity.ServerRack => case rack: tileentity.ServerRack =>
def brightness(pos: BlockPos) = world.getCombinedLight(pos, getLightValue(world, pos)) def brightness(pos: BlockPos) = world.getCombinedLight(pos, getLightValue(world, pos))
val value = brightness(pos.offset(rack.facing)) val value = brightness(pos.offset(rack.facing))
@ -28,6 +28,7 @@ class ServerRack extends RedstoneAware with traits.PowerAcceptor with traits.Rot
((skyBrightness * 3 / 4) << 20) | ((blockBrightness * 3 / 4) << 4) ((skyBrightness * 3 / 4) << 20) | ((blockBrightness * 3 / 4) << 4)
case _ => super.getMixedBrightnessForBlock(world, pos) case _ => super.getMixedBrightnessForBlock(world, pos)
} }
else super.getMixedBrightnessForBlock(world, pos)
} }
override def isOpaqueCube = false override def isOpaqueCube = false

View File

@ -296,6 +296,8 @@ object Items extends ItemAPI {
Option(get(Constants.ItemName.SignUpgrade).createItemStack(1)), Option(get(Constants.ItemName.SignUpgrade).createItemStack(1)),
Option(get(Constants.ItemName.PistonUpgrade).createItemStack(1)), Option(get(Constants.ItemName.PistonUpgrade).createItemStack(1)),
Option(get(Constants.BlockName.Geolyzer).createItemStack(1)),
Option(get(Constants.ItemName.NavigationUpgrade).createItemStack(1)),
Option(get(Constants.ItemName.GraphicsCardTier2).createItemStack(1)), Option(get(Constants.ItemName.GraphicsCardTier2).createItemStack(1)),
Option(get(Constants.ItemName.RedstoneCardTier2).createItemStack(1)), Option(get(Constants.ItemName.RedstoneCardTier2).createItemStack(1)),
@ -420,6 +422,9 @@ object Items extends ItemAPI {
// 1.5.10 // 1.5.10
Recipes.addSubItem(new item.APU(components, Tier.One), Constants.ItemName.APUTier1, "oc:apu1") Recipes.addSubItem(new item.APU(components, Tier.One), Constants.ItemName.APUTier1, "oc:apu1")
Recipes.addSubItem(new item.APU(components, Tier.Two), Constants.ItemName.APUTier2, "oc:apu2") Recipes.addSubItem(new item.APU(components, Tier.Two), Constants.ItemName.APUTier2, "oc:apu2")
// 1.5.12
registerItem(new item.APU(components, Tier.Three), Constants.ItemName.APUCreative)
} }
// Card components. // Card components.

View File

@ -1,11 +1,20 @@
package li.cil.oc.common.item package li.cil.oc.common.item
import li.cil.oc.common.Tier
import li.cil.oc.util.Rarity
import net.minecraft.item.EnumRarity
import net.minecraft.item.ItemStack
import scala.language.existentials import scala.language.existentials
class APU(val parent: Delegator, val tier: Int) extends traits.Delegate with traits.ItemTier with traits.CPULike with traits.GPULike { class APU(val parent: Delegator, val tier: Int) extends traits.Delegate with traits.ItemTier with traits.CPULike with traits.GPULike {
override val unlocalizedName = super[Delegate].unlocalizedName + tier override val unlocalizedName = super[Delegate].unlocalizedName + tier
override def cpuTier = tier + 1 override def rarity(stack: ItemStack): EnumRarity =
if (tier == Tier.Three) Rarity.byTier(Tier.Four)
else super.rarity(stack)
override def cpuTier = math.min(Tier.Three, tier + 1)
override def gpuTier = tier override def gpuTier = tier

View File

@ -63,7 +63,7 @@ class HoverBoots extends ItemArmor(ItemArmor.ArmorMaterial.DIAMOND, 0, 3) with t
override def getDurabilityForDisplay(stack: ItemStack): Double = { override def getDurabilityForDisplay(stack: ItemStack): Double = {
val data = new HoverBootsData(stack) val data = new HoverBootsData(stack)
data.charge / Settings.get.bufferHoverBoots 1 - data.charge / Settings.get.bufferHoverBoots
} }
override def getMaxDamage(stack: ItemStack): Int = Settings.get.bufferHoverBoots.toInt override def getMaxDamage(stack: ItemStack): Int = Settings.get.bufferHoverBoots.toInt

View File

@ -43,7 +43,7 @@ class Server(val parent: Delegator, val tier: Int) extends traits.Delegate {
val itemName = item.getDisplayName val itemName = item.getDisplayName
items += itemName -> (if (items.contains(itemName)) items(itemName) + 1 else 1) items += itemName -> (if (items.contains(itemName)) items(itemName) + 1 else 1)
} }
if (items.size > 0) { if (items.nonEmpty) {
tooltip.addAll(Tooltip.get("Server.Components")) tooltip.addAll(Tooltip.get("Server.Components"))
for (itemName <- items.keys.toArray.sorted) { for (itemName <- items.keys.toArray.sorted) {
tooltip.add("- " + items(itemName) + "x " + itemName) tooltip.add("- " + items(itemName) + "x " + itemName)

View File

@ -17,7 +17,14 @@ object TabletTemplate extends Template {
override protected val suggestedComponents = Array( override protected val suggestedComponents = Array(
"BIOS" -> hasComponent(Constants.ItemName.EEPROM) _, "BIOS" -> hasComponent(Constants.ItemName.EEPROM) _,
"Keyboard" -> hasComponent(Constants.BlockName.Keyboard) _, "Keyboard" -> hasComponent(Constants.BlockName.Keyboard) _,
"GraphicsCard" -> ((inventory: IInventory) => Array(Constants.ItemName.GraphicsCardTier1, Constants.ItemName.GraphicsCardTier2, Constants.ItemName.GraphicsCardTier3).exists(name => hasComponent(name)(inventory))), "GraphicsCard" -> ((inventory: IInventory) => Array(
Constants.ItemName.APUCreative,
Constants.ItemName.APUTier1,
Constants.ItemName.APUTier2,
Constants.ItemName.GraphicsCardTier1,
Constants.ItemName.GraphicsCardTier2,
Constants.ItemName.GraphicsCardTier3).
exists(name => hasComponent(name)(inventory))),
"OS" -> hasFileSystem _) "OS" -> hasFileSystem _)
override protected def hostClass = classOf[internal.Tablet] override protected def hostClass = classOf[internal.Tablet]

View File

@ -23,7 +23,14 @@ abstract class Template {
"BIOS" -> hasComponent(Constants.ItemName.EEPROM) _, "BIOS" -> hasComponent(Constants.ItemName.EEPROM) _,
"Screen" -> hasComponent(Constants.BlockName.ScreenTier1) _, "Screen" -> hasComponent(Constants.BlockName.ScreenTier1) _,
"Keyboard" -> hasComponent(Constants.BlockName.Keyboard) _, "Keyboard" -> hasComponent(Constants.BlockName.Keyboard) _,
"GraphicsCard" -> ((inventory: IInventory) => Array(Constants.ItemName.GraphicsCardTier1, Constants.ItemName.GraphicsCardTier2, Constants.ItemName.GraphicsCardTier3).exists(name => hasComponent(name)(inventory))), "GraphicsCard" -> ((inventory: IInventory) => Array(
Constants.ItemName.APUCreative,
Constants.ItemName.APUTier1,
Constants.ItemName.APUTier2,
Constants.ItemName.GraphicsCardTier1,
Constants.ItemName.GraphicsCardTier2,
Constants.ItemName.GraphicsCardTier3).
exists(name => hasComponent(name)(inventory))),
"Inventory" -> hasInventory _, "Inventory" -> hasInventory _,
"OS" -> hasFileSystem _) "OS" -> hasFileSystem _)

View File

@ -13,6 +13,7 @@ import li.cil.oc.common.tileentity.RobotProxy
import li.cil.oc.common.tileentity.traits import li.cil.oc.common.tileentity.traits
import li.cil.oc.integration.opencomputers.DriverRedstoneCard import li.cil.oc.integration.opencomputers.DriverRedstoneCard
import li.cil.oc.integration.util.Waila import li.cil.oc.integration.util.Waila
import li.cil.oc.server.agent
import li.cil.oc.server.{PacketSender => ServerPacketSender} import li.cil.oc.server.{PacketSender => ServerPacketSender}
import li.cil.oc.util.ExtendedNBT._ import li.cil.oc.util.ExtendedNBT._
import net.minecraft.entity.player.EntityPlayer import net.minecraft.entity.player.EntityPlayer
@ -178,7 +179,10 @@ trait Computer extends Environment with ComponentInventory with Rotatable with B
} }
override def isUseableByPlayer(player: EntityPlayer) = override def isUseableByPlayer(player: EntityPlayer) =
super.isUseableByPlayer(player) && canInteract(player.getName) super.isUseableByPlayer(player) && (player match {
case fakePlayer: agent.Player => canInteract(fakePlayer.agent.ownerName())
case _ => canInteract(player.getName)
})
override protected def onRotationChanged() { override protected def onRotationChanged() {
super.onRotationChanged() super.onRotationChanged()

View File

@ -34,7 +34,7 @@ object Mods {
val ComputerCraft = new SimpleMod(IDs.ComputerCraft) val ComputerCraft = new SimpleMod(IDs.ComputerCraft)
val CraftingCosts = new SimpleMod(IDs.CraftingCosts) val CraftingCosts = new SimpleMod(IDs.CraftingCosts)
val DeepStorageUnit = new ClassBasedMod(IDs.DeepStorageUnit, "powercrystals.minefactoryreloaded.api.IDeepStorageUnit")() val DeepStorageUnit = new ClassBasedMod(IDs.DeepStorageUnit, "powercrystals.minefactoryreloaded.api.IDeepStorageUnit")()
val ElectricalAge = new SimpleMod(IDs.ElectricalAge) val ElectricalAge = new SimpleMod(IDs.ElectricalAge, providesPower = true)
val EnderIO = new SimpleMod(IDs.EnderIO) val EnderIO = new SimpleMod(IDs.EnderIO)
val EnderStorage = new SimpleMod(IDs.EnderStorage) val EnderStorage = new SimpleMod(IDs.EnderStorage)
val Factorization = new SimpleMod(IDs.Factorization, providesPower = true) val Factorization = new SimpleMod(IDs.Factorization, providesPower = true)
@ -79,43 +79,43 @@ object Mods {
// ----------------------------------------------------------------------- // // ----------------------------------------------------------------------- //
val Proxies = Array( val Proxies = Array(
// integration.appeng.ModAppEng, // integration.appeng.ModAppEng,
// integration.bloodmagic.ModBloodMagic, // integration.bloodmagic.ModBloodMagic,
// integration.bluepower.ModBluePower, // integration.bluepower.ModBluePower,
// integration.buildcraft.tools.ModBuildCraftAPITools, // integration.buildcraft.tools.ModBuildCraftAPITools,
// integration.buildcraft.tiles.ModBuildCraftAPITiles, // integration.buildcraft.tiles.ModBuildCraftAPITiles,
// integration.buildcraft.transport.ModBuildCraftAPITransport, // integration.buildcraft.transport.ModBuildCraftAPITransport,
// integration.cofh.energy.ModCoFHEnergy, // integration.cofh.energy.ModCoFHEnergy,
// integration.cofh.item.ModCoFHItem, // integration.cofh.item.ModCoFHItem,
// integration.cofh.tileentity.ModCoFHTileEntity, // integration.cofh.tileentity.ModCoFHTileEntity,
// integration.cofh.transport.ModCoFHTransport, // integration.cofh.transport.ModCoFHTransport,
// integration.enderstorage.ModEnderStorage, // integration.enderstorage.ModEnderStorage,
// integration.dsu.ModDeepStorageUnit, // integration.dsu.ModDeepStorageUnit,
// integration.forestry.ModForestry, // integration.forestry.ModForestry,
// integration.fmp.ModForgeMultipart, // integration.fmp.ModForgeMultipart,
// integration.gc.ModGalacticraft, // integration.gc.ModGalacticraft,
// integration.gregtech.ModGregtech, // integration.gregtech.ModGregtech,
// integration.ic2.ModIndustrialCraft2, // integration.ic2.ModIndustrialCraft2,
// integration.mfr.ModMineFactoryReloaded, // integration.mfr.ModMineFactoryReloaded,
// integration.mystcraft.ModMystcraft, // integration.mystcraft.ModMystcraft,
// integration.nek.ModNotEnoughKeys, // integration.nek.ModNotEnoughKeys,
// integration.projectred.ModProjectRed, // integration.projectred.ModProjectRed,
// integration.railcraft.ModRailcraft, // integration.railcraft.ModRailcraft,
// integration.redlogic.ModRedLogic, // integration.redlogic.ModRedLogic,
// integration.stargatetech2.ModStargateTech2, // integration.stargatetech2.ModStargateTech2,
// integration.thaumcraft.ModThaumcraft, // integration.thaumcraft.ModThaumcraft,
// integration.thermalexpansion.ModThermalExpansion, // integration.thermalexpansion.ModThermalExpansion,
// integration.tcon.ModTinkersConstruct, // integration.tcon.ModTinkersConstruct,
// integration.tmechworks.ModTMechworks, // integration.tmechworks.ModTMechworks,
integration.vanilla.ModVanilla, integration.vanilla.ModVanilla,
integration.versionchecker.ModVersionChecker, integration.versionchecker.ModVersionChecker,
integration.waila.ModWaila, integration.waila.ModWaila,
// integration.wrcbe.ModWRCBE, // integration.wrcbe.ModWRCBE,
// integration.wrsve.ModWRSVE, // integration.wrsve.ModWRSVE,
// // Register the general IPeripheral driver last, if at all, to avoid it // // Register the general IPeripheral driver last, if at all, to avoid it
// // being used rather than other more concrete implementations. // // being used rather than other more concrete implementations.
// integration.computercraft.ModComputerCraft, // integration.computercraft.ModComputerCraft,
// We go late to ensure all other mod integration is done, e.g. to // We go late to ensure all other mod integration is done, e.g. to
// allow properly checking if wireless redstone is present. // allow properly checking if wireless redstone is present.
@ -123,7 +123,7 @@ object Mods {
// Run IGW registration after OC registration because we use the manual // Run IGW registration after OC registration because we use the manual
// in there to know which pages to register. // in there to know which pages to register.
// integration.igw.ModIngameWiki // integration.igw.ModIngameWiki
) )
def init(): Unit = { def init(): Unit = {
@ -168,7 +168,8 @@ object Mods {
final val Factorization = "factorization" final val Factorization = "factorization"
final val Forestry = "Forestry" final val Forestry = "Forestry"
final val ForgeMultipart = "ForgeMultipart" final val ForgeMultipart = "ForgeMultipart"
final val DeepStorageUnit = "MineFactoryReloaded|DeepStorageUnit" // Doesn't really exist. final val DeepStorageUnit = "MineFactoryReloaded|DeepStorageUnit"
// Doesn't really exist.
final val Galacticraft = "Galacticraft API" final val Galacticraft = "Galacticraft API"
final val GregTech = "gregtech" final val GregTech = "gregtech"
final val IndustrialCraft2 = "IC2" final val IndustrialCraft2 = "IC2"

View File

@ -1,14 +1,5 @@
package li.cil.oc.integration.appeng package li.cil.oc.integration.appeng
import appeng.api.AEApi
import appeng.api.config.Actionable
import appeng.api.networking.crafting.ICraftingLink
import appeng.api.networking.crafting.ICraftingRequester
import appeng.api.networking.security.IActionHost
import appeng.api.networking.security.MachineSource
import appeng.api.storage.data.IAEItemStack
import appeng.me.helpers.IGridProxyable
import appeng.util.item.AEItemStack
import com.google.common.collect.ImmutableSet import com.google.common.collect.ImmutableSet
import li.cil.oc.OpenComputers import li.cil.oc.OpenComputers
import li.cil.oc.api.machine.Arguments import li.cil.oc.api.machine.Arguments
@ -23,7 +14,6 @@ import net.minecraft.nbt.NBTTagCompound
import net.minecraft.tileentity.TileEntity import net.minecraft.tileentity.TileEntity
import net.minecraftforge.common.DimensionManager import net.minecraftforge.common.DimensionManager
import net.minecraftforge.common.util.Constants.NBT import net.minecraftforge.common.util.Constants.NBT
import net.minecraftforge.common.util.ForgeDirection
import scala.collection.convert.WrapAsJava._ import scala.collection.convert.WrapAsJava._
import scala.collection.convert.WrapAsScala._ import scala.collection.convert.WrapAsScala._
@ -55,7 +45,7 @@ trait NetworkControl[AETile >: Null <: TileEntity with IGridProxyable with IActi
case Some(pattern) => pattern.getOutputs.find(_.isSameType(stack)).get case Some(pattern) => pattern.getOutputs.find(_.isSameType(stack)).get
case _ => stack.copy.setStackSize(0) // Should not be possible, but hey... case _ => stack.copy.setStackSize(0) // Should not be possible, but hey...
} }
new Craftable(tile, result) new NetworkControl.Craftable(tile, result)
}).toArray) }).toArray)
} }
@ -101,8 +91,11 @@ trait NetworkControl[AETile >: Null <: TileEntity with IGridProxyable with IActi
filter.get("name").forall(_.equals(Item.itemRegistry.getNameForObject(stack.getItem))) && filter.get("name").forall(_.equals(Item.itemRegistry.getNameForObject(stack.getItem))) &&
filter.get("label").forall(_.equals(stack.getItemStack.getDisplayName)) filter.get("label").forall(_.equals(stack.getItemStack.getDisplayName))
} }
}
class Craftable(var controller: AETile, var stack: IAEItemStack) extends AbstractValue with ICraftingRequester { object NetworkControl {
class Craftable(var controller: TileEntity with IGridProxyable with IActionHost, var stack: IAEItemStack) extends AbstractValue with ICraftingRequester {
def this() = this(null, null) def this() = this(null, null)
private val links = mutable.Set.empty[ICraftingLink] private val links = mutable.Set.empty[ICraftingLink]
@ -186,8 +179,8 @@ trait NetworkControl[AETile >: Null <: TileEntity with IGridProxyable with IActi
EventHandler.schedule(() => { EventHandler.schedule(() => {
val world = DimensionManager.getWorld(dimension) val world = DimensionManager.getWorld(dimension)
val tileEntity = world.getTileEntity(x, y, z) val tileEntity = world.getTileEntity(x, y, z)
if (tileEntity != null && tileEntity.isInstanceOf[AETile]) { if (tileEntity != null && tileEntity.isInstanceOf[TileEntity with IGridProxyable with IActionHost]) {
controller = tileEntity.asInstanceOf[AETile] controller = tileEntity.asInstanceOf[TileEntity with IGridProxyable with IActionHost]
} }
}) })
} }
@ -256,4 +249,4 @@ trait NetworkControl[AETile >: Null <: TileEntity with IGridProxyable with IActi
} }
} }
} }

View File

@ -14,12 +14,14 @@ import net.minecraft.item.ItemStack
object DriverAPU extends DriverCPU with HostAware with EnvironmentAware { object DriverAPU extends DriverCPU with HostAware with EnvironmentAware {
override def worksWith(stack: ItemStack) = isOneOf(stack, override def worksWith(stack: ItemStack) = isOneOf(stack,
api.Items.get(Constants.ItemName.APUTier1), api.Items.get(Constants.ItemName.APUTier1),
api.Items.get(Constants.ItemName.APUTier2)) api.Items.get(Constants.ItemName.APUTier2),
api.Items.get(Constants.ItemName.APUCreative))
override def createEnvironment(stack: ItemStack, host: EnvironmentHost) = override def createEnvironment(stack: ItemStack, host: EnvironmentHost) =
gpuTier(stack) match { gpuTier(stack) match {
case Tier.One => new component.GraphicsCard.Tier1() case Tier.One => new component.GraphicsCard.Tier1()
case Tier.Two => new component.GraphicsCard.Tier2() case Tier.Two => new component.GraphicsCard.Tier2()
case Tier.Three => new component.GraphicsCard.Tier3()
case _ => null case _ => null
} }

View File

@ -3,13 +3,14 @@ package li.cil.oc.integration.opencomputers
import li.cil.oc.Constants import li.cil.oc.Constants
import li.cil.oc.api import li.cil.oc.api
import li.cil.oc.api.driver.EnvironmentHost import li.cil.oc.api.driver.EnvironmentHost
import li.cil.oc.api.driver.item.HostAware
import li.cil.oc.common.Slot import li.cil.oc.common.Slot
import li.cil.oc.common.Tier import li.cil.oc.common.Tier
import li.cil.oc.common.item import li.cil.oc.common.item
import li.cil.oc.common.item.Delegator import li.cil.oc.common.item.Delegator
import net.minecraft.item.ItemStack import net.minecraft.item.ItemStack
object DriverUpgradeHover extends Item { object DriverUpgradeHover extends Item with HostAware {
override def worksWith(stack: ItemStack) = isOneOf(stack, override def worksWith(stack: ItemStack) = isOneOf(stack,
api.Items.get(Constants.ItemName.HoverUpgradeTier1), api.Items.get(Constants.ItemName.HoverUpgradeTier1),
api.Items.get(Constants.ItemName.HoverUpgradeTier2)) api.Items.get(Constants.ItemName.HoverUpgradeTier2))

View File

@ -78,7 +78,7 @@ private[oc] object Registry extends api.detail.DriverAPI {
val hostAware = items.collect { val hostAware = items.collect {
case driver: HostAware if driver.worksWith(stack) => driver case driver: HostAware if driver.worksWith(stack) => driver
} }
if (hostAware.size > 0) { if (hostAware.nonEmpty) {
hostAware.find(_.worksWith(stack, host)).orNull hostAware.find(_.worksWith(stack, host)).orNull
} }
else driverFor(stack) else driverFor(stack)
@ -113,7 +113,7 @@ private[oc] object Registry extends api.detail.DriverAPI {
memo.get(valueRef) memo.get(valueRef)
} }
else valueRef match { else valueRef match {
case null | Unit | None => null case null | None => null
case arg: java.lang.Boolean => arg case arg: java.lang.Boolean => arg
case arg: java.lang.Byte => arg case arg: java.lang.Byte => arg

View File

@ -26,6 +26,7 @@ import li.cil.oc.api.prefab
import li.cil.oc.common.EventHandler import li.cil.oc.common.EventHandler
import li.cil.oc.common.SaveHandler import li.cil.oc.common.SaveHandler
import li.cil.oc.common.Slot import li.cil.oc.common.Slot
import li.cil.oc.common.Tier
import li.cil.oc.common.tileentity import li.cil.oc.common.tileentity
import li.cil.oc.server.PacketSender import li.cil.oc.server.PacketSender
import li.cil.oc.server.driver.Registry import li.cil.oc.server.driver.Registry
@ -112,7 +113,7 @@ class Machine(val host: MachineHost) extends prefab.ManagedEnvironment with mach
})) }))
maxCallBudget = components.foldLeft(0.0)((sum, item) => sum + (Option(item) match { maxCallBudget = components.foldLeft(0.0)((sum, item) => sum + (Option(item) match {
case Some(stack) => Option(Driver.driverFor(stack, host.getClass)) match { case Some(stack) => Option(Driver.driverFor(stack, host.getClass)) match {
case Some(driver: Processor) if driver.slot(stack) == Slot.CPU => Settings.get.callBudgets(driver.tier(stack)) case Some(driver: Processor) if driver.slot(stack) == Slot.CPU => Settings.get.callBudgets(driver.tier(stack) max Tier.One min Tier.Three)
case _ => 0 case _ => 0
} }
case _ => 0 case _ => 0
@ -832,7 +833,7 @@ class Machine(val host: MachineHost) extends prefab.ManagedEnvironment with mach
} }
private def close() = state.synchronized( private def close() = state.synchronized(
if (state.size == 0 || state.top != Machine.State.Stopped) { if (state.isEmpty || state.top != Machine.State.Stopped) {
this.synchronized { this.synchronized {
state.clear() state.clear()
state.push(Machine.State.Stopped) state.push(Machine.State.Stopped)