added version specific mod presence checks

This commit is contained in:
Florian Nücke 2014-03-29 21:09:37 +01:00
parent 9065acf946
commit 3085b961b8
31 changed files with 117 additions and 113 deletions

View File

@ -2,7 +2,7 @@ package li.cil.oc
import cpw.mods.fml.common.registry.GameRegistry
import li.cil.oc.common.item
import li.cil.oc.util.mods.StargateTech2
import li.cil.oc.util.mods.Mods
import net.minecraft.block.Block
import net.minecraft.item.{Item, ItemStack}
import net.minecraftforge.oredict.OreDictionary
@ -123,7 +123,7 @@ object Items {
upgradeNavigation = Recipes.addItemDelegate(new item.UpgradeNavigation(multi), "navigationUpgrade")
abstractBus = new item.AbstractBusCard(multi)
if (StargateTech2.isAvailable) {
if (Mods.StargateTech2.isAvailable) {
Recipes.addItemDelegate(abstractBus, "abstractBusCard")
}

View File

@ -8,6 +8,7 @@ import li.cil.oc.util.PackedColor
import org.apache.commons.lang3.StringEscapeUtils
import scala.collection.convert.WrapAsScala._
import scala.io.Source
import li.cil.oc.util.mods.Mods
class Settings(config: Config) {
val itemId = config.getInt("ids.item")
@ -107,10 +108,10 @@ class Settings(config: Config) {
val pureIgnorePower = config.getBoolean("power.ignorePower")
val ignorePower = pureIgnorePower ||
(!ModAPIManager.INSTANCE.hasAPI("BuildCraftAPI|power") &&
!Loader.isModLoaded("IC2") &&
!Loader.isModLoaded("ThermalExpansion") &&
!Loader.isModLoaded("UniversalElectricity"))
(!Mods.BuildCraftPower.isAvailable &&
!Mods.IndustrialCraft2.isAvailable &&
!Mods.ThermalExpansion.isAvailable &&
!Mods.UniversalElectricity.isAvailable)
val tickFrequency = config.getDouble("power.tickFrequency") max 1
val chargeRate = config.getDouble("power.chargerChargeRate")
val generatorEfficiency = config.getDouble("power.generatorEfficiency")

View File

@ -2,7 +2,7 @@ package li.cil.oc.common
import cpw.mods.fml.common.network.{Player, IConnectionHandler}
import li.cil.oc.util.LuaStateFactory
import li.cil.oc.util.mods.ProjectRed
import li.cil.oc.util.mods.{Mods, ProjectRed}
import li.cil.oc.{OpenComputers, UpdateCheck, Settings}
import net.minecraft.entity.player.EntityPlayerMP
import net.minecraft.network.packet.{Packet1Login, NetHandler}
@ -17,7 +17,7 @@ object ConnectionHandler extends IConnectionHandler {
if (!LuaStateFactory.isAvailable) {
p.sendChatToPlayer(ChatMessageComponent.createFromText("§aOpenComputers§f: ").addKey(Settings.namespace + "gui.Chat.WarningLuaFallback"))
}
if (ProjectRed.isAvailable && !ProjectRed.isAPIAvailable) {
if (Mods.ProjectRed.isAvailable && !ProjectRed.isAPIAvailable) {
p.sendChatToPlayer(ChatMessageComponent.createFromText("§aOpenComputers§f: ").addKey(Settings.namespace + "gui.Chat.WarningProjectRed"))
}
if (!Settings.get.pureIgnorePower && Settings.get.ignorePower) {

View File

@ -1,7 +1,6 @@
package li.cil.oc.common
import cpw.mods.fml.common.event._
import cpw.mods.fml.common.Loader
import cpw.mods.fml.common.network.NetworkRegistry
import cpw.mods.fml.common.registry.{TickRegistry, GameRegistry}
import cpw.mods.fml.relauncher.Side
@ -16,7 +15,7 @@ import li.cil.oc.server.component.machine.{LuaJLuaArchitecture, NativeLuaArchite
import li.cil.oc.server.network.WirelessNetwork
import li.cil.oc.server.{TickHandler, driver, fs, network}
import li.cil.oc.util.LuaStateFactory
import li.cil.oc.util.mods.ComputerCraft
import li.cil.oc.util.mods.{Mods, ComputerCraft}
import net.minecraftforge.common.MinecraftForge
class Proxy {
@ -26,10 +25,10 @@ class Proxy {
Blocks.init()
Items.init()
if (Loader.isModLoaded("ForgeMultipart")) {
if (Mods.ForgeMultipart.isAvailable) {
MultiPart.init()
}
if (Loader.isModLoaded("ComputerCraft")) {
if (Mods.ComputerCraft.isAvailable) {
ComputerCraft.init()
}

View File

@ -1,11 +1,10 @@
package li.cil.oc.common.asm
import cpw.mods.fml.common.asm.transformers.deobf.FMLDeobfuscatingRemapper
import cpw.mods.fml.common.Loader
import cpw.mods.fml.relauncher.IFMLLoadingPlugin.TransformerExclusions
import java.util.logging.{Level, Logger}
import li.cil.oc.common.asm.template.SimpleComponentImpl
import li.cil.oc.util.mods.StargateTech2
import li.cil.oc.util.mods.Mods
import net.minecraft.launchwrapper.{LaunchClassLoader, IClassTransformer}
import org.objectweb.asm.tree._
import org.objectweb.asm.{ClassWriter, ClassReader}
@ -25,11 +24,11 @@ class ClassTransformer extends IClassTransformer {
transformedClass = ensureStargateTechCompatibility(transformedClass)
}
if (transformedClass != null
&& !name.startsWith("""net.minecraft.""")
&& !name.startsWith("""net.minecraftforge.""")
&& !name.startsWith("""li.cil.oc.common.asm.""")
&& !name.startsWith("""li.cil.oc.api.""")) {
if (name.startsWith("""li.cil.oc.""")) {
&& !name.startsWith( """net.minecraft.""")
&& !name.startsWith( """net.minecraftforge.""")
&& !name.startsWith( """li.cil.oc.common.asm.""")
&& !name.startsWith( """li.cil.oc.api.""")) {
if (name.startsWith( """li.cil.oc.""")) {
// Strip foreign interfaces from scala generated classes. This is
// primarily intended to clean up mix-ins / synthetic classes
// generated by Scala.
@ -87,12 +86,7 @@ class ClassTransformer extends IClassTransformer {
}
def ensureStargateTechCompatibility(basicClass: Array[Byte]): Array[Byte] = {
if (!Loader.isModLoaded("StargateTech2")) {
return basicClass
}
if (StargateTech2.isAvailable) {
// All green, API version is new enough.
if (!Mods.StargateTech2.isAvailable) {
return basicClass
}

View File

@ -2,13 +2,13 @@ package li.cil.oc.common.block
import codechicken.lib.vec.Cuboid6
import codechicken.multipart.{TFacePart, JNormalOcclusion, NormalOcclusionTest, TileMultipart}
import cpw.mods.fml.common.Loader
import cpw.mods.fml.relauncher.{SideOnly, Side}
import java.util
import li.cil.oc.Settings
import li.cil.oc.api.network.{SidedEnvironment, Environment}
import li.cil.oc.common.multipart.CablePart
import li.cil.oc.common.tileentity
import li.cil.oc.Settings
import li.cil.oc.util.mods.Mods
import li.cil.oc.util.Tooltip
import net.minecraft.client.renderer.texture.IconRegister
import net.minecraft.entity.player.EntityPlayer
@ -95,7 +95,7 @@ object Cable {
if (!world.isAirBlock(tx, ty, tz)) {
val neighborTileEntity = world.getBlockTileEntity(tx, ty, tz)
val neighborHasNode = hasNetworkNode(neighborTileEntity, side.getOpposite)
val canConnect = !Loader.isModLoaded("ForgeMultipart") ||
val canConnect = !Mods.ForgeMultipart.isAvailable ||
(canConnectFromSide(tileEntity, side) && canConnectFromSide(neighborTileEntity, side.getOpposite))
val canConnectIM = canConnectFromSideIM(tileEntity, side) && canConnectFromSideIM(neighborTileEntity, side.getOpposite)
if (neighborHasNode && canConnect && canConnectIM) {
@ -115,7 +115,7 @@ object Cable {
if (host.getWorldObj.isRemote) host.canConnect(side)
else host.sidedNode(side) != null
case host: Environment => true
case host if Loader.isModLoaded("ForgeMultipart") => hasMultiPartNode(tileEntity)
case host if Mods.ForgeMultipart.isAvailable => hasMultiPartNode(tileEntity)
case _ => false
}

View File

@ -1,12 +1,13 @@
package li.cil.oc.common.block
import cpw.mods.fml.common.{Loader, Optional}
import cpw.mods.fml.common.Optional
import cpw.mods.fml.relauncher.{Side, SideOnly}
import java.util
import java.util.Random
import li.cil.oc.client.renderer.block.BlockRenderer
import li.cil.oc.common.tileentity
import li.cil.oc.common.tileentity.traits.{Rotatable, BundledRedstoneAware}
import li.cil.oc.util.ItemCosts
import li.cil.oc.util.mods.Mods
import li.cil.oc.{Settings, CreativeTab}
import mcp.mobius.waila.api.{IWailaConfigHandler, IWailaDataAccessor, IWailaBlock}
import net.minecraft.block.Block
@ -23,7 +24,6 @@ import net.minecraftforge.common.ForgeDirection
import org.lwjgl.input
import powercrystals.minefactoryreloaded.api.rednet.{IRedNetNetworkContainer, RedNetConnectionType, IConnectableRedNet}
import scala.collection.mutable
import li.cil.oc.common.tileentity.traits.{Rotatable, BundledRedstoneAware}
@Optional.Interface(iface = "mcp.mobius.waila.api.IWailaBlock", modid = "Waila")
class Delegator[Child <: Delegate](id: Int) extends Block(id, Material.iron) with IWailaBlock {
@ -509,7 +509,7 @@ trait RedstoneDelegator[Child <: Delegate] extends Delegator[Child] with IConnec
}
abstract override def onNeighborBlockChange(world: World, x: Int, y: Int, z: Int, blockId: Int) {
if (Loader.isModLoaded("MineFactoryReloaded")) {
if (Mods.MineFactoryReloaded.isAvailable) {
world.getBlockTileEntity(x, y, z) match {
case t: BundledRedstoneAware => for (side <- ForgeDirection.VALID_DIRECTIONS) {
Block.blocksList(world.getBlockId(x + side.offsetX, y + side.offsetY, z + side.offsetZ)) match {

View File

@ -1,8 +1,9 @@
package li.cil.oc.common.block
import cpw.mods.fml.common.{Optional, Loader}
import cpw.mods.fml.common.Optional
import java.util
import li.cil.oc.common.{GuiType, tileentity}
import li.cil.oc.util.mods.Mods
import li.cil.oc.util.Tooltip
import li.cil.oc.{OpenComputers, Settings}
import mcp.mobius.waila.api.{IWailaConfigHandler, IWailaDataAccessor}
@ -23,7 +24,7 @@ class DiskDrive(val parent: SimpleDelegator) extends SimpleDelegate {
override def tooltipLines(stack: ItemStack, player: EntityPlayer, tooltip: util.List[String], advanced: Boolean) {
tooltip.addAll(Tooltip.get(unlocalizedName))
if (Loader.isModLoaded("ComputerCraft")) {
if (Mods.ComputerCraft.isAvailable) {
tooltip.addAll(Tooltip.get(unlocalizedName + ".CC"))
}
}

View File

@ -1,10 +1,10 @@
package li.cil.oc.common.block
import cpw.mods.fml.common.Loader
import java.text.DecimalFormat
import java.util
import li.cil.oc.Settings
import li.cil.oc.common.tileentity
import li.cil.oc.Settings
import li.cil.oc.util.mods.Mods
import li.cil.oc.util.Tooltip
import net.minecraft.client.renderer.texture.IconRegister
import net.minecraft.entity.player.EntityPlayer
@ -37,16 +37,16 @@ class PowerConverter(val parent: SimpleDelegator) extends SimpleDelegate {
else (1.0 / ratio, 1.0)
tooltip.addAll(Tooltip.get(unlocalizedName + "." + name, addExtension(a), addExtension(b)))
}
if (Loader.isModLoaded("BuildCraft|Energy")) {
if (Mods.BuildCraftPower.isAvailable) {
addRatio("BC", Settings.ratioBC)
}
if (Loader.isModLoaded("IC2")) {
if (Mods.IndustrialCraft2.isAvailable) {
addRatio("IC2", Settings.ratioIC2)
}
if (Loader.isModLoaded("ThermalExpansion")) {
if (Mods.ThermalExpansion.isAvailable) {
addRatio("TE", Settings.ratioTE)
}
if (Loader.isModLoaded("UniversalElectricity")) {
if (Mods.UniversalElectricity.isAvailable) {
addRatio("UE", Settings.ratioUE)
}
}

View File

@ -1,8 +1,8 @@
package li.cil.oc.common.block
import cpw.mods.fml.common.Loader
import java.util
import li.cil.oc.common.tileentity
import li.cil.oc.util.mods.Mods
import li.cil.oc.util.Tooltip
import li.cil.oc.{Items, Settings}
import net.minecraft.client.renderer.texture.IconRegister
@ -19,10 +19,10 @@ class Redstone(val parent: SimpleDelegator) extends RedstoneAware with SimpleDel
override def tooltipLines(stack: ItemStack, player: EntityPlayer, tooltip: util.List[String], advanced: Boolean) {
tooltip.addAll(Tooltip.get(unlocalizedName))
if (Loader.isModLoaded("RedLogic")) {
if (Mods.RedLogic.isAvailable) {
tooltip.addAll(Tooltip.get(Items.rs.unlocalizedName + ".RedLogic"))
}
if (Loader.isModLoaded("MineFactoryReloaded")) {
if (Mods.MineFactoryReloaded.isAvailable) {
tooltip.addAll(Tooltip.get(Items.rs.unlocalizedName + ".RedNet"))
}
}

View File

@ -3,7 +3,7 @@ package li.cil.oc.common.item
import java.util
import li.cil.oc.Settings
import li.cil.oc.util.Tooltip
import li.cil.oc.util.mods.StargateTech2
import li.cil.oc.util.mods.Mods
import net.minecraft.client.renderer.texture.IconRegister
import net.minecraft.entity.player.EntityPlayer
import net.minecraft.item.ItemStack
@ -11,7 +11,7 @@ import net.minecraft.item.ItemStack
class AbstractBusCard(val parent: Delegator) extends Delegate {
val unlocalizedName = "AbstractBusCard"
showInItemList = StargateTech2.isAvailable
showInItemList = Mods.StargateTech2.isAvailable
override def tooltipLines(stack: ItemStack, player: EntityPlayer, tooltip: util.List[String], advanced: Boolean) {
tooltip.addAll(Tooltip.get(unlocalizedName))

View File

@ -1,8 +1,8 @@
package li.cil.oc.common.item
import cpw.mods.fml.common.Loader
import java.util
import li.cil.oc.Settings
import li.cil.oc.util.mods.Mods
import li.cil.oc.util.Tooltip
import net.minecraft.client.renderer.texture.IconRegister
import net.minecraft.entity.player.EntityPlayer
@ -11,7 +11,7 @@ import net.minecraft.item.ItemStack
class IronNugget(val parent: Delegator) extends Delegate {
val unlocalizedName = "IronNugget"
showInItemList = !Loader.isModLoaded("gregtech_addon")
showInItemList = !Mods.GregTech.isAvailable
override def tooltipLines(stack: ItemStack, player: EntityPlayer, tooltip: util.List[String], advanced: Boolean) {
tooltip.addAll(Tooltip.get(unlocalizedName))

View File

@ -1,8 +1,8 @@
package li.cil.oc.common.item
import cpw.mods.fml.common.Loader
import java.util
import li.cil.oc.Settings
import li.cil.oc.util.mods.Mods
import li.cil.oc.util.Tooltip
import net.minecraft.client.renderer.texture.IconRegister
import net.minecraft.entity.player.EntityPlayer
@ -13,10 +13,10 @@ class RedstoneCard(val parent: Delegator) extends Delegate {
override def tooltipLines(stack: ItemStack, player: EntityPlayer, tooltip: util.List[String], advanced: Boolean) {
tooltip.addAll(Tooltip.get(unlocalizedName))
if (Loader.isModLoaded("RedLogic")) {
if (Mods.RedLogic.isAvailable) {
tooltip.addAll(Tooltip.get(unlocalizedName + ".RedLogic"))
}
if (Loader.isModLoaded("MineFactoryReloaded")) {
if (Mods.MineFactoryReloaded.isAvailable) {
tooltip.addAll(Tooltip.get(unlocalizedName + ".RedNet"))
}
super.tooltipLines(stack, player, tooltip, advanced)

View File

@ -1,11 +1,12 @@
package li.cil.oc.common.tileentity
import cpw.mods.fml.common.{Loader, Optional}
import cpw.mods.fml.common.Optional
import dan200.computercraft.api.lua.ILuaContext
import dan200.computercraft.api.peripheral.{IComputerAccess, IPeripheral}
import li.cil.oc.api
import li.cil.oc.api.network.{Packet, Message}
import li.cil.oc.server.PacketSender
import li.cil.oc.util.mods.Mods
import net.minecraftforge.common.ForgeDirection
import scala.collection.mutable
@ -102,7 +103,7 @@ class Router extends traits.Hub with traits.NotAnalyzable with IPeripheral {
override protected def onPlugMessage(plug: Plug, message: Message) {
super.onPlugMessage(plug, message)
if (message.name == "network.message" && Loader.isModLoaded("ComputerCraft")) {
if (message.name == "network.message" && Mods.ComputerCraft.isAvailable) {
message.data match {
case Array(packet: Packet) =>
packet.data.headOption match {

View File

@ -1,8 +1,8 @@
package li.cil.oc.common.tileentity
import cpw.mods.fml.common.Loader
import li.cil.oc.api.network._
import li.cil.oc.util.ExtendedNBT._
import li.cil.oc.util.mods.Mods
import li.cil.oc.{api, Settings}
import net.minecraft.entity.player.EntityPlayer
import net.minecraft.nbt.NBTTagCompound
@ -38,7 +38,7 @@ class WirelessRouter extends Router with WirelessEndpoint {
override def receivePacket(packet: Packet, distance: Double) {
tryEnqueuePacket(ForgeDirection.UNKNOWN, packet)
if (Loader.isModLoaded("ComputerCraft")) {
if (Mods.ComputerCraft.isAvailable) {
packet.data.headOption match {
case Some(answerPort: java.lang.Double) => queueMessage(packet.source, packet.destination, packet.port, answerPort.toInt, packet.data.drop(1))
case _ => queueMessage(packet.source, packet.destination, packet.port, -1, packet.data)

View File

@ -6,7 +6,7 @@ import li.cil.oc.api.network
import li.cil.oc.api.network.ManagedEnvironment
import li.cil.oc.server.component
import li.cil.oc.server.{PacketSender => ServerPacketSender}
import li.cil.oc.util.mods.{StargateTech2API, StargateTech2}
import li.cil.oc.util.mods.{Mods, StargateTech2}
import net.minecraft.nbt.NBTTagCompound
import stargatetech2.api.bus.{IBusInterface, IBusDevice}
import stargatetech2.api.StargateTechAPI
@ -19,7 +19,8 @@ import stargatetech2.api.StargateTechAPI
// probably is something derping up in the class loader... the thing that
// confuses me the most, though, is that it apparently works for redstone and
// the CC interface, so... yeah. I'm out of ideas.
trait AbstractBusAware extends TileEntity with network.Environment { self: IBusDevice =>
trait AbstractBusAware extends TileEntity with network.Environment {
self: IBusDevice =>
protected var _isAbstractBusAvailable: Boolean = _
protected lazy val fakeInterface = Array[AnyRef](StargateTechAPI.api.getFactory.getIBusInterface(this, null))
@ -51,9 +52,9 @@ trait AbstractBusAware extends TileEntity with network.Environment { self: IBusD
def isAbstractBusAvailable_=(value: Boolean) = {
if (value != isAbstractBusAvailable) {
_isAbstractBusAvailable = value
if (isServer && StargateTech2.isAvailable) {
if (isAbstractBusAvailable) StargateTech2API.addDevice(world, x, y, z)
else StargateTech2API.removeDevice(world, x, y, z)
if (isServer && Mods.StargateTech2.isAvailable) {
if (isAbstractBusAvailable) StargateTech2.addDevice(world, x, y, z)
else StargateTech2.removeDevice(world, x, y, z)
}
world.notifyBlocksOfNeighborChange(x, y, z, block.blockID)
if (isServer) ServerPacketSender.sendAbstractBusState(this)

View File

@ -3,7 +3,7 @@ package li.cil.oc.common.tileentity.traits
import cpw.mods.fml.common.{Loader, Optional}
import li.cil.oc.Settings
import li.cil.oc.util.ExtendedNBT._
import li.cil.oc.util.mods.ProjectRed
import li.cil.oc.util.mods.{Mods, ProjectRed}
import mods.immibis.redlogic.api.wiring.{IInsulatedRedstoneWire, IBundledUpdatable, IBundledEmitter}
import mrtjp.projectred.api.{ProjectRedAPI, IBundledTile}
import net.minecraft.block.Block
@ -57,7 +57,7 @@ trait BundledRedstoneAware extends RedstoneAware with IBundledEmitter with IBund
def bundledOutput(side: ForgeDirection, color: Int, value: Int): Unit = if (value != bundledOutput(side, color)) {
_bundledOutput(toLocal(side).ordinal())(color) = value
if (Loader.isModLoaded("MineFactoryReloaded")) {
if (Mods.MineFactoryReloaded.isAvailable) {
val nx = x + side.offsetX
val ny = y + side.offsetY
val nz = z + side.offsetZ
@ -123,7 +123,7 @@ trait BundledRedstoneAware extends RedstoneAware with IBundledEmitter with IBund
// ----------------------------------------------------------------------- //
protected def computeBundledInput(side: ForgeDirection): Array[Int] = {
val redLogic = if (Loader.isModLoaded("RedLogic")) {
val redLogic = if (Mods.RedLogic.isAvailable) {
world.getBlockTileEntity(
x + side.offsetX,
y + side.offsetY,
@ -144,7 +144,7 @@ trait BundledRedstoneAware extends RedstoneAware with IBundledEmitter with IBund
case _ => null
}
} else null
val projectRed = if (ProjectRed.isAvailable && ProjectRed.isAPIAvailable) {
val projectRed = if (Mods.ProjectRed.isAvailable && ProjectRed.isAPIAvailable) {
Option(ProjectRedAPI.transmissionAPI.getBundledInput(world, x, y, z, side.ordinal)).fold(null: Array[Int])(_.map(_ & 0xFF))
} else null
(redLogic, projectRed) match {
@ -156,7 +156,7 @@ trait BundledRedstoneAware extends RedstoneAware with IBundledEmitter with IBund
}
override protected def onRedstoneOutputEnabledChanged() {
if (Loader.isModLoaded("MineFactoryReloaded")) {
if (Mods.MineFactoryReloaded.isAvailable) {
for (side <- ForgeDirection.VALID_DIRECTIONS) {
val nx = x + side.offsetX
val ny = y + side.offsetY

View File

@ -1,9 +1,10 @@
package li.cil.oc.common.tileentity.traits
import cpw.mods.fml.common.{Loader, Optional}
import cpw.mods.fml.common.Optional
import cpw.mods.fml.relauncher.{Side, SideOnly}
import li.cil.oc.server.{PacketSender => ServerPacketSender}
import li.cil.oc.Settings
import li.cil.oc.util.mods.Mods
import mods.immibis.redlogic.api.wiring.{IWire, IRedstoneUpdatable, IRedstoneEmitter, IConnectable}
import net.minecraft.block.Block
import net.minecraft.nbt.NBTTagCompound
@ -121,7 +122,7 @@ trait RedstoneAware extends RotationAware with IConnectable with IRedstoneEmitte
// See BlockRedstoneLogic.getInputStrength() for reference.
val vanilla = math.max(world.getIndirectPowerLevelTo(sx, sy, sz, side.ordinal()),
if (world.getBlockId(sx, sy, sz) == Block.redstoneWire.blockID) world.getBlockMetadata(sx, sy, sz) else 0)
val redLogic = if (Loader.isModLoaded("RedLogic")) {
val redLogic = if (Mods.RedLogic.isAvailable) {
world.getBlockTileEntity(sx, sy, sz) match {
case emitter: IRedstoneEmitter =>
var strength = 0

View File

@ -1,16 +1,17 @@
package li.cil.oc.common.tileentity.traits.power
import cpw.mods.fml.common.{Loader, Optional}
import cpw.mods.fml.common.Optional
import ic2.api.energy.tile.IEnergySink
import li.cil.oc.server.TickHandler
import li.cil.oc.Settings
import li.cil.oc.util.mods.Mods
import net.minecraftforge.common.ForgeDirection
@Optional.Interface(iface = "ic2.api.energy.tile.IEnergySink", modid = "IC2")
trait IndustrialCraft2 extends Common with IEnergySink {
var addedToPowerGrid = false
private lazy val useIndustrialCraft2Power = isServer && !Settings.get.ignorePower && Loader.isModLoaded("IC2")
private lazy val useIndustrialCraft2Power = isServer && !Settings.get.ignorePower && Mods.IndustrialCraft2.isAvailable
// ----------------------------------------------------------------------- //

View File

@ -1,9 +1,8 @@
package li.cil.oc.server.component.robot
import cpw.mods.fml.common.Loader
import li.cil.oc.common.tileentity
import li.cil.oc.Settings
import li.cil.oc.util.mods.{UniversalElectricity, TinkersConstruct, PortalGun}
import li.cil.oc.util.mods.{Mods, UniversalElectricity, TinkersConstruct, PortalGun}
import net.minecraft.block.{BlockPistonBase, BlockFluid, Block}
import net.minecraft.entity.item.EntityItem
import net.minecraft.entity.player.{EnumStatus, EntityPlayer}
@ -327,7 +326,7 @@ class Player(val robot: tileentity.Robot) extends EntityPlayer(robot.world, Sett
}
else 0
}
if (Loader.isModLoaded("UniversalElectricity") && UniversalElectricity.isEnergyItem(stack)) {
if (Mods.UniversalElectricity.isAvailable && UniversalElectricity.isEnergyItem(stack)) {
UniversalElectricity.chargeItem(stack, repair(UniversalElectricity.getEnergyInItem(oldStack), UniversalElectricity.getEnergyInItem(stack)))
}
else if (stack.isItemStackDamageable) {

View File

@ -3,7 +3,7 @@ package li.cil.oc.server.driver.item
import li.cil.oc.Items
import li.cil.oc.api.driver.Slot
import li.cil.oc.server.component
import li.cil.oc.util.mods.StargateTech2
import li.cil.oc.util.mods.Mods
import net.minecraft.item.ItemStack
import net.minecraft.tileentity.{TileEntity => MCTileEntity}
import stargatetech2.api.bus.IBusDevice
@ -11,7 +11,7 @@ import stargatetech2.api.bus.IBusDevice
object AbstractBusCard extends Item {
override def worksWith(stack: ItemStack) = isOneOf(stack, Items.abstractBus)
override def createEnvironment(stack: ItemStack, container: MCTileEntity) = if (StargateTech2.isAvailable) container match {
override def createEnvironment(stack: ItemStack, container: MCTileEntity) = if (Mods.StargateTech2.isAvailable) container match {
case device: IBusDevice => new component.AbstractBus(device)
case _ => null
}

View File

@ -1,12 +1,11 @@
package li.cil.oc.server.driver.item
import cpw.mods.fml.common.Loader
import dan200.computercraft.api.media.IMedia
import li.cil.oc
import li.cil.oc.api.driver.Slot
import li.cil.oc.api.fs.Label
import li.cil.oc.common.item.{FloppyDisk, HardDiskDrive}
import li.cil.oc.util.mods.ComputerCraft
import li.cil.oc.util.mods.{Mods, ComputerCraft}
import li.cil.oc.{Settings, Items}
import net.minecraft.item.ItemStack
import net.minecraft.nbt.NBTTagCompound
@ -15,10 +14,10 @@ import net.minecraft.tileentity.TileEntity
object FileSystem extends Item {
override def worksWith(stack: ItemStack) =
isOneOf(stack, Items.hdd1, Items.hdd2, Items.hdd3, Items.floppyDisk) ||
(Loader.isModLoaded("ComputerCraft") && ComputerCraft.isDisk(stack))
(Mods.ComputerCraft.isAvailable && ComputerCraft.isDisk(stack))
override def createEnvironment(stack: ItemStack, container: TileEntity) =
if (Loader.isModLoaded("ComputerCraft") && ComputerCraft.isDisk(stack) && container != null) {
if (Mods.ComputerCraft.isAvailable && ComputerCraft.isDisk(stack) && container != null) {
val address = addressFromTag(dataTag(stack))
val mount = ComputerCraft.createDiskMount(stack, container.getWorldObj)
Option(oc.api.FileSystem.asManagedEnvironment(mount, new ComputerCraftLabel(stack), container)) match {
@ -35,7 +34,7 @@ object FileSystem extends Item {
}
override def slot(stack: ItemStack) =
if (Loader.isModLoaded("ComputerCraft") && ComputerCraft.isDisk(stack)) Slot.Disk
if (Mods.ComputerCraft.isAvailable && ComputerCraft.isDisk(stack)) Slot.Disk
else Items.multi.subItem(stack) match {
case Some(hdd: HardDiskDrive) => Slot.HardDiskDrive
case Some(disk: FloppyDisk) => Slot.Disk

View File

@ -2,7 +2,7 @@ package li.cil.oc.server.network
import codechicken.lib.vec.Cuboid6
import codechicken.multipart.{TFacePart, JNormalOcclusion, NormalOcclusionTest, TileMultipart}
import cpw.mods.fml.common.{Loader, FMLCommonHandler}
import cpw.mods.fml.common.FMLCommonHandler
import cpw.mods.fml.relauncher.Side
import li.cil.oc.api.network
import li.cil.oc.api.network.{Node => ImmutableNode, WirelessEndpoint, SidedEnvironment, Environment, Visibility}
@ -10,6 +10,7 @@ import li.cil.oc.common.block.Cable
import li.cil.oc.common.multipart.CablePart
import li.cil.oc.common.tileentity
import li.cil.oc.server.network.{Node => MutableNode}
import li.cil.oc.util.mods.Mods
import li.cil.oc.{Settings, api}
import net.minecraft.nbt._
import net.minecraft.tileentity.TileEntity
@ -374,7 +375,7 @@ object Network extends api.detail.NetworkAPI {
case Some(node: MutableNode) =>
neighborNode match {
case Some(neighbor: MutableNode) if neighbor != node && neighbor.network != null =>
val canConnect = !Loader.isModLoaded("ForgeMultipart") ||
val canConnect = !Mods.ForgeMultipart.isAvailable ||
(canConnectFromSide(tileEntity, side) && canConnectFromSide(neighborTileEntity, side.getOpposite))
val canConnectIM = canConnectFromSideIM(tileEntity, side) && canConnectFromSideIM(neighborTileEntity, side.getOpposite)
if (canConnect && canConnectIM) neighbor.connect(node)
@ -399,7 +400,7 @@ object Network extends api.detail.NetworkAPI {
tileEntity match {
case host: SidedEnvironment => Option(host.sidedNode(side))
case host: Environment => Some(host.node)
case host if Loader.isModLoaded("ForgeMultipart") => getMultiPartNode(host)
case host if Mods.ForgeMultipart.isAvailable => getMultiPartNode(host)
case _ => None
}

View File

@ -1,9 +1,7 @@
package li.cil.oc.util.mods
import cpw.mods.fml.common.Loader
object BundledRedstone {
def isAvailable = Loader.isModLoaded("RedLogic") ||
Loader.isModLoaded("MineFactoryReloaded") ||
(ProjectRed.isAvailable && ProjectRed.isAPIAvailable)
def isAvailable = Mods.RedLogic.isAvailable ||
Mods.MineFactoryReloaded.isAvailable ||
(Mods.ProjectRed.isAvailable && ProjectRed.isAPIAvailable)
}

View File

@ -1,6 +1,5 @@
package li.cil.oc.util.mods
import cpw.mods.fml.common.Loader
import dan200.computercraft.api.ComputerCraftAPI
import dan200.computercraft.api.filesystem.{IMount, IWritableMount}
import dan200.computercraft.api.media.IMedia
@ -20,7 +19,7 @@ object ComputerCraft {
})
}
def isDisk(stack: ItemStack) = Loader.isModLoaded("ComputerCraft") && stack.getItem.isInstanceOf[IMedia]
def isDisk(stack: ItemStack) = stack.getItem.isInstanceOf[IMedia]
def createDiskMount(stack: ItemStack, world: World) = if (isDisk(stack)) {
stack.getItem.asInstanceOf[IMedia].createDataMount(stack, world) match {

View File

@ -1,6 +1,5 @@
package li.cil.oc.util.mods
import cpw.mods.fml.common.Loader
import net.minecraft.item.ItemStack
object IndustrialCraft2 {
@ -13,7 +12,7 @@ object IndustrialCraft2 {
case _: Throwable => None
}
def isMiningLaser(stack: ItemStack) = stack != null && Loader.isModLoaded("IC2") && (miningLaser match {
def isMiningLaser(stack: ItemStack) = stack != null && Mods.IndustrialCraft2.isAvailable && (miningLaser match {
case Some(laser) => laser.itemID == stack.itemID
case _ => false
})

View File

@ -0,0 +1,30 @@
package li.cil.oc.util.mods
import cpw.mods.fml.common.versioning.VersionParser
import cpw.mods.fml.common.{ModAPIManager, Loader}
object Mods {
val BuildCraftPower = new Mod("BuildCraftAPI|power")
val ComputerCraft = new Mod("ComputerCraft@[1.6,1.50)")
val ForgeMultipart = new Mod("ForgeMultipart")
val GregTech = new Mod("gregtech_addon")
val IndustrialCraft2 = new Mod("IC2")
val MineFactoryReloaded = new Mod("MineFactoryReloaded")
val NotEnoughItems = new Mod("NotEnoughItems")
val PortalGun = new Mod("PortalGun")
val ProjectRed = new Mod("ProjRed|Transmission")
val RedLogic = new Mod("RedLogic")
val StargateTech2 = new Mod("StargateTech2@[0.6.0,)")
val ThermalExpansion = new Mod("ThermalExpansion")
val UniversalElectricity = new Mod("UniversalElectricity@[3.1,)")
class Mod(val id: String) {
val isAvailable = {
val version = VersionParser.parseVersionReference(id)
if (Loader.isModLoaded(version.getLabel))
version.containsVersion(Loader.instance.getIndexedModList.get(version.getLabel).getProcessedVersion)
else ModAPIManager.INSTANCE.hasAPI(version.getLabel)
}
}
}

View File

@ -1,7 +1,5 @@
package li.cil.oc.util.mods
import cpw.mods.fml.common.Loader
object NEI {
private lazy val layoutManagerClass = try {
Class.forName("codechicken.nei.LayoutManager")
@ -11,7 +9,7 @@ object NEI {
}
def isInputFocused =
Loader.isModLoaded("NotEnoughItems") && layoutManagerClass != null && (try {
Mods.NotEnoughItems.isAvailable && layoutManagerClass != null && (try {
layoutManagerClass.getDeclaredMethods.find(m => m.getName == "getInputFocused").fold(false)(m => m.invoke(null) != null)
}
catch {

View File

@ -1,6 +1,5 @@
package li.cil.oc.util.mods
import cpw.mods.fml.common.Loader
import net.minecraft.item.ItemStack
object PortalGun {
@ -13,7 +12,7 @@ object PortalGun {
def isPortalGun(stack: ItemStack) =
stack != null && stack.stackSize > 0 &&
Loader.isModLoaded("PortalGun") &&
Mods.PortalGun.isAvailable &&
portalGunClass != null &&
portalGunClass.isAssignableFrom(stack.getItem.getClass)

View File

@ -1,10 +1,7 @@
package li.cil.oc.util.mods
import cpw.mods.fml.common.Loader
import mrtjp.projectred.api.ProjectRedAPI
object ProjectRed {
def isAvailable = Loader.isModLoaded("ProjRed|Transmission")
def isAPIAvailable = classOf[ProjectRedAPI].getFields.exists(_.getName == "transmissionAPI")
}

View File

@ -1,24 +1,10 @@
package li.cil.oc.util.mods
import cpw.mods.fml.common.Loader
import cpw.mods.fml.common.versioning.{VersionParser, DefaultArtifactVersion}
import net.minecraft.world.World
import net.minecraftforge.common.MinecraftForge
import stargatetech2.api.bus.BusEvent.{RemoveFromNetwork, AddToNetwork}
object StargateTech2 {
def isAvailable = Loader.isModLoaded("StargateTech2") && (try {
val mod = Loader.instance.getIndexedModList.get("StargateTech2")
val have = new DefaultArtifactVersion(mod.getVersion)
val want = VersionParser.parseRange("[0.6.0,)")
want.containsVersion(have)
} catch {
case _: Throwable => false
})
}
object StargateTech2API {
def addDevice(world: World, x: Int, y: Int, z: Int) = MinecraftForge.EVENT_BUS.post(new AddToNetwork(world, x, y, z))
def removeDevice(world: World, x: Int, y: Int, z: Int) = MinecraftForge.EVENT_BUS.post(new RemoveFromNetwork(world, x, y, z))