--- - name: Full Minecraft Server Setup (Paper + Geyser + Floodgate) hosts: gameservers become: yes vars: minecraft_user: minecraft minecraft_home: /opt/minecraft paper_version: "1.21.1" paper_build: "130" java_opts: "-Xms1G -Xmx3G -XX:+UseG1GC -XX:+ParallelRefProcEnabled -XX:MaxGCPauseMillis=200 -XX:+UnlockExperimentalVMOptions -XX:+DisableExplicitGC -XX:G1NewSizePercent=30 -XX:G1MaxNewSizePercent=40 -XX:G1HeapRegionSize=8M -XX:G1ReservePercent=20 -XX:G1HeapWastePercent=5 -XX:G1MixedGCCountTarget=4 -XX:InitiatingHeapOccupancyPercent=15 -XX:G1MixedGCLiveThresholdPercent=90 -XX:G1RSetUpdatingPauseTimePercent=5 -XX:SurvivorRatio=32 -XX:+PerfDisableSharedMem -XX:MaxTenuringThreshold=1" tasks: - name: Ensure required packages apt: name: - openjdk-21-jdk - curl - unzip state: present update_cache: yes - name: Create minecraft user user: name: "{{ minecraft_user }}" shell: /bin/bash create_home: yes home: "{{ minecraft_home }}" - name: Create server directory file: path: "{{ minecraft_home }}" state: directory owner: "{{ minecraft_user }}" group: "{{ minecraft_user }}" mode: '0755' - name: Download PaperMC server get_url: url: "https://api.papermc.io/v2/projects/paper/versions/{{ paper_version }}/builds/{{ paper_build }}/downloads/paper-{{ paper_version }}-{{ paper_build }}.jar" dest: "{{ minecraft_home }}/paper.jar" owner: "{{ minecraft_user }}" group: "{{ minecraft_user }}" mode: '0755' - name: Download Geyser-Spigot plugin get_url: url: "https://ci.opencollab.dev/job/GeyserMC/job/Geyser/job/master/lastSuccessfulBuild/artifact/bootstrap/spigot/target/Geyser-Spigot.jar" dest: "{{ minecraft_home }}/plugins/Geyser-Spigot.jar" owner: "{{ minecraft_user }}" group: "{{ minecraft_user }}" mode: '0644' - name: Download Floodgate plugin get_url: url: "https://ci.opencollab.dev/job/GeyserMC/job/Floodgate/job/master/lastSuccessfulBuild/artifact/spigot/build/libs/floodgate-spigot.jar" dest: "{{ minecraft_home }}/plugins/floodgate-spigot.jar" owner: "{{ minecraft_user }}" group: "{{ minecraft_user }}" mode: '0644' - name: Create start.sh script copy: dest: "{{ minecraft_home }}/start.sh" content: | #!/bin/bash cd {{ minecraft_home }} exec java {{ java_opts }} -jar paper.jar nogui owner: "{{ minecraft_user }}" group: "{{ minecraft_user }}" mode: '0755' - name: Accept EULA copy: dest: "{{ minecraft_home }}/eula.txt" content: "eula=true" owner: "{{ minecraft_user }}" group: "{{ minecraft_user }}" mode: '0644' - name: Create systemd service copy: dest: /etc/systemd/system/minecraft.service content: | [Unit] Description=Minecraft Server After=network.target [Service] User={{ minecraft_user }} WorkingDirectory={{ minecraft_home }} ExecStart={{ minecraft_home }}/start.sh Restart=on-failure RestartSec=10 [Install] WantedBy=multi-user.target mode: '0644' - name: Reload systemd and enable Minecraft service systemd: daemon_reload: yes name: minecraft enabled: yes state: started