Minecraft PE with OUYA Controller

controllersminecraft-bedrock-edition

In the Android Bedrock version of Minecraft, I am able to connect an OUYA controller via Bluetooth. However, many of the keybinds do not work as expected. Through some testing, I have been able to come up with a list of binds:

  • The controller's O button works as the A button, as expected.
  • The controller's A button works as the X button.
  • The controller's U button works as the B button.
  • The controller's Y button does not work.
  • Left on the controller's D-pad works as the select button. Other directions do not work.
  • The controller's left and right analog sticks work as intended.
  • The controller's left bumper works as the Y button.
  • The controller's right bumper does not work.
  • The controller's left trigger does not work.
  • The controller's right trigger is a bit complicated.
    • In the controller settings, it states to act as the left stick.
    • However, it randomly scrolls down in the menus, and moves the camera up and down in-game.
  • The game's left and right bumpers seem to not be bound to any button on the controller.

When I enter a world, there are several issues relating to the camera. I know that both triggers on the OUYA controller are analog triggers. Likely because of this, the left trigger, when not pressed, constantly rotates the camera to the left, and when it is pressed, it moves the camera to the right. It also pauses the game, implying that it is bound to the Start button as well. The right trigger moves the camera down when it is pressed, and does not move the camera initially; after pressing it down, it moves the camera up when not pressed. The right analog stick controls the camera as intended.

How would I get this controller to work normally since all of the keybinds seem to be all over the place?

Best Answer

On Android, gamepad mappings are defined in Key Layout files.

https://source.android.com/devices/input/key-layout-files

Sometimes there's already a key layout file for your device. Sometimes you need to create one from scratch. The filename should include the vendor and product IDs for your gamepad. For the OUYA gamepad, the filename is:

Vendor_2836_Product_0001.kl

If you search for this filename you can find the official file that was distributed on the OUYA:

# Copyright (C) 2011 The Android Open Source Project
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

#
# OUYA Game Controller
#

key 0x130    BUTTON_A
key 0x133    BUTTON_B
key 0x131    BUTTON_X
key 0x132    BUTTON_Y

# Button "LB" maps to BUTTON_L1.
key 0x134    BUTTON_L1
# Button "RB" maps to BUTTON_R1.
key 0x135    BUTTON_R1

# These two keycodes are for click (press from above) on analog control sticks.
key 0x136    BUTTON_THUMBL
key 0x137    BUTTON_THUMBR

# D-pad
key 0x138    DPAD_UP
key 0x139    DPAD_DOWN
key 0x13a    DPAD_LEFT
key 0x13b    DPAD_RIGHT

# Power and Home Key
key 0x13e    HOME      #Short Press
key 0x13f    HOME ALT  #Long Press

# Left (0x00, 0x01) and right (0x03, 0x04) analog control stick.
# The reported value for flat is 128 out of a range from -32767 to 32768, which is absurd.
# This confuses applications that rely on the flat value because the joystick actually
# settles in a flat range of +/- 4096 or so.
axis 0x00 X flat 4096
axis 0x01 Y flat 4096
axis 0x03 Z flat 4096
axis 0x04 RZ flat 4096

# Triggers.
# (Shoulder trigger buttons marked with "LT" and "RT" are analog.
# Each axis has range from 0 to 255.)
axis 0x02 LTRIGGER
axis 0x05 RTRIGGER
key 0x13c    BUTTON_L2
key 0x13d    BUTTON_R2

Save that in your Vendor_2836_Product_0001.kl file and put it on your Android in /system/usr/keylayout. Restart your Android device and now your gamepad should use the new mapping.