diff --git a/build.gradle b/build.gradle index 082d1b05f7..9e08f0eb82 100644 --- a/build.gradle +++ b/build.gradle @@ -145,6 +145,12 @@ repositories { artifact() } } + maven { + url "https://cursemaven.com" + content { + includeGroup "curse.maven" + } + } ivy { name 'asie dependency mirror' artifactPattern "http://asie.pl/javadeps/[module]-[revision](-[classifier]).[ext]" @@ -177,6 +183,7 @@ dependencies { /* compileOnly fg.deobf("dan200.computercraft:ComputerCraft:${config.cc.version}") */ compileOnly fg.deobf("org.squiddev:cc-tweaked-1.12.2:${config.cctweaked.version}") compileOnly fg.deobf("charset:Charset:${config.charset.version}:api") + compileOnly fg.deobf("curse.maven:cofh-core-69162:2920433") /* CoFHCore */ provided fg.deobf("appeng:appliedenergistics2:${config.ae2.version}") { transitive = false diff --git a/src/main/scala/li/cil/oc/integration/Mods.scala b/src/main/scala/li/cil/oc/integration/Mods.scala index d961d8d763..05a15d6743 100644 --- a/src/main/scala/li/cil/oc/integration/Mods.scala +++ b/src/main/scala/li/cil/oc/integration/Mods.scala @@ -19,6 +19,7 @@ object Mods { def All: ArrayBuffer[ModBase] = knownMods.clone() val AppliedEnergistics2 = new ClassBasedMod(IDs.AppliedEnergistics2, "appeng.api.storage.channels.IItemStorageChannel") + val CoFHCore = new SimpleMod(IDs.CoFHCore) val ComputerCraft = new SimpleMod(IDs.ComputerCraft) val ExtraCells = new SimpleMod(IDs.ExtraCells, version = "@[2.5.2,)") val Forestry = new SimpleMod(IDs.Forestry, version = "@[5.2,)") @@ -43,6 +44,8 @@ object Mods { val Proxies = Array( integration.appeng.ModAppEng, + integration.cofh.item.ModCoFHItem, + integration.cofh.tileentity.ModCoFHTileEntity, integration.ec.ModExtraCells, integration.forestry.ModForestry, integration.ic2.ModIndustrialCraft2, @@ -86,6 +89,7 @@ object Mods { object IDs { final val AppliedEnergistics2 = "appliedenergistics2" + final val CoFHCore = "cofhcore" final val ComputerCraft = "computercraft" final val ExtraCells = "extracells" final val Forestry = "forestry" diff --git a/src/main/scala/li/cil/oc/integration/cofh/item/EventHandlerCoFH.scala b/src/main/scala/li/cil/oc/integration/cofh/item/EventHandlerCoFH.scala new file mode 100644 index 0000000000..d41e88aaa6 --- /dev/null +++ b/src/main/scala/li/cil/oc/integration/cofh/item/EventHandlerCoFH.scala @@ -0,0 +1,22 @@ +package li.cil.oc.integration.cofh.item + +import cofh.api.item.IToolHammer +import net.minecraft.entity.player.EntityPlayer +import net.minecraft.item.ItemStack +import net.minecraft.util.math.BlockPos + +object EventHandlerCoFH { + def useWrench(player: EntityPlayer, pos: BlockPos, changeDurability: Boolean): Boolean = { + player.getHeldItemMainhand.getItem match { + case wrench: IToolHammer => + if (changeDurability) { + wrench.toolUsed(player.getHeldItemMainhand, player, pos) + true + } + else wrench.isUsable(player.getHeldItemMainhand, player, pos) + case _ => false + } + } + + def isWrench(stack: ItemStack): Boolean = stack.getItem.isInstanceOf[IToolHammer] +} diff --git a/src/main/scala/li/cil/oc/integration/cofh/item/ModCoFHItem.scala b/src/main/scala/li/cil/oc/integration/cofh/item/ModCoFHItem.scala new file mode 100644 index 0000000000..b4155d6735 --- /dev/null +++ b/src/main/scala/li/cil/oc/integration/cofh/item/ModCoFHItem.scala @@ -0,0 +1,14 @@ +package li.cil.oc.integration.cofh.item + +import li.cil.oc.api +import li.cil.oc.integration.ModProxy +import li.cil.oc.integration.Mods + +object ModCoFHItem extends ModProxy { + override def getMod = Mods.CoFHCore + + override def initialize(): Unit = { + api.IMC.registerWrenchTool("li.cil.oc.integration.cofh.item.EventHandlerCoFH.useWrench") + api.IMC.registerWrenchToolCheck("li.cil.oc.integration.cofh.item.EventHandlerCoFH.isWrench") + } +} diff --git a/src/main/scala/li/cil/oc/integration/cofh/tileentity/DriverEnergyInfo.java b/src/main/scala/li/cil/oc/integration/cofh/tileentity/DriverEnergyInfo.java new file mode 100644 index 0000000000..495f13e55d --- /dev/null +++ b/src/main/scala/li/cil/oc/integration/cofh/tileentity/DriverEnergyInfo.java @@ -0,0 +1,45 @@ +package li.cil.oc.integration.cofh.tileentity; + +import cofh.api.tileentity.IEnergyInfo; +import li.cil.oc.api.machine.Arguments; +import li.cil.oc.api.machine.Callback; +import li.cil.oc.api.machine.Context; +import li.cil.oc.api.network.ManagedEnvironment; +import li.cil.oc.api.prefab.DriverSidedTileEntity; +import li.cil.oc.integration.ManagedTileEntityEnvironment; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +public final class DriverEnergyInfo extends DriverSidedTileEntity { + @Override + public Class getTileEntityClass() { + return IEnergyInfo.class; + } + + @Override + public ManagedEnvironment createEnvironment(final World world, final BlockPos pos, final EnumFacing side) { + return new Environment((IEnergyInfo) world.getTileEntity(pos)); + } + + public static final class Environment extends ManagedTileEntityEnvironment { + public Environment(final IEnergyInfo tileEntity) { + super(tileEntity, "energy_info"); + } + + @Callback(doc = "function():number -- Returns the amount of stored energy.") + public Object[] getEnergy(final Context context, final Arguments args) { + return new Object[]{tileEntity.getInfoEnergyStored()}; + } + + @Callback(doc = "function():number -- Returns the energy per tick.") + public Object[] getEnergyPerTick(final Context context, final Arguments args) { + return new Object[]{tileEntity.getInfoEnergyPerTick()}; + } + + @Callback(doc = "function():number -- Returns the maximum energy per tick.") + public Object[] getMaxEnergyPerTick(final Context context, final Arguments args) { + return new Object[]{tileEntity.getInfoMaxEnergyPerTick()}; + } + } +} diff --git a/src/main/scala/li/cil/oc/integration/cofh/tileentity/DriverRedstoneControl.java b/src/main/scala/li/cil/oc/integration/cofh/tileentity/DriverRedstoneControl.java new file mode 100644 index 0000000000..23d015d02e --- /dev/null +++ b/src/main/scala/li/cil/oc/integration/cofh/tileentity/DriverRedstoneControl.java @@ -0,0 +1,76 @@ +package li.cil.oc.integration.cofh.tileentity; + +import cofh.api.tileentity.IRedstoneControl; +import li.cil.oc.api.machine.Arguments; +import li.cil.oc.api.machine.Callback; +import li.cil.oc.api.machine.Context; +import li.cil.oc.api.network.ManagedEnvironment; +import li.cil.oc.api.prefab.DriverSidedTileEntity; +import li.cil.oc.integration.ManagedTileEntityEnvironment; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +public final class DriverRedstoneControl extends DriverSidedTileEntity { + @Override + public Class getTileEntityClass() { + return IRedstoneControl.class; + } + + @Override + public ManagedEnvironment createEnvironment(final World world, final BlockPos pos, final EnumFacing side) { + return new Environment((IRedstoneControl) world.getTileEntity(pos)); + } + + public static final class Environment extends ManagedTileEntityEnvironment { + public Environment(final IRedstoneControl tileEntity) { + super(tileEntity, "redstone_control"); + } + + @Callback(doc = "function():boolean -- Returns whether the control is disabled.") + public Object[] getControlDisable(final Context context, final Arguments args) { + return new Object[]{tileEntity.getControl() == IRedstoneControl.ControlMode.DISABLED}; + } + + @Callback(doc = "function():int -- Returns the control status.") + public Object[] getControlSetting(final Context context, final Arguments args) { + return new Object[]{tileEntity.getControl().ordinal()}; + + } + + @Callback(doc = "function():string -- Returns the control status.") + public Object[] getControlSettingName(final Context context, final Arguments args) { + return new Object[]{tileEntity.getControl().name()}; + + } + + @Callback(doc = "function(int):string -- Returns the name of the given control") + public Object[] getControlName(final Context context, final Arguments args) { + IRedstoneControl.ControlMode m = IRedstoneControl.ControlMode.values()[args.checkInteger(0)]; + return new Object[]{m.name()}; + } + + @Callback(doc = "function():boolean -- Returns whether the component is powered.") + public Object[] isPowered(final Context context, final Arguments args) { + return new Object[]{tileEntity.isPowered()}; + } + + @Callback(doc = "function():boolean -- Sets whether the control tp disabled.") + public Object[] setControlDisable(final Context context, final Arguments args) { + tileEntity.setControl(IRedstoneControl.ControlMode.DISABLED); + return new Object[]{true}; + } + + @Callback(doc = "function(state:int):boolean -- Sets the control status to the given value.") + public Object[] setControlSetting(final Context context, final Arguments args) { + if (args.isInteger(0)) { + tileEntity.setControl(IRedstoneControl.ControlMode.values()[args.checkInteger(0)]); + return new Object[]{true}; + } else { + tileEntity.setControl(IRedstoneControl.ControlMode.valueOf(args.checkString(0))); + return new Object[]{true}; + } + + } + } +} diff --git a/src/main/scala/li/cil/oc/integration/cofh/tileentity/DriverSecureTile.java b/src/main/scala/li/cil/oc/integration/cofh/tileentity/DriverSecureTile.java new file mode 100644 index 0000000000..fff4039d3e --- /dev/null +++ b/src/main/scala/li/cil/oc/integration/cofh/tileentity/DriverSecureTile.java @@ -0,0 +1,54 @@ +package li.cil.oc.integration.cofh.tileentity; + +import cofh.api.core.ISecurable; +import com.mojang.authlib.GameProfile; +import li.cil.oc.api.machine.Arguments; +import li.cil.oc.api.machine.Callback; +import li.cil.oc.api.machine.Context; +import li.cil.oc.api.network.ManagedEnvironment; +import li.cil.oc.api.prefab.DriverSidedTileEntity; +import li.cil.oc.integration.ManagedTileEntityEnvironment; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.server.MinecraftServer; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraftforge.common.util.FakePlayer; +import net.minecraftforge.common.util.FakePlayerFactory; +import net.minecraftforge.fml.common.FMLCommonHandler; +import org.apache.commons.lang3.text.WordUtils; + +public final class DriverSecureTile extends DriverSidedTileEntity { + @Override + public Class getTileEntityClass() { + return ISecurable.class; + } + + @Override + public ManagedEnvironment createEnvironment(final World world, final BlockPos pos, final EnumFacing side) { + return new Environment((ISecurable) world.getTileEntity(pos)); + } + + public static final class Environment extends ManagedTileEntityEnvironment { + public Environment(final ISecurable tileEntity) { + super(tileEntity, "secure_tile"); + } + + @Callback(doc = "function(name:string):boolean -- Returns whether the player with the given name can access the component") + public Object[] canPlayerAccess(final Context context, final Arguments args) { + MinecraftServer server = FMLCommonHandler.instance().getMinecraftServerInstance(); + EntityPlayerMP player = server.getPlayerList().getPlayerByUsername(args.checkString(0)); + return new Object[]{player != null && tileEntity.canPlayerAccess(player)}; + } + + @Callback(doc = "function():string -- Returns the type of the access.") + public Object[] getAccess(final Context context, final Arguments args) { + return new Object[]{WordUtils.capitalize(tileEntity.getAccess().name())}; + } + + @Callback(doc = "function():string -- Returns the name of the owner.") + public Object[] getOwnerName(final Context context, final Arguments args) { + return new Object[]{tileEntity.getOwnerName()}; + } + } +} diff --git a/src/main/scala/li/cil/oc/integration/cofh/tileentity/DriverSteamInfo.java b/src/main/scala/li/cil/oc/integration/cofh/tileentity/DriverSteamInfo.java new file mode 100644 index 0000000000..25496563cb --- /dev/null +++ b/src/main/scala/li/cil/oc/integration/cofh/tileentity/DriverSteamInfo.java @@ -0,0 +1,41 @@ +package li.cil.oc.integration.cofh.tileentity; + +import cofh.api.tileentity.IEnergyInfo; +import cofh.api.tileentity.ISteamInfo; +import li.cil.oc.api.machine.Arguments; +import li.cil.oc.api.machine.Callback; +import li.cil.oc.api.machine.Context; +import li.cil.oc.api.network.ManagedEnvironment; +import li.cil.oc.api.prefab.DriverSidedTileEntity; +import li.cil.oc.integration.ManagedTileEntityEnvironment; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +public final class DriverSteamInfo extends DriverSidedTileEntity { + @Override + public Class getTileEntityClass() { + return ISteamInfo.class; + } + + @Override + public ManagedEnvironment createEnvironment(final World world, final BlockPos pos, final EnumFacing side) { + return new Environment((ISteamInfo) world.getTileEntity(pos)); + } + + public static final class Environment extends ManagedTileEntityEnvironment { + public Environment(final ISteamInfo tileEntity) { + super(tileEntity, "steam_info"); + } + + @Callback(doc = "function():number -- Returns the steam per tick.") + public Object[] getSteamPerTick(final Context context, final Arguments args) { + return new Object[]{tileEntity.getInfoSteamPerTick()}; + } + + @Callback(doc = "function():number -- Returns the maximum steam per tick.") + public Object[] getMaxSteamPerTick(final Context context, final Arguments args) { + return new Object[]{tileEntity.getInfoMaxSteamPerTick()}; + } + } +} diff --git a/src/main/scala/li/cil/oc/integration/cofh/tileentity/ModCoFHTileEntity.scala b/src/main/scala/li/cil/oc/integration/cofh/tileentity/ModCoFHTileEntity.scala new file mode 100644 index 0000000000..0728bd514a --- /dev/null +++ b/src/main/scala/li/cil/oc/integration/cofh/tileentity/ModCoFHTileEntity.scala @@ -0,0 +1,16 @@ +package li.cil.oc.integration.cofh.tileentity + +import li.cil.oc.api.Driver +import li.cil.oc.integration.ModProxy +import li.cil.oc.integration.Mods + +object ModCoFHTileEntity extends ModProxy { + override def getMod = Mods.CoFHCore + + override def initialize() { + Driver.add(new DriverEnergyInfo) + Driver.add(new DriverRedstoneControl) + Driver.add(new DriverSecureTile) + Driver.add(new DriverSteamInfo) + } +} \ No newline at end of file