Skip to main content

Minecraft

Client

Launcher for running the mods

I use the Fabric launcher, get its installer from the AUR with the following command:

$ aurget fabric-installer

Since this is a graphical installer, launch and select the MInecraft version that it should install a launcher for. It will appear as an entry in the Mojang launcher.

Installer for the mods themselves

Install either fabric or fabric-bin. I typically use the latter since I get build issues with the former.

Follow instructions and we are good.

LIst of mods that I run on the client:

  • fabric-api
  • sodium
  • lithium
  • phosphor
  • effective
  • visuality
  • iris
  • ferrite-core
  • coordinates-display
  • lambdynamiclights
  • betterf3
  • enhancedblockentities (ebe)

Server

Architecture

I run the actual server on krypton, but use oxygen to proxy the traffic, masking the actual IP address. Use a TCP router through traefik  with HostSNI(`*`) to allow access to the server.

Here is an example configuration using the file provider on traefik:

tcp:
  routers:
    minecraft:
      entrypoints:
       - "minecraft"
    rule: "HostSNI(`*`)"
    service: minecraft

  services:
    minecraft:
      loadBalancer:
        servers:
          - address: "/path/to/server/host:port"

Mods

  • simply optimized modpack

Whitelisting

This server is exposed to the public internet, whitelisting is a must to prevent bots and unauthorized players from joining the server

The whitelist file is a JSON-formatted file that contains player usernames and UUIDs. That in combination with online mode prevents attackers from spoofing accounts.

Here is the file structure for the player whitelist:

[
  {
    "name":"<mojang username 1>",
    "uuid":"<uuid 1>"
  },
  {
    "name":"<mojang username 2>",
    "uuid":"<uuid 2>"
  },
]

To retrieve the UUID of a user, run the following command:

curl https://api.mojang.com/users/profiles/minecraft/<mojang username>

The UUID will be returned in the HTTP response.

To enable parsing and managing of this whitelist:

ENABLE_WHITELIST="true"
ENFORCE_WHITELIST="true"
WHITELIST_FILE="/path/to/whitelist/file.json"
EXISTING_WHITELIST_FILE="SYNC_FILE_MERGE_LIST"

Server Ops

Similar to the whitelist file, the ops file is in JSON format as seen below:

[
  {
    "name":"<mojang username 1>",
    "uuid":"<uuid 1>",
    "level": 4,
    "bypassesPlayerLimit": "true"true
  },
  {
    "name":"<mojang username 2>",
    "uuid":"<uuid 2>",
    "level": 3,
    "bypassesPlayerLimit": "false"false
  },
]
OPS_FILE="/path/to/ops/file.json"
EXISTING_OPS_FILE="SYNC_FILE_MERGE_LIST"