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

View File

@ -8,6 +8,7 @@ import li.cil.oc.util.PackedColor
import org.apache.commons.lang3.StringEscapeUtils import org.apache.commons.lang3.StringEscapeUtils
import scala.collection.convert.WrapAsScala._ import scala.collection.convert.WrapAsScala._
import scala.io.Source import scala.io.Source
import li.cil.oc.util.mods.Mods
class Settings(config: Config) { class Settings(config: Config) {
val itemId = config.getInt("ids.item") val itemId = config.getInt("ids.item")
@ -107,10 +108,10 @@ class Settings(config: Config) {
val pureIgnorePower = config.getBoolean("power.ignorePower") val pureIgnorePower = config.getBoolean("power.ignorePower")
val ignorePower = pureIgnorePower || val ignorePower = pureIgnorePower ||
(!ModAPIManager.INSTANCE.hasAPI("BuildCraftAPI|power") && (!Mods.BuildCraftPower.isAvailable &&
!Loader.isModLoaded("IC2") && !Mods.IndustrialCraft2.isAvailable &&
!Loader.isModLoaded("ThermalExpansion") && !Mods.ThermalExpansion.isAvailable &&
!Loader.isModLoaded("UniversalElectricity")) !Mods.UniversalElectricity.isAvailable)
val tickFrequency = config.getDouble("power.tickFrequency") max 1 val tickFrequency = config.getDouble("power.tickFrequency") max 1
val chargeRate = config.getDouble("power.chargerChargeRate") val chargeRate = config.getDouble("power.chargerChargeRate")
val generatorEfficiency = config.getDouble("power.generatorEfficiency") 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 cpw.mods.fml.common.network.{Player, IConnectionHandler}
import li.cil.oc.util.LuaStateFactory 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 li.cil.oc.{OpenComputers, UpdateCheck, Settings}
import net.minecraft.entity.player.EntityPlayerMP import net.minecraft.entity.player.EntityPlayerMP
import net.minecraft.network.packet.{Packet1Login, NetHandler} import net.minecraft.network.packet.{Packet1Login, NetHandler}
@ -17,7 +17,7 @@ object ConnectionHandler extends IConnectionHandler {
if (!LuaStateFactory.isAvailable) { if (!LuaStateFactory.isAvailable) {
p.sendChatToPlayer(ChatMessageComponent.createFromText("§aOpenComputers§f: ").addKey(Settings.namespace + "gui.Chat.WarningLuaFallback")) 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")) p.sendChatToPlayer(ChatMessageComponent.createFromText("§aOpenComputers§f: ").addKey(Settings.namespace + "gui.Chat.WarningProjectRed"))
} }
if (!Settings.get.pureIgnorePower && Settings.get.ignorePower) { if (!Settings.get.pureIgnorePower && Settings.get.ignorePower) {

View File

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

View File

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

View File

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

View File

@ -1,12 +1,13 @@
package li.cil.oc.common.block 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 cpw.mods.fml.relauncher.{Side, SideOnly}
import java.util import java.util
import java.util.Random import java.util.Random
import li.cil.oc.client.renderer.block.BlockRenderer 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.ItemCosts
import li.cil.oc.util.mods.Mods
import li.cil.oc.{Settings, CreativeTab} import li.cil.oc.{Settings, CreativeTab}
import mcp.mobius.waila.api.{IWailaConfigHandler, IWailaDataAccessor, IWailaBlock} import mcp.mobius.waila.api.{IWailaConfigHandler, IWailaDataAccessor, IWailaBlock}
import net.minecraft.block.Block import net.minecraft.block.Block
@ -23,7 +24,6 @@ import net.minecraftforge.common.ForgeDirection
import org.lwjgl.input import org.lwjgl.input
import powercrystals.minefactoryreloaded.api.rednet.{IRedNetNetworkContainer, RedNetConnectionType, IConnectableRedNet} import powercrystals.minefactoryreloaded.api.rednet.{IRedNetNetworkContainer, RedNetConnectionType, IConnectableRedNet}
import scala.collection.mutable import scala.collection.mutable
import li.cil.oc.common.tileentity.traits.{Rotatable, BundledRedstoneAware}
@Optional.Interface(iface = "mcp.mobius.waila.api.IWailaBlock", modid = "Waila") @Optional.Interface(iface = "mcp.mobius.waila.api.IWailaBlock", modid = "Waila")
class Delegator[Child <: Delegate](id: Int) extends Block(id, Material.iron) with IWailaBlock { 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) { 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 { world.getBlockTileEntity(x, y, z) match {
case t: BundledRedstoneAware => for (side <- ForgeDirection.VALID_DIRECTIONS) { case t: BundledRedstoneAware => for (side <- ForgeDirection.VALID_DIRECTIONS) {
Block.blocksList(world.getBlockId(x + side.offsetX, y + side.offsetY, z + side.offsetZ)) match { 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 package li.cil.oc.common.block
import cpw.mods.fml.common.{Optional, Loader} import cpw.mods.fml.common.Optional
import java.util import java.util
import li.cil.oc.common.{GuiType, tileentity} import li.cil.oc.common.{GuiType, tileentity}
import li.cil.oc.util.mods.Mods
import li.cil.oc.util.Tooltip import li.cil.oc.util.Tooltip
import li.cil.oc.{OpenComputers, Settings} import li.cil.oc.{OpenComputers, Settings}
import mcp.mobius.waila.api.{IWailaConfigHandler, IWailaDataAccessor} 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) { override def tooltipLines(stack: ItemStack, player: EntityPlayer, tooltip: util.List[String], advanced: Boolean) {
tooltip.addAll(Tooltip.get(unlocalizedName)) tooltip.addAll(Tooltip.get(unlocalizedName))
if (Loader.isModLoaded("ComputerCraft")) { if (Mods.ComputerCraft.isAvailable) {
tooltip.addAll(Tooltip.get(unlocalizedName + ".CC")) tooltip.addAll(Tooltip.get(unlocalizedName + ".CC"))
} }
} }

View File

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

View File

@ -1,8 +1,8 @@
package li.cil.oc.common.block package li.cil.oc.common.block
import cpw.mods.fml.common.Loader
import java.util import java.util
import li.cil.oc.common.tileentity import li.cil.oc.common.tileentity
import li.cil.oc.util.mods.Mods
import li.cil.oc.util.Tooltip import li.cil.oc.util.Tooltip
import li.cil.oc.{Items, Settings} import li.cil.oc.{Items, Settings}
import net.minecraft.client.renderer.texture.IconRegister 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) { override def tooltipLines(stack: ItemStack, player: EntityPlayer, tooltip: util.List[String], advanced: Boolean) {
tooltip.addAll(Tooltip.get(unlocalizedName)) tooltip.addAll(Tooltip.get(unlocalizedName))
if (Loader.isModLoaded("RedLogic")) { if (Mods.RedLogic.isAvailable) {
tooltip.addAll(Tooltip.get(Items.rs.unlocalizedName + ".RedLogic")) tooltip.addAll(Tooltip.get(Items.rs.unlocalizedName + ".RedLogic"))
} }
if (Loader.isModLoaded("MineFactoryReloaded")) { if (Mods.MineFactoryReloaded.isAvailable) {
tooltip.addAll(Tooltip.get(Items.rs.unlocalizedName + ".RedNet")) tooltip.addAll(Tooltip.get(Items.rs.unlocalizedName + ".RedNet"))
} }
} }

View File

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

View File

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

View File

@ -1,8 +1,8 @@
package li.cil.oc.common.item package li.cil.oc.common.item
import cpw.mods.fml.common.Loader
import java.util import java.util
import li.cil.oc.Settings import li.cil.oc.Settings
import li.cil.oc.util.mods.Mods
import li.cil.oc.util.Tooltip import li.cil.oc.util.Tooltip
import net.minecraft.client.renderer.texture.IconRegister import net.minecraft.client.renderer.texture.IconRegister
import net.minecraft.entity.player.EntityPlayer 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) { override def tooltipLines(stack: ItemStack, player: EntityPlayer, tooltip: util.List[String], advanced: Boolean) {
tooltip.addAll(Tooltip.get(unlocalizedName)) tooltip.addAll(Tooltip.get(unlocalizedName))
if (Loader.isModLoaded("RedLogic")) { if (Mods.RedLogic.isAvailable) {
tooltip.addAll(Tooltip.get(unlocalizedName + ".RedLogic")) tooltip.addAll(Tooltip.get(unlocalizedName + ".RedLogic"))
} }
if (Loader.isModLoaded("MineFactoryReloaded")) { if (Mods.MineFactoryReloaded.isAvailable) {
tooltip.addAll(Tooltip.get(unlocalizedName + ".RedNet")) tooltip.addAll(Tooltip.get(unlocalizedName + ".RedNet"))
} }
super.tooltipLines(stack, player, tooltip, advanced) super.tooltipLines(stack, player, tooltip, advanced)

View File

@ -1,11 +1,12 @@
package li.cil.oc.common.tileentity 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.lua.ILuaContext
import dan200.computercraft.api.peripheral.{IComputerAccess, IPeripheral} import dan200.computercraft.api.peripheral.{IComputerAccess, IPeripheral}
import li.cil.oc.api import li.cil.oc.api
import li.cil.oc.api.network.{Packet, Message} import li.cil.oc.api.network.{Packet, Message}
import li.cil.oc.server.PacketSender import li.cil.oc.server.PacketSender
import li.cil.oc.util.mods.Mods
import net.minecraftforge.common.ForgeDirection import net.minecraftforge.common.ForgeDirection
import scala.collection.mutable 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) { override protected def onPlugMessage(plug: Plug, message: Message) {
super.onPlugMessage(plug, message) super.onPlugMessage(plug, message)
if (message.name == "network.message" && Loader.isModLoaded("ComputerCraft")) { if (message.name == "network.message" && Mods.ComputerCraft.isAvailable) {
message.data match { message.data match {
case Array(packet: Packet) => case Array(packet: Packet) =>
packet.data.headOption match { packet.data.headOption match {

View File

@ -1,8 +1,8 @@
package li.cil.oc.common.tileentity package li.cil.oc.common.tileentity
import cpw.mods.fml.common.Loader
import li.cil.oc.api.network._ import li.cil.oc.api.network._
import li.cil.oc.util.ExtendedNBT._ import li.cil.oc.util.ExtendedNBT._
import li.cil.oc.util.mods.Mods
import li.cil.oc.{api, Settings} import li.cil.oc.{api, Settings}
import net.minecraft.entity.player.EntityPlayer import net.minecraft.entity.player.EntityPlayer
import net.minecraft.nbt.NBTTagCompound import net.minecraft.nbt.NBTTagCompound
@ -38,7 +38,7 @@ class WirelessRouter extends Router with WirelessEndpoint {
override def receivePacket(packet: Packet, distance: Double) { override def receivePacket(packet: Packet, distance: Double) {
tryEnqueuePacket(ForgeDirection.UNKNOWN, packet) tryEnqueuePacket(ForgeDirection.UNKNOWN, packet)
if (Loader.isModLoaded("ComputerCraft")) { if (Mods.ComputerCraft.isAvailable) {
packet.data.headOption match { packet.data.headOption match {
case Some(answerPort: java.lang.Double) => queueMessage(packet.source, packet.destination, packet.port, answerPort.toInt, packet.data.drop(1)) 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) 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.api.network.ManagedEnvironment
import li.cil.oc.server.component import li.cil.oc.server.component
import li.cil.oc.server.{PacketSender => ServerPacketSender} 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 net.minecraft.nbt.NBTTagCompound
import stargatetech2.api.bus.{IBusInterface, IBusDevice} import stargatetech2.api.bus.{IBusInterface, IBusDevice}
import stargatetech2.api.StargateTechAPI import stargatetech2.api.StargateTechAPI
@ -19,7 +19,8 @@ import stargatetech2.api.StargateTechAPI
// probably is something derping up in the class loader... the thing that // 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 // confuses me the most, though, is that it apparently works for redstone and
// the CC interface, so... yeah. I'm out of ideas. // 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 var _isAbstractBusAvailable: Boolean = _
protected lazy val fakeInterface = Array[AnyRef](StargateTechAPI.api.getFactory.getIBusInterface(this, null)) 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) = { def isAbstractBusAvailable_=(value: Boolean) = {
if (value != isAbstractBusAvailable) { if (value != isAbstractBusAvailable) {
_isAbstractBusAvailable = value _isAbstractBusAvailable = value
if (isServer && StargateTech2.isAvailable) { if (isServer && Mods.StargateTech2.isAvailable) {
if (isAbstractBusAvailable) StargateTech2API.addDevice(world, x, y, z) if (isAbstractBusAvailable) StargateTech2.addDevice(world, x, y, z)
else StargateTech2API.removeDevice(world, x, y, z) else StargateTech2.removeDevice(world, x, y, z)
} }
world.notifyBlocksOfNeighborChange(x, y, z, block.blockID) world.notifyBlocksOfNeighborChange(x, y, z, block.blockID)
if (isServer) ServerPacketSender.sendAbstractBusState(this) 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 cpw.mods.fml.common.{Loader, Optional}
import li.cil.oc.Settings import li.cil.oc.Settings
import li.cil.oc.util.ExtendedNBT._ 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 mods.immibis.redlogic.api.wiring.{IInsulatedRedstoneWire, IBundledUpdatable, IBundledEmitter}
import mrtjp.projectred.api.{ProjectRedAPI, IBundledTile} import mrtjp.projectred.api.{ProjectRedAPI, IBundledTile}
import net.minecraft.block.Block 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)) { def bundledOutput(side: ForgeDirection, color: Int, value: Int): Unit = if (value != bundledOutput(side, color)) {
_bundledOutput(toLocal(side).ordinal())(color) = value _bundledOutput(toLocal(side).ordinal())(color) = value
if (Loader.isModLoaded("MineFactoryReloaded")) { if (Mods.MineFactoryReloaded.isAvailable) {
val nx = x + side.offsetX val nx = x + side.offsetX
val ny = y + side.offsetY val ny = y + side.offsetY
val nz = z + side.offsetZ val nz = z + side.offsetZ
@ -123,7 +123,7 @@ trait BundledRedstoneAware extends RedstoneAware with IBundledEmitter with IBund
// ----------------------------------------------------------------------- // // ----------------------------------------------------------------------- //
protected def computeBundledInput(side: ForgeDirection): Array[Int] = { protected def computeBundledInput(side: ForgeDirection): Array[Int] = {
val redLogic = if (Loader.isModLoaded("RedLogic")) { val redLogic = if (Mods.RedLogic.isAvailable) {
world.getBlockTileEntity( world.getBlockTileEntity(
x + side.offsetX, x + side.offsetX,
y + side.offsetY, y + side.offsetY,
@ -144,7 +144,7 @@ trait BundledRedstoneAware extends RedstoneAware with IBundledEmitter with IBund
case _ => null case _ => null
} }
} else 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)) Option(ProjectRedAPI.transmissionAPI.getBundledInput(world, x, y, z, side.ordinal)).fold(null: Array[Int])(_.map(_ & 0xFF))
} else null } else null
(redLogic, projectRed) match { (redLogic, projectRed) match {
@ -156,7 +156,7 @@ trait BundledRedstoneAware extends RedstoneAware with IBundledEmitter with IBund
} }
override protected def onRedstoneOutputEnabledChanged() { override protected def onRedstoneOutputEnabledChanged() {
if (Loader.isModLoaded("MineFactoryReloaded")) { if (Mods.MineFactoryReloaded.isAvailable) {
for (side <- ForgeDirection.VALID_DIRECTIONS) { for (side <- ForgeDirection.VALID_DIRECTIONS) {
val nx = x + side.offsetX val nx = x + side.offsetX
val ny = y + side.offsetY val ny = y + side.offsetY

View File

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

View File

@ -1,16 +1,17 @@
package li.cil.oc.common.tileentity.traits.power 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 ic2.api.energy.tile.IEnergySink
import li.cil.oc.server.TickHandler import li.cil.oc.server.TickHandler
import li.cil.oc.Settings import li.cil.oc.Settings
import li.cil.oc.util.mods.Mods
import net.minecraftforge.common.ForgeDirection import net.minecraftforge.common.ForgeDirection
@Optional.Interface(iface = "ic2.api.energy.tile.IEnergySink", modid = "IC2") @Optional.Interface(iface = "ic2.api.energy.tile.IEnergySink", modid = "IC2")
trait IndustrialCraft2 extends Common with IEnergySink { trait IndustrialCraft2 extends Common with IEnergySink {
var addedToPowerGrid = false 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 package li.cil.oc.server.component.robot
import cpw.mods.fml.common.Loader
import li.cil.oc.common.tileentity import li.cil.oc.common.tileentity
import li.cil.oc.Settings 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.block.{BlockPistonBase, BlockFluid, Block}
import net.minecraft.entity.item.EntityItem import net.minecraft.entity.item.EntityItem
import net.minecraft.entity.player.{EnumStatus, EntityPlayer} import net.minecraft.entity.player.{EnumStatus, EntityPlayer}
@ -327,7 +326,7 @@ class Player(val robot: tileentity.Robot) extends EntityPlayer(robot.world, Sett
} }
else 0 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))) UniversalElectricity.chargeItem(stack, repair(UniversalElectricity.getEnergyInItem(oldStack), UniversalElectricity.getEnergyInItem(stack)))
} }
else if (stack.isItemStackDamageable) { 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.Items
import li.cil.oc.api.driver.Slot import li.cil.oc.api.driver.Slot
import li.cil.oc.server.component 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.item.ItemStack
import net.minecraft.tileentity.{TileEntity => MCTileEntity} import net.minecraft.tileentity.{TileEntity => MCTileEntity}
import stargatetech2.api.bus.IBusDevice import stargatetech2.api.bus.IBusDevice
@ -11,7 +11,7 @@ import stargatetech2.api.bus.IBusDevice
object AbstractBusCard extends Item { object AbstractBusCard extends Item {
override def worksWith(stack: ItemStack) = isOneOf(stack, Items.abstractBus) 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 device: IBusDevice => new component.AbstractBus(device)
case _ => null case _ => null
} }

View File

@ -1,12 +1,11 @@
package li.cil.oc.server.driver.item package li.cil.oc.server.driver.item
import cpw.mods.fml.common.Loader
import dan200.computercraft.api.media.IMedia import dan200.computercraft.api.media.IMedia
import li.cil.oc import li.cil.oc
import li.cil.oc.api.driver.Slot import li.cil.oc.api.driver.Slot
import li.cil.oc.api.fs.Label import li.cil.oc.api.fs.Label
import li.cil.oc.common.item.{FloppyDisk, HardDiskDrive} 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 li.cil.oc.{Settings, Items}
import net.minecraft.item.ItemStack import net.minecraft.item.ItemStack
import net.minecraft.nbt.NBTTagCompound import net.minecraft.nbt.NBTTagCompound
@ -15,10 +14,10 @@ import net.minecraft.tileentity.TileEntity
object FileSystem extends Item { object FileSystem extends Item {
override def worksWith(stack: ItemStack) = override def worksWith(stack: ItemStack) =
isOneOf(stack, Items.hdd1, Items.hdd2, Items.hdd3, Items.floppyDisk) || 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) = 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 address = addressFromTag(dataTag(stack))
val mount = ComputerCraft.createDiskMount(stack, container.getWorldObj) val mount = ComputerCraft.createDiskMount(stack, container.getWorldObj)
Option(oc.api.FileSystem.asManagedEnvironment(mount, new ComputerCraftLabel(stack), container)) match { Option(oc.api.FileSystem.asManagedEnvironment(mount, new ComputerCraftLabel(stack), container)) match {
@ -35,7 +34,7 @@ object FileSystem extends Item {
} }
override def slot(stack: ItemStack) = 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 { else Items.multi.subItem(stack) match {
case Some(hdd: HardDiskDrive) => Slot.HardDiskDrive case Some(hdd: HardDiskDrive) => Slot.HardDiskDrive
case Some(disk: FloppyDisk) => Slot.Disk 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.lib.vec.Cuboid6
import codechicken.multipart.{TFacePart, JNormalOcclusion, NormalOcclusionTest, TileMultipart} 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 cpw.mods.fml.relauncher.Side
import li.cil.oc.api.network import li.cil.oc.api.network
import li.cil.oc.api.network.{Node => ImmutableNode, WirelessEndpoint, SidedEnvironment, Environment, Visibility} 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.multipart.CablePart
import li.cil.oc.common.tileentity import li.cil.oc.common.tileentity
import li.cil.oc.server.network.{Node => MutableNode} import li.cil.oc.server.network.{Node => MutableNode}
import li.cil.oc.util.mods.Mods
import li.cil.oc.{Settings, api} import li.cil.oc.{Settings, api}
import net.minecraft.nbt._ import net.minecraft.nbt._
import net.minecraft.tileentity.TileEntity import net.minecraft.tileentity.TileEntity
@ -374,7 +375,7 @@ object Network extends api.detail.NetworkAPI {
case Some(node: MutableNode) => case Some(node: MutableNode) =>
neighborNode match { neighborNode match {
case Some(neighbor: MutableNode) if neighbor != node && neighbor.network != null => 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)) (canConnectFromSide(tileEntity, side) && canConnectFromSide(neighborTileEntity, side.getOpposite))
val canConnectIM = canConnectFromSideIM(tileEntity, side) && canConnectFromSideIM(neighborTileEntity, side.getOpposite) val canConnectIM = canConnectFromSideIM(tileEntity, side) && canConnectFromSideIM(neighborTileEntity, side.getOpposite)
if (canConnect && canConnectIM) neighbor.connect(node) if (canConnect && canConnectIM) neighbor.connect(node)
@ -399,7 +400,7 @@ object Network extends api.detail.NetworkAPI {
tileEntity match { tileEntity match {
case host: SidedEnvironment => Option(host.sidedNode(side)) case host: SidedEnvironment => Option(host.sidedNode(side))
case host: Environment => Some(host.node) case host: Environment => Some(host.node)
case host if Loader.isModLoaded("ForgeMultipart") => getMultiPartNode(host) case host if Mods.ForgeMultipart.isAvailable => getMultiPartNode(host)
case _ => None case _ => None
} }

View File

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

View File

@ -1,6 +1,5 @@
package li.cil.oc.util.mods package li.cil.oc.util.mods
import cpw.mods.fml.common.Loader
import dan200.computercraft.api.ComputerCraftAPI import dan200.computercraft.api.ComputerCraftAPI
import dan200.computercraft.api.filesystem.{IMount, IWritableMount} import dan200.computercraft.api.filesystem.{IMount, IWritableMount}
import dan200.computercraft.api.media.IMedia 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)) { def createDiskMount(stack: ItemStack, world: World) = if (isDisk(stack)) {
stack.getItem.asInstanceOf[IMedia].createDataMount(stack, world) match { stack.getItem.asInstanceOf[IMedia].createDataMount(stack, world) match {

View File

@ -1,6 +1,5 @@
package li.cil.oc.util.mods package li.cil.oc.util.mods
import cpw.mods.fml.common.Loader
import net.minecraft.item.ItemStack import net.minecraft.item.ItemStack
object IndustrialCraft2 { object IndustrialCraft2 {
@ -13,7 +12,7 @@ object IndustrialCraft2 {
case _: Throwable => None 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 Some(laser) => laser.itemID == stack.itemID
case _ => false 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 package li.cil.oc.util.mods
import cpw.mods.fml.common.Loader
object NEI { object NEI {
private lazy val layoutManagerClass = try { private lazy val layoutManagerClass = try {
Class.forName("codechicken.nei.LayoutManager") Class.forName("codechicken.nei.LayoutManager")
@ -11,7 +9,7 @@ object NEI {
} }
def isInputFocused = 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) layoutManagerClass.getDeclaredMethods.find(m => m.getName == "getInputFocused").fold(false)(m => m.invoke(null) != null)
} }
catch { catch {

View File

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

View File

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

View File

@ -1,24 +1,10 @@
package li.cil.oc.util.mods 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.minecraft.world.World
import net.minecraftforge.common.MinecraftForge import net.minecraftforge.common.MinecraftForge
import stargatetech2.api.bus.BusEvent.{RemoveFromNetwork, AddToNetwork} import stargatetech2.api.bus.BusEvent.{RemoveFromNetwork, AddToNetwork}
object StargateTech2 { 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 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)) def removeDevice(world: World, x: Int, y: Int, z: Int) = MinecraftForge.EVENT_BUS.post(new RemoveFromNetwork(world, x, y, z))