From 2180fe4ef23e3580808bec1c10a1246bceb48e2e Mon Sep 17 00:00:00 2001 From: modmuss50 Date: Tue, 13 Feb 2018 23:56:38 +0000 Subject: [PATCH] Initial work on open computers support, more to come in the future. When things are a bit more final with it, I will add some docs onto the wiki pages. --- build.gradle | 5 ++ .../java/techreborn/compat/CompatManager.java | 2 + .../opencomputers/CompatOpenComputers.java | 30 +++++++ .../compat/opencomputers/DriverMachine.java | 82 +++++++++++++++++++ 4 files changed, 119 insertions(+) create mode 100644 src/main/java/techreborn/compat/opencomputers/CompatOpenComputers.java create mode 100644 src/main/java/techreborn/compat/opencomputers/DriverMachine.java diff --git a/build.gradle b/build.gradle index bc2f4e015..989116525 100644 --- a/build.gradle +++ b/build.gradle @@ -78,6 +78,10 @@ repositories { name "BuildCraft" artifactPattern "http://www.mod-buildcraft.com/releases/BuildCraft/[revision]/[module]-[revision].[ext]" } + maven { + name "OpenComputer" + url "http://maven.cil.li/" + } } configurations { @@ -126,6 +130,7 @@ dependencies { deobfCompile 'cofh:ThermalDynamics:1.12.2-2.3.9.3:universal', withoutOldJEI deobfCompile 'cofh:ThermalExpansion:1.12.2-5.3.9.9:universal', withoutOldJEI deobfCompile 'MCMultiPart2:MCMultiPart:2.4.1' + deobfCompile "li.cil.oc:OpenComputers:MC1.12.1-1.7.1+" } diff --git a/src/main/java/techreborn/compat/CompatManager.java b/src/main/java/techreborn/compat/CompatManager.java index feb6680c1..f842b6e78 100644 --- a/src/main/java/techreborn/compat/CompatManager.java +++ b/src/main/java/techreborn/compat/CompatManager.java @@ -36,6 +36,7 @@ import techreborn.compat.buildcraft.BuildcraftBuildersCompat; import techreborn.compat.buildcraft.BuildcraftCompat; import techreborn.compat.crafttweaker.CraftTweakerCompat; import techreborn.compat.ic2.RecipesIC2; +import techreborn.compat.opencomputers.CompatOpenComputers; import techreborn.compat.theoneprobe.TheOneProbeCompat; import techreborn.compat.thermalexpansion.RecipeThermalExpansion; import techreborn.compat.tinkers.CompatModuleTinkers; @@ -62,6 +63,7 @@ public class CompatManager { register(BuildcraftBuildersCompat.class, "buildcraftbuilders"); register(BuildcraftCompat.class, "buildcraftcore"); register(RecipeThermalExpansion.class, "thermalexpansion"); + register(CompatOpenComputers.class, "opencomputers"); } public void register(Class moduleClass, Object... objs) { diff --git a/src/main/java/techreborn/compat/opencomputers/CompatOpenComputers.java b/src/main/java/techreborn/compat/opencomputers/CompatOpenComputers.java new file mode 100644 index 000000000..ca21c0b02 --- /dev/null +++ b/src/main/java/techreborn/compat/opencomputers/CompatOpenComputers.java @@ -0,0 +1,30 @@ +package techreborn.compat.opencomputers; + +import li.cil.oc.api.Driver; +import net.minecraftforge.fml.common.event.FMLInitializationEvent; +import net.minecraftforge.fml.common.event.FMLPostInitializationEvent; +import net.minecraftforge.fml.common.event.FMLPreInitializationEvent; +import net.minecraftforge.fml.common.event.FMLServerStartingEvent; +import techreborn.compat.ICompatModule; + +public class CompatOpenComputers implements ICompatModule { + @Override + public void preInit(FMLPreInitializationEvent event) { + + } + + @Override + public void init(FMLInitializationEvent event) { + + } + + @Override + public void postInit(FMLPostInitializationEvent event) { + Driver.add(new DriverMachine()); + } + + @Override + public void serverStarting(FMLServerStartingEvent event) { + + } +} diff --git a/src/main/java/techreborn/compat/opencomputers/DriverMachine.java b/src/main/java/techreborn/compat/opencomputers/DriverMachine.java new file mode 100644 index 000000000..0f5060abd --- /dev/null +++ b/src/main/java/techreborn/compat/opencomputers/DriverMachine.java @@ -0,0 +1,82 @@ +package techreborn.compat.opencomputers; + +import li.cil.oc.api.Network; +import li.cil.oc.api.driver.DriverBlock; +import li.cil.oc.api.driver.NamedBlock; +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.network.Visibility; +import li.cil.oc.api.prefab.AbstractManagedEnvironment; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import reborncore.api.tile.IUpgradeable; +import reborncore.common.powerSystem.TilePowerAcceptor; + +public class DriverMachine implements DriverBlock { + @Override + public boolean worksWith(World world, BlockPos blockPos, EnumFacing enumFacing) { + return world.getTileEntity(blockPos) instanceof TilePowerAcceptor; + } + + @Override + public ManagedEnvironment createEnvironment(World world, BlockPos blockPos, EnumFacing enumFacing) { + return new MachineEnvironment((TilePowerAcceptor) world.getTileEntity(blockPos)); + } + + public static class MachineEnvironment extends AbstractManagedEnvironment implements NamedBlock { + TilePowerAcceptor machine; + + public MachineEnvironment(TilePowerAcceptor machine) { + this.machine = machine; + setNode(Network.newNode(this, Visibility.Network).withComponent("tr_machine", Visibility.Network).create()); + } + + @Callback(value = "getTeir", getter = true, doc = "Gets the current teir of the machine, this changes with upgrades") + public Object[] getTeir(Context context, Arguments arguments) throws Exception { + return getObjects(machine.getTier().name()); + } + + @Callback(value = "getEnergy", getter = true, doc = "Gets the currentally stored energy of the machine. in EU") + public Object[] getEnergy(Context context, Arguments arguments) throws Exception { + return getObjects(machine.getEnergy()); + } + + + @Callback(value = "getMaxPower", getter = true, doc = "Gets the maximum energy that can be stored in the machine. in EU") + public Object[] getMaxPower(Context context, Arguments arguments) throws Exception { + return getObjects(machine.getMaxPower()); + } + + @Callback(value = "getMaxInput", getter = true, doc = "Gets the maximum energy that can be inputted in to the machine. in EU") + public Object[] getMaxInput(Context context, Arguments arguments) throws Exception { + return getObjects(machine.getMaxInput()); + } + + @Callback(value = "getMaxOutput", getter = true, doc = "Gets the maximum energy that can be extracted from the machine. in EU") + public Object[] getMaxOutput(Context context, Arguments arguments) throws Exception { + return getObjects(machine.getMaxOutput()); + } + + @Callback(value = "canBeUprgaded", getter = true, doc = "Returns true if the machine can be upgraded") + public Object[] canBeUprgaded(Context context, Arguments arguments) throws Exception { + return getObjects(machine instanceof IUpgradeable && machine.canBeUpgraded()); + } + + private Object[] getObjects(Object... objects){ + return objects; + } + + @Override + public String preferredName() { + return "tr_machine"; + } + + @Override + public int priority() { + return Integer.MAX_VALUE; + } + } +}