package mekanism.common.integration;
import java.util.Arrays;
import java.util.Locale;
import li.cil.oc.api.Network;
import li.cil.oc.api.driver.NamedBlock;
import li.cil.oc.api.machine.Arguments;
import li.cil.oc.api.machine.Context;
import li.cil.oc.api.network.ManagedPeripheral;
import li.cil.oc.api.network.Visibility;
import li.cil.oc.api.prefab.DriverSidedTileEntity;
import li.cil.oc.api.prefab.ManagedEnvironment;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
/**
* Created by aidancbrady on 7/20/15.
*/
public class OCDriver extends DriverSidedTileEntity
{
@Override
public Class<?> getTileEntityClass()
{
return IComputerIntegration.class;
}
@Override
public ManagedEnvironment createEnvironment(World world, BlockPos pos, EnumFacing side)
{
TileEntity tile = world.getTileEntity(pos);
if(tile instanceof IComputerIntegration)
{
return new OCManagedEnvironment((IComputerIntegration)tile);
}
return null;
}
public class OCManagedEnvironment extends ManagedEnvironment implements NamedBlock, ManagedPeripheral
{
public IComputerIntegration computerTile;
public String name;
public OCManagedEnvironment(IComputerIntegration tile)
{
computerTile = tile;
name = tile.getName().toLowerCase(Locale.ENGLISH).replace(" ", "_");
setNode(Network.newNode(this, Visibility.Network).withComponent(name, Visibility.Network).create());
}
@Override
public String[] methods()
{
return computerTile.getMethods();
}
@Override
public Object[] invoke(String method, Context context, Arguments args) throws Exception
{
return computerTile.invoke(Arrays.asList(methods()).indexOf(method), args.toArray());
}
@Override
public int priority()
{
return 4;
}
@Override
public String preferredName()
{
return name;
}
}
}