Minecraft Prominence II: Hasturian Era - Deploy Optimized

Deploying Minecraft modpack Prominence II: Hasturian Era in a docker container with optimizations for Minecraft and Java.

Prominence II: Hasturian Era
Prominence II: Hasturian Era

A major update came through called "Hasturian Era" which brings the Prominence II fabric mod-pack from version 2.77 to version 3.0.10.

This post goes over deploying Prominence II RPG: Hasturian Era in a docker container with Java and Minecraft optimizations.

This update lead to some instability for me initially and lead to some heavy optimization through troubleshooting and testing to get this massive modpack stable for multi-user gameplay.

Modpack Details:

https://www.curseforge.com/minecraft/modpacks/prominence-2-rpg

Prominence II official wiki:

Prominence II: Hasturian Era | Official Wiki

Luna Pixel Studios official Discord Server:

Join the Luna Pixel Studios Discord Server!
Luna Pixel Studios is creating Minecraft Projects | 145817 members

Server deployment changes from Prominence II version 2.7.7 to version 3.0.10:

  • Java version changed from version 17 to version 21 - note the container image change to 'itzg/minecraft-server:java21'
  • Fabric loader version changed from version '0.14.25' to version '0.16.5'
  • The server data pack URL has changed
  • Various Java and Minecraft optimizations listed below

Server optimizations for Prominence II RPG v3.0.10:

There are a good few optimizations in the docker compose file below. Here are the following changes:

  • Fixed memory allocation at 24GB to prevent memory allocation overhead and stuttering
  • Optimized G1GC garbage collection settings via Aikar's flags, tuned for Java 21's improved garbage collection
  • Performance-balanced view distance (8 chunks) and simulation distance (6 chunks) for modded stability
  • Network and entity optimizations: 75% broadcast range and 256-byte compression threshold
  • World size capped at 15,000 blocks with flight enabled - typical for RPG modpack requirements
  • Spawn protection disabled to allow for RPG-style building and interaction anywhere
  • Healthcheck disabled to account for erroneous errors that can be ignored by mods misbehaving but not crashing the server
  • Max tick time set to '-1' to account for transient extremely high tick times and delays due to misbehaving mods or long running operations caused by heavy mods

Deploying as a container with docker compose:

Create a directory where you plan to store the Minecraft data.

mkdir -p /opt/container-data/mc-prominence-2-rpg

I'll be storing this container's data in '/opt/container-data/mc-prominence-2-rpg' in this case.

Then create a docker-compose.yml file with the below data in the new directory.

nano  /opt/container-data/mc-prominence-2-rpg/docker-compose.yml

Deploy the container by running:

docker-compose up -d

Keep in mind that Prominence II can require more disk space and has higher IO requirements than vanilla Minecraft.

version: '3.8'
services:
  mc-prominence-2-rpg:
    container_name: mc-prominence-2-rpg
    image: itzg/minecraft-server:java21
    environment:
      EULA: "TRUE"
      TYPE: "FABRIC"
      DEBUG: "TRUE"
      GENERIC_PACK: "https://mediafilez.forgecdn.net/files/5846/579/Prominence_II_RPG_Server_Pack_v3.0.10.zip"
      FABRIC_LOADER_VERSION: "0.16.5"
      VERSION: "1.20.1"
      DISABLE_HEALTHCHECK: true
      MEMORY: "24G"
      INIT_MEMORY: "24G"
      JVM_XX_OPTS: "-XX:+UseG1GC -XX:MaxGCPauseMillis=200 -XX:+UnlockExperimentalVMOptions -XX:+DisableExplicitGC -XX:+AlwaysPreTouch -XX:G1NewSizePercent=40 -XX:G1MaxNewSizePercent=50 -XX:G1HeapRegionSize=16M -XX:G1ReservePercent=15 -XX:G1MixedGCCountTarget=4 -XX:InitiatingHeapOccupancyPercent=20 -XX:G1MixedGCLiveThresholdPercent=90 -XX:SurvivorRatio=32 -XX:MaxTenuringThreshold=1 -XX:+ParallelRefProcEnabled -XX:+PerfDisableSharedMem -XX:+UseCompressedOops -XX:+OptimizeStringConcat -XX:-UseAdaptiveSizePolicy -XX:G1HeapWastePercent=5 -XX:+UseStringDeduplication -Dusing.aikars.flags=https://mcflags.emc.gs"
      MAX_TICK_TIME: "-1"
      VIEW_DISTANCE: "8"
      SIMULATION_DISTANCE: "6"
      SPAWN_PROTECTION: "0"
      ENABLE_JMX: "true"
      ENABLE_RCON: "true"
      ALLOW_FLIGHT: "true"
      MAX_WORLD_SIZE: "15000"
      ENTITY_BROADCAST_RANGE_PERCENTAGE: "75"
      NETWORK_COMPRESSION_THRESHOLD: "256"
      USE_NATIVE_TRANSPORT: "true"
      SYNC_CHUNK_WRITES: "false"      
    ports:
      - "25565:25565"
      - "25575:25575"
    volumes:
      - ./data:/data
      - ./mods:/data/mods
    restart: unless-stopped
    deploy:
      resources:
        limits:
          cpus: '5.5'
          memory: 26G
        reservations:
          cpus: '4.0'
          memory: 24G
    ulimits:
      nofile:
        soft: 65535
        hard: 65535

