Minecraft Running (Barely)

I have managed to get Minecraft running on my Unmatched (Ubuntu), although running is a probably not the best word for this. It took about 20 minutes to get to the main menu, took about an hour to generate and load a new game, and took about 8 minutes to load into the game the second time. With all settings at the lowest and a render distance at 3 chunks, it still only manages 1-2 fps at best even while running at 1.5GHz. Also, sound is not working at the moment due to an OpenAL error that I haven’t looked into yet. As you can see in the image, I’m using MulitMC to run version 1.12.1.

The general process I used to get it running was as follows.

  1. Compile MultiMC. This is the launcher that I managed to get running. I was using openjdk-11-jdk when this was compiled. Also, this took a very long time to complete, as in an hour or longer.
  2. Launch MultiMC and log in with your Mojang account.
  3. Add an instance of Minecraft. I tried both 1.12.1 and 1.17.1, but settled on 1.12.1 because the version of lwjgl I managed to acquire work for this version. Note this will fail to launch, but will put the needed files and folders in the right location.
  4. Install the liblwjgl-java-jni package. This gives you a RISC-V compiled version of liblwjgl.so which is need for the graphics backend. APT says this is version 2.9.3 if I’m not mistaken.
  5. Edit your Minecraft instance to use version 2.9.3. Not sure if this is completely necessary.
  6. Find the jar file for lwjgl. Mine was located at
  7. Update the jar file to use the new version liblwjgl.so located at /lib/jni/liblwjgl.so
    zip -d name.jar file_to_delete ← this can be used to delete a file from a jar file
    jar uf name.jar file_to_add ← this can be used to add a file to a jar file
  8. From MultiMC, launch Minecraft in offline mode and it should load to the main menu in about 20 minutes. Note: specifically launch Minecraft in offline mode because if you launch it normally, it will just redownload the lwjgl jar from the servers again and undo what you did in step 6.

Additionally, I update the jinput jar to use the one from /lib/jni/ as well, but I’m not sure if this is necessary as the game got to the initial screen that says Mojang without changing the jar.

And lastly, I got this running over the course of several days of troubleshooting, so I probably missed something in my process listed above. I’ll be doing a fresh install of the OS in a day or 2 in order to do a step by step guide if anyone is interested.


As promised, an exact step by step guide to get where I’m at. This guide starts after installing XFCE on a fresh install of Ubuntu 21.04 and I’ll be including all commands for completeness. Also the cd commands are written to be run in order, ie the paths are relative to the last cd command. Important filepaths are listed at the end.

  1. Install dependencies for building MultiMC.
sudo apt-get install build-essential cmake qtbase5-dev zlib1g-dev libgl1-mesa-dev openjdk-11-jdk git
  1. Compile MultiMC, took around 33 minutes running at 1.5 GHz.
mkdir ~/MultiMC && cd ~/MultiMC
mkdir build
mkdir install
git clone --recursive https://github.com/MultiMC/MultiMC5.git src
cd build
cmake -DCMAKE_INSTALL_PREFIX=../install ../src
make -j4 install
  1. Run MultiMC, located in the install folder
cd ../install
  1. Add your Mojang account under Settings → Accounts

  2. Add an instance using the add instance button. Currently, only up to version 1.12.2 will run because they use LWJGL 2. 1.13 uses LWJGL 3 of which I have not yet been able to get a RISC-V version of. Version 1.0 has had the smallest load times of the versions I’ve test (about 3-4 minutes to get to the main menu and about 40 minutes to generate a new map), but still suffers from the low fps.

  3. Right-click on the new instance and click Edit Instance. Then go to the version tab and click the Download All button. After this, MultiMC can be closed for the time being.

  4. Get a RISC-V version of LWJGL and jinput. This gives version 2.9.3 of LWJGL.

sudo apt install liblwjgl-java-jni libjinput-jni
  1. Update the LWJGL jar file with the RISC-V version of the library.
cd libraries/org/lwjgl/lwjgl/lwjgl-platform/2.9.4-nightly-20150209/
cp /lib/jni/liblwjgl.so .
jar uf lwjgl-platform-2.9.4-nightly-20150209-natives-linux.jar liblwjgl.so
  1. Update the jinput jar file with the RISC-V version of the library. Note the filename change as the one in the jar file is named this way.
cd ../../../../../net/java/jinput/jinput-platform/2.0.5/
cp /lib/jni/libjinput.so libjinput-linux64.so
jar uf jinput-platform-2.0.5-natives-linux.jar libjinput-linux64.so
  1. Reopen MultiMC and launch offline the instance you set up earlier. Remember to launch offline and not regular launch because it will redownload and overwrite the jar file you just fixed.

This will get you to where I am at right now, however the performance is not playable (0-1 fps and really long load times). Also, I recommend making a copy of the updated jar files in case you accidentally click regular launch or download a new instance to test. And lastly, here are the filepaths to the jar files and executable.

Executable - ~/MultiMC/install/MultiMC
LWJGL - ~/MultiMC/install/libraries/org/lwjgl/lwjgl/lwjgl-platform/2.9.4-nightly-20150209/lwjgl-platform-2.9.4-nightly-20150209-natives-linux.jar
jinput - ~/MultiMC/install/libraries/net/java/jinput/jinput-platform/2.0.5/jinput-platform-2.0.5-natives-linux.jar

I welcome any suggestions for troubleshooting the low performance. I believe we should be getting at least some additional performance because the raspberry pi 2 can run Minecraft at around 15 fps and my understanding is our CPU is in same ballpark, give or take, as the rpi2/rpi3.

1 Like

Interesting, I’ve been trying to get minecraft running in riscv64 qemu emulator (in ubuntu 20.04) for a week, not knowing someone else did it a month ago (very clever move, installing lwjgl separately and then taking the .so library from there). Btw, you can run a minecraft server on different machine and then connect to it from the riscv device, that will take some of the load off the device (but i don’t think it will be significant), or you can try some older versions. Other than that, I don’t know linux very well, so I cannot help you there. I suppose the problem here is not the cpu performance itself, but rather the openjdk port, but who knows…

I had thought of using a server before, but I initially ignored that option because I could only get the game to load with “Launch Offline” only, which I had assumed meant no network multiplayer. But after setting up a Minecraft server and testing with my laptop, I determined I could still connect to the server by first logging in from another computer to get the server to cache my user.

So I tried it with my Unmatched and managed to get connected to the server. But unfortunately, I get disconnected from the server shortly after I see the game world. The server log says “lost connection: Timed out”. So I’m thinking the lag on the client side is causing the disconnect. I’ll play with it to see if I can get any better results, possibly on a different version.

My testing was done using Minecraft version 1.12.1. The server was running Arch Linux using the AUR package minecraft-server. And the server jar file was downloaded from https://mcversions.net/

You can try to run a forge server and manually increase the timeout:

But from what you wrote, I think the game won’t be any more playable even if it works.

Cool, for fun I also messing around with some Java games. Runescape through the RuneLite client seemed to work though yeah it is extremly slow. currently working on compiling the libraries RuneLite uses for hardware acceleration to see if that will help