Skip to content

Commit

Permalink
port CoFH Core drivers
Browse files Browse the repository at this point in the history
  • Loading branch information
asiekierka committed Jun 4, 2023
1 parent a7e869e commit 71a9abd
Show file tree
Hide file tree
Showing 9 changed files with 279 additions and 0 deletions.
7 changes: 7 additions & 0 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -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]"
Expand Down Expand Up @@ -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
Expand Down
4 changes: 4 additions & 0 deletions src/main/scala/li/cil/oc/integration/Mods.scala
Original file line number Diff line number Diff line change
Expand Up @@ -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,)")
Expand All @@ -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,
Expand Down Expand Up @@ -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"
Expand Down
Original file line number Diff line number Diff line change
@@ -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]
}
14 changes: 14 additions & 0 deletions src/main/scala/li/cil/oc/integration/cofh/item/ModCoFHItem.scala
Original file line number Diff line number Diff line change
@@ -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")
}
}
Original file line number Diff line number Diff line change
@@ -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<IEnergyInfo> {
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()};
}
}
}
Original file line number Diff line number Diff line change
@@ -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<IRedstoneControl> {
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};
}

}
}
}
Original file line number Diff line number Diff line change
@@ -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<ISecurable> {
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()};
}
}
}
Original file line number Diff line number Diff line change
@@ -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<ISteamInfo> {
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()};
}
}
}
Original file line number Diff line number Diff line change
@@ -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)
}
}

0 comments on commit 71a9abd

Please sign in to comment.