@Override
  public boolean canExtractItem(int slot, ItemStack is, int side) {
    SocketModule m = getSide(ForgeDirection.getOrientation(side));
    if (m != null && m.canDirectlyExtractItems(configs[side], this)) {
      int[] slots = getAccessibleSlotsFromSide(side);
      if (slots.length > 0) {
        if (slots[0] == slot) return true;
      }
    }

    return false;
  }
  @Override
  public int[] getAccessibleSlotsFromSide(int side) {
    int[] result = new int[1];
    SocketModule m = getSide(ForgeDirection.getOrientation(side));

    if (m != null
        && (m.canDirectlyExtractItems(configs[side], this)
            || m.canDirectlyInsertItems(configs[side], this))) {
      SideConfig config = configs[side];
      if (config.inventory >= 0 && config.inventory <= 2) {
        result[0] = config.inventory;
      } else {
        result = new int[] {};
      }
    } else {
      result = new int[] {};
    }

    return result;
  }