Over the weekend, I took some inspiration from a few different sources and put this together in action. Taking what Todd Sharp has mentioned on his blog (here) and what I’ve been doing with my #DaysOfArm article series (most recently here) and some of the things that I’ve been doing at home with learning how to code – then this is what’s been able to be achieved and some learnings and differences that I’ve taken with running Minecraft (on Arm).
I’ve been aware of Minecraft for a few years and the tech stack has changed over that time. And the purpose of why I even considered installing and developing with Minecraft was not about the playing but learning and extending it for different purposes.
I really like what Todd’s done. I use a different stack. I use spigot for my Minecraft Java Edition server implementation (here). There are different Minecraft server implementation out there. I’ve used this for a while (even when it was called CraftBukkit) because a) it was Java, b) it used Java Maven based projects to build plugins and c) there was already a plugin called RaspberryJuice that enabled python programming to interact with the world. Having this kind of capability meant that I can do some cool things.
As of writing this, I would suggest a couple of things.
- Run Java 16
- Also needs git to be installed
- Run the latest version of spigot which is v1.17
On Oracle Cloud Infrastructure, if you provision an Oracle Linux 7.9 image on Arm, then you can do the following:
$ sudo yum update $ sudo yum remove python36-pyyaml.aarch64 $ sudo yum install git $ sudo yum install jdk-220.127.116.11.1.aarch64
The main difference between the Microsoft download this one, you use the server from the ground up. You download the BuildTools.jar from their Jenkins server (here) and you build it. Once you’ve downloaded it you can build it.
$ java -jar BuildTools.jar --rev 1.17
This will build the whole server and you get a JAR file that you can run which will behave the same way as the official download from Minecraft site.
$ java -Xmx2G -jar spigot-1.17.jar
This will start the server in gui mode so you can run operator commands. You can run the above with the additional parameter
nogui (if you want to run the server as a service).
From here, this is where I still bringing my other thoughts and comments I would suggest a few things to manage your Minecraft server.
Lock down the access
Here’s a couple of different options that could be worth considering.
- Use Security Lists in Oracle Cloud to narrow the IP addresses that can access this server. If you know your IP address, restrict the access.
- Use SSH Tunnelling into your Oracle Cloud VM.
If you want some help with these options, let me know. And there are likely to be other methods, but I haven’t tried them.
Lock down the server itself
Explore the use of permissions and whitelist and ops (which is who can be an operator). Here’s a couple of references to help manage your server.
- Minecraft server.properties reference (here)
- Command Operator reference (here)
- Command Whitelist reference (here)
Explore Extensions / Plugins
This is where things can be quite fun. Here’s a few that I’ve experimented with from (here).
- BungeeCord (here) – this server allows you to jump between Minecraft servers and acts as a proxy
- RaspberryJuice (here) – this plugin allows you to program using Python against the server itself acting as that user.
- Geyser / Floodgate (here)- this plugin allows you to authenticate using a Microsoft / XBox account (users that have a Mojang Account pre-dating Dec 2020 use the original authentication in Java Edition)
Like most things in terms of plugins, be aware of what they do. They are installed on the server and have access to your VM within the context of your Minecraft server.
Over the next little while, I’ll build out a terraform script similar to what I did for the OCI Arcade to get this up and going.