docker-compose.yml

This is very likely a high resource deployment. Adjust this to your systems capabilities and resources available - specifically around CPU and memory.

Otherwise, deploying with the optimizations for Java 21 has made significant stability improvements for myself and the others using the server.


Example generated server.properties file:

This will be located in your Minecraft 'data' directory.

#Minecraft server properties
#Sun Nov 03 03:37:55 UTC 2024
allow-flight=true
allow-nether=true
broadcast-console-to-ops=true
broadcast-rcon-to-ops=true
difficulty=easy
enable-command-block=true
enable-jmx-monitoring=true
enable-query=false
enable-rcon=true
enable-status=true
enforce-secure-profile=true
enforce-whitelist=true
entity-broadcast-range-percentage=75
force-gamemode=false
function-permission-level=2
gamemode=survival
generate-structures=true
generator-settings={}
hardcore=false
hide-online-players=false
initial-disabled-packs=create_new_age\:create_new_age_monkey_edition,data/auto_fire_hooks.zip,data/BE_default_endgen_fix_1.20.x.zip,data/ElocinDev-Travelers-Comfort-Datapack.zip,data/endrem_apoth_compat.zip,data/GamerAxeRebalance.zip,data/hardening_catalyst_blacklist.zip,data/ichphilipp-s-endcity-better-end-1-18-1.zip,data/LessStructures-SpacingTweaks-1.20.1-2.1.56.zip,data/Scarecrow_Obliterator.zip,data/simplyswords_join_book.zip,data/SkyVillages-FarmersDelightCompat-1.20.1-1.0.3.zip,data/SkyVillages-GraveyardCompat-1.20.1-1.0.3.zip,data/SkyVillages-PracticalPlushiesCompat-1.20.1-1.0.3.2.zip,data/SkyVillages-SupplementariesCompat-1.20.1-1.0.3.1.zip,data/SkyVillages-WaystonesCompat-1.20.1-1.0.3-fabric.zip,data/TrophyAdjustments.zip,data/WDA-NoFlyingStructures-1.18.2-1.19.2.zip,data/WDA-VanillaLoot-1.18.2-1.19.2-0.0.1.zip
initial-enabled-packs=vanilla,fabric
level-name=world
level-seed=
level-type=bclib\:normal
max-chained-neighbor-updates=1000000
max-players=20
max-tick-time=-1
max-world-size=15000
motd=Prominence II RPG\: Hasturian Era
network-compression-threshold=256
online-mode=true
op-permission-level=4
player-idle-timeout=30
prevent-proxy-connections=false
pvp=false
query.port=25565
rate-limit=0
rcon.password=change-to-a-secure-password
rcon.port=25575
require-resource-pack=false
resource-pack=
resource-pack-prompt=
resource-pack-sha1=
server-ip=
server-port=25565
simulation-distance=6
spawn-animals=true
spawn-monsters=true
spawn-npcs=true
spawn-protection=0
sync-chunk-writes=false
text-filtering-config=
use-native-transport=true
view-distance=8
white-list=true

server.properties


Previous post:

Deploying Prominence II Modpack Minecraft Server Container
A quick guide on how I successfully deployed a Minecraft server docker container with the Prominence II RPG modpack and Fabric mod loader.