diff --git a/src/main/java/com/raoulvdberge/refinedstorage/integration/oc/DriverNetwork.java b/src/main/java/com/raoulvdberge/refinedstorage/integration/oc/DriverNetwork.java new file mode 100644 index 000000000..108d9767d --- /dev/null +++ b/src/main/java/com/raoulvdberge/refinedstorage/integration/oc/DriverNetwork.java @@ -0,0 +1,23 @@ +package com.raoulvdberge.refinedstorage.integration.oc; + +import com.raoulvdberge.refinedstorage.proxy.CapabilityNetworkNodeProxy; +import li.cil.oc.api.driver.DriverBlock; +import li.cil.oc.api.network.ManagedEnvironment; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +public class DriverNetwork implements DriverBlock { + @Override + public boolean worksWith(World world, BlockPos pos, EnumFacing facing) { + TileEntity tile = world.getTileEntity(pos); + + return tile != null && tile.hasCapability(CapabilityNetworkNodeProxy.NETWORK_NODE_PROXY_CAPABILITY, facing); + } + + @Override + public ManagedEnvironment createEnvironment(World world, BlockPos pos, EnumFacing facing) { + return new EnvironmentNetwork(world.getTileEntity(pos).getCapability(CapabilityNetworkNodeProxy.NETWORK_NODE_PROXY_CAPABILITY, facing).getNode()); + } +} diff --git a/src/main/java/com/raoulvdberge/refinedstorage/integration/oc/EnvironmentNetwork.java b/src/main/java/com/raoulvdberge/refinedstorage/integration/oc/EnvironmentNetwork.java new file mode 100644 index 000000000..3cc2c9057 --- /dev/null +++ b/src/main/java/com/raoulvdberge/refinedstorage/integration/oc/EnvironmentNetwork.java @@ -0,0 +1,17 @@ +package com.raoulvdberge.refinedstorage.integration.oc; + +import com.raoulvdberge.refinedstorage.api.network.node.INetworkNode; +import li.cil.oc.api.Network; +import li.cil.oc.api.network.Visibility; +import li.cil.oc.api.prefab.AbstractManagedEnvironment; + +public class EnvironmentNetwork extends AbstractManagedEnvironment { + protected final INetworkNode node; + + public EnvironmentNetwork(INetworkNode node) { + this.node = node; + + setNode(Network.newNode(this, Visibility.Network).withComponent("refinedstorage", Visibility.Network).create()); + } +} + diff --git a/src/main/java/com/raoulvdberge/refinedstorage/integration/oc/IntegrationOC.java b/src/main/java/com/raoulvdberge/refinedstorage/integration/oc/IntegrationOC.java new file mode 100644 index 000000000..34458cb84 --- /dev/null +++ b/src/main/java/com/raoulvdberge/refinedstorage/integration/oc/IntegrationOC.java @@ -0,0 +1,16 @@ +package com.raoulvdberge.refinedstorage.integration.oc; + +import li.cil.oc.api.Driver; +import net.minecraftforge.fml.common.Loader; + +public final class IntegrationOC { + private static final String ID = "opencomputers"; + + public static boolean isLoaded() { + return Loader.isModLoaded(ID); + } + + public static void register() { + Driver.add(new DriverNetwork()); + } +} diff --git a/src/main/java/com/raoulvdberge/refinedstorage/proxy/ProxyCommon.java b/src/main/java/com/raoulvdberge/refinedstorage/proxy/ProxyCommon.java index 27b086561..9fe981210 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/proxy/ProxyCommon.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/proxy/ProxyCommon.java @@ -21,6 +21,7 @@ import com.raoulvdberge.refinedstorage.block.*; import com.raoulvdberge.refinedstorage.gui.GuiHandler; import com.raoulvdberge.refinedstorage.integration.craftingtweaks.IntegrationCraftingTweaks; import com.raoulvdberge.refinedstorage.integration.forgeenergy.ReaderWriterHandlerForgeEnergy; +import com.raoulvdberge.refinedstorage.integration.oc.IntegrationOC; import com.raoulvdberge.refinedstorage.integration.tesla.IntegrationTesla; import com.raoulvdberge.refinedstorage.item.*; import com.raoulvdberge.refinedstorage.network.*; @@ -818,7 +819,9 @@ public class ProxyCommon { } public void init(FMLInitializationEvent e) { - // NO OP + if (IntegrationOC.isLoaded()) { + IntegrationOC.register(); + } } public void postInit(FMLPostInitializationEvent e) {