Added minecraft backup.
authorLuke Hoersten <luke@hoersten.org>
Sat, 03 Jul 2021 13:23:46 -0500
changeset 156 ebd8a21a0e62
parent 155 4d45841961e7
child 157 5e5c9e605142
Added minecraft backup.
minecraft/aws-s3-backup/files/minecraft-s3-backup.sh
minecraft/aws-s3-backup/handlers/main.yaml
minecraft/aws-s3-backup/meta/main.yaml
minecraft/aws-s3-backup/tasks/main.yaml
minecraft/aws-s3-backup/templates/[email protected]
minecraft/defaults/main.yaml
minecraft/files/03adoptopenjdk-direct
minecraft/files/eula.txt
minecraft/handlers/main.yaml
minecraft/server/defaults/main.yaml
minecraft/server/files/03adoptopenjdk-direct
minecraft/server/files/eula.txt
minecraft/server/handlers/main.yaml
minecraft/server/tasks/adoptopenjdk.yaml
minecraft/server/tasks/dynmap.yaml
minecraft/server/tasks/main.yaml
minecraft/server/templates/configuration.txt.j2
minecraft/server/templates/map.nginx.conf.j2
minecraft/server/templates/minecraft.service.j2
minecraft/server/templates/ops.json.j2
minecraft/server/vars/main.yaml
minecraft/tasks/adoptopenjdk.yaml
minecraft/tasks/dynmap.yaml
minecraft/tasks/main.yaml
minecraft/templates/configuration.txt.j2
minecraft/templates/map.nginx.conf.j2
minecraft/templates/minecraft.service.j2
minecraft/templates/ops.json.j2
minecraft/vars/main.yaml
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/minecraft/aws-s3-backup/files/minecraft-s3-backup.sh	Sat Jul 03 13:23:46 2021 -0500
@@ -0,0 +1,12 @@
+#!/bin/bash
+
+BUCKET=$1
+DATE=`date --iso-8601`
+BACKUP_DIR=$2
+BACKUP_TAR="/tmp/$BUCKET-$DATE.tgz"
+
+tar -zc -f $BACKUP_TAR $BACKUP_DIR
+aws s3 mb "s3://$BUCKET/"
+aws s3 cp $BACKUP_TAR "s3://$BUCKET/"
+
+rm $BACKUP_TAR
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/minecraft/aws-s3-backup/handlers/main.yaml	Sat Jul 03 13:23:46 2021 -0500
@@ -0,0 +1,5 @@
+---
+
+- name: reload s3 backup service
+  systemd: name="minecraft-s3-backup@{{minecraft_s3_backup_bucket}}.service" enabled="yes" daemon_reload="yes"
+  become: yes
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/minecraft/aws-s3-backup/meta/main.yaml	Sat Jul 03 13:23:46 2021 -0500
@@ -0,0 +1,4 @@
+---
+
+dependencies:
+  - aws-s3-backup
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/minecraft/aws-s3-backup/tasks/main.yaml	Sat Jul 03 13:23:46 2021 -0500
@@ -0,0 +1,19 @@
+---
+
+- name: create minecraft s3 backup shell script
+  become: yes
+  copy:
+    src: "minecraft-s3-backup.sh"
+    dest: "/usr/local/bin/minecraft-s3-backup.sh"
+    mode: "0755"
+
+- name: configure minecraft s3 backup systemd service
+  become: yes
+  template:
+    src: "[email protected]"
+    dest: "/lib/systemd/system/minecraft-s3-backup@{{minecraft_s3_backup_bucket}}.service"
+  notify: reload s3 backup service
+
+- name: ensure minecraft s3 backup service is started
+  become: yes
+  systemd: name="minecraft-s3-backup@{{minecraft_s3_backup_bucket}}.service" enabled="yes"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/minecraft/aws-s3-backup/templates/[email protected]	Sat Jul 03 13:23:46 2021 -0500
@@ -0,0 +1,9 @@
+[Unit]
+Description=Minecraft s3 backup for "%I"
+
+[Service]
+Type=oneshot
+ExecStart=/usr/local/bin/minecraft-s3-backup.sh %i "{{minecraft_s3_backup_dir}}"
+
+[Install]
+WantedBy=aws-s3-backup.target
--- a/minecraft/defaults/main.yaml	Sat Jul 03 11:16:17 2021 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,14 +0,0 @@
----
-
-minecraft_user: "minecraft"
-minecraft_fork: "vanilla" # paper
-minecraft_parent_dir: "/opt"
-minecraft_motd: "A Minecraft Server"
-minecraft_mem: "2G"
-minecraft_seed: ""
-minecraft_difficulty: "hard"
-
-minecraft_paper_version: "1.17"
-minecraft_paper_build: "53"
-minecraft_vanilla_hash: "0a269b5f2c5b93b1712d0f5dc43b6182b9ab254e"
-minecraft_dynmap_version: "3.2-beta-1-spigot"
--- a/minecraft/files/03adoptopenjdk-direct	Sat Jul 03 11:16:17 2021 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-Acquire::HTTP::Proxy::adoptopenjdk.jfrog.io "DIRECT";
--- a/minecraft/files/eula.txt	Sat Jul 03 11:16:17 2021 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-eula=true
--- a/minecraft/handlers/main.yaml	Sat Jul 03 11:16:17 2021 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
----
-
-- name: restart minecraft
-  become: yes
-  systemd: name="minecraft.service" state="restarted" daemon_reload="yes"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/minecraft/server/defaults/main.yaml	Sat Jul 03 13:23:46 2021 -0500
@@ -0,0 +1,14 @@
+---
+
+minecraft_user: "minecraft"
+minecraft_fork: "vanilla" # paper
+minecraft_parent_dir: "/opt"
+minecraft_motd: "A Minecraft Server"
+minecraft_mem: "2G"
+minecraft_seed: ""
+minecraft_difficulty: "hard"
+
+minecraft_paper_version: "1.17"
+minecraft_paper_build: "53"
+minecraft_vanilla_hash: "0a269b5f2c5b93b1712d0f5dc43b6182b9ab254e"
+minecraft_dynmap_version: "3.2-beta-1-spigot"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/minecraft/server/files/03adoptopenjdk-direct	Sat Jul 03 13:23:46 2021 -0500
@@ -0,0 +1,1 @@
+Acquire::HTTP::Proxy::adoptopenjdk.jfrog.io "DIRECT";
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/minecraft/server/files/eula.txt	Sat Jul 03 13:23:46 2021 -0500
@@ -0,0 +1,1 @@
+eula=true
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/minecraft/server/handlers/main.yaml	Sat Jul 03 13:23:46 2021 -0500
@@ -0,0 +1,5 @@
+---
+
+- name: restart minecraft
+  become: yes
+  systemd: name="minecraft.service" state="restarted" daemon_reload="yes"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/minecraft/server/tasks/adoptopenjdk.yaml	Sat Jul 03 13:23:46 2021 -0500
@@ -0,0 +1,21 @@
+---
+
+- name: configure apt proxy bypass for https
+  become: yes
+  copy: src="03adoptopenjdk-direct" dest="/etc/apt/apt.conf.d/03adoptopenjdk-direct"
+
+- name: add adoptopenjdk apt key
+  become: yes
+  apt_key: url="https://adoptopenjdk.jfrog.io/adoptopenjdk/api/gpg/key/public/"
+
+- name: add adoptopenjdk apt repo
+  become: yes
+  apt_repository: repo="deb https://adoptopenjdk.jfrog.io/adoptopenjdk/deb/ buster main"
+
+- name: update apt package cache
+  become: yes
+  apt: upgrade="dist" autoremove="yes" autoclean="yes" update_cache="yes" cache_valid_time="3600"
+
+- name: install adoptopenjdk hotspot jre 16
+  become: yes
+  apt: name="adoptopenjdk-16-hotspot-jre"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/minecraft/server/tasks/dynmap.yaml	Sat Jul 03 13:23:46 2021 -0500
@@ -0,0 +1,27 @@
+---
+
+- name: create minecraft plugins dir
+  become: yes
+  file:
+    path: "{{minecraft_dir}}/{{item}}"
+    owner: "{{minecraft_user}}"
+    group: "{{minecraft_user}}"
+    mode: "0755"
+    state: "directory"
+  loop:
+    - "plugins"
+    - "plugins/dynmap"
+
+- name: download dynmap
+  become: yes
+  get_url:
+    url: "{{minecraft_dynmap_url}}"
+    dest: "{{minecraft_dir}}/plugins/dynmap.jar"
+    mode: "0755"
+  notify: restart minecraft
+
+- name: configure dynmap
+  become: yes
+  template:
+    src: "configuration.txt.j2"
+    dest: "{{minecraft_dir}}/plugins/dynmap/configuration.txt"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/minecraft/server/tasks/main.yaml	Sat Jul 03 13:23:46 2021 -0500
@@ -0,0 +1,90 @@
+---
+
+- name: add minecraft user
+  become: yes
+  user: name="{{minecraft_user}}" home="{{minecraft_dir}}"
+
+- name: install adoptopenjdk
+  include_tasks: adoptopenjdk.yaml
+
+- name: set minecraft fork
+  set_fact: minecraft_url="{{minecraft_vanilla_url}}"
+  when: minecraft_fork == "vanilla"
+
+- name: set minecraft fork
+  set_fact: minecraft_url="{{minecraft_paper_url}}"
+  when: minecraft_fork == "paper"
+
+- name: create minecraft dir
+  become: yes
+  file:
+    path: "{{minecraft_dir}}"
+    owner: "{{minecraft_user}}"
+    group: "{{minecraft_user}}"
+    mode: "0755"
+    state: "directory"
+
+- name: download minecraft
+  become: yes
+  get_url:
+    url: "{{minecraft_url}}"
+    dest: "{{minecraft_dir}}/server.jar"
+    mode: "0755"
+  notify: restart minecraft
+
+- name: configure minecraft eula
+  become: yes
+  copy:
+    src: "{{item}}"
+    dest: "{{minecraft_dir}}/{{item}}"
+    owner: "{{minecraft_user}}"
+    group: "{{minecraft_user}}"
+  loop:
+    - "eula.txt"
+  notify: restart minecraft
+
+- name: configure minecraft ops
+  become: yes
+  template:
+    src: "ops.json.j2"
+    dest: "{{minecraft_dir}}/ops.json"
+    owner: "{{minecraft_user}}"
+    group: "{{minecraft_user}}"
+  notify: restart minecraft
+
+- name: install plugins
+  include_tasks: dynmap.yaml
+  when: minecraft_fork == "paper"
+
+- name: create server.properties
+  become: yes
+  file:
+    path: "{{minecraft_dir}}/server.properties"
+    state: "touch"
+    access_time: "preserve"
+    modification_time: "preserve"
+    owner: "{{minecraft_user}}"
+    group: "{{minecraft_user}}"
+
+- name: configure server.properties
+  become: yes
+  lineinfile:
+    path: "{{minecraft_dir}}/server.properties"
+    regexp: "^{{item.key}}="
+    line: "{{item.key}}={{item.value}}"
+  notify: restart minecraft
+  loop:
+    - {key: "motd", value: "{{minecraft_motd}}"}
+    - {key: "level-seed", value: "{{minecraft_seed}}"}
+    - {key: "difficulty", value: "{{minecraft_difficulty}}"}
+
+- name: install systemd service
+  become: yes
+  template:
+    src: "minecraft.service.j2"
+    dest: "/lib/systemd/system/minecraft.service"
+  notify: restart minecraft
+
+- name: ensure service is started
+  become: yes
+  systemd: name="minecraft.service" enabled="yes" state="started"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/minecraft/server/templates/configuration.txt.j2	Sat Jul 03 13:23:46 2021 -0500
@@ -0,0 +1,492 @@
+# All paths in this configuration file are relative to Dynmap's data-folder: minecraft_server/plugins/dynmap/
+
+# All map templates are defined in the templates directory
+# To use the HDMap very-low-res (2 ppb) map templates as world defaults, set value to vlowres
+#   The definitions of these templates are in normal-vlowres.txt, nether-vlowres.txt, and the_end-vlowres.txt
+# To use the HDMap low-res (4 ppb) map templates as world defaults, set value to lowres
+#   The definitions of these templates are in normal-lowres.txt, nether-lowres.txt, and the_end-lowres.txt
+# To use the HDMap hi-res (16 ppb) map templates (these can take a VERY long time for initial fullrender), set value to hires
+#   The definitions of these templates are in normal-hires.txt, nether-hires.txt, and the_end-hires.txt
+# To use the HDMap low-res (4 ppb) map templates, with support for boosting resolution selectively to hi-res (16 ppb), set value to low_boost_hi
+#   The definitions of these templates are in normal-low_boost_hi.txt, nether-low_boost_hi.txt, and the_end-low_boost_hi.txt
+# To use the HDMap hi-res (16 ppb) map templates, with support for boosting resolution selectively to vhi-res (32 ppb), set value to hi_boost_vhi
+#   The definitions of these templates are in normal-hi_boost_vhi.txt, nether-hi_boost_vhi.txt, and the_end-hi_boost_vhi.txt
+# To use the HDMap hi-res (16 ppb) map templates, with support for boosting resolution selectively to xhi-res (64 ppb), set value to hi_boost_xhi
+#   The definitions of these templates are in normal-hi_boost_xhi.txt, nether-hi_boost_xhi.txt, and the_end-hi_boost_xhi.txt
+deftemplatesuffix: hires
+
+# Map storage scheme: only uncomment one 'type' value
+#  filetree: classic and default scheme: tree of files, with all map data under the directory indicated by 'tilespath' setting
+#  sqlite: single SQLite database file (this can get VERY BIG), located at 'dbfile' setting (default is file dynmap.db in data directory)
+#  mysql: MySQL database, at hostname:port in database, accessed via userid with password
+storage:
+  # Filetree storage (standard tree of image files for maps)
+  type: filetree
+  # SQLite db for map storage (uses dbfile as storage location)
+  #type: sqlite
+  #dbfile: dynmap.db
+  # MySQL DB for map storage (at 'hostname':'port' with flags "flags" in database 'database' using user 'userid' password 'password' and table prefix 'prefix')
+  #type: mysql
+  #hostname: localhost
+  #port: 3306
+  #database: dynmap
+  #userid: dynmap
+  #password: dynmap
+  #prefix: ""
+  #flags: "?allowReconnect=true"
+
+components:
+  - class: org.dynmap.ClientConfigurationComponent
+
+  # - class: org.dynmap.InternalClientUpdateComponent
+  #   sendhealth: true
+  #   sendposition: true
+  #   allowwebchat: true
+  #   webchat-interval: 5
+  #   hidewebchatip: false
+  #   trustclientname: false
+  #   includehiddenplayers: false
+  #   # (optional) if true, color codes in player display names are used
+  #   use-name-colors: false
+  #   # (optional) if true, player login IDs will be used for web chat when their IPs match
+  #   use-player-login-ip: true
+  #   # (optional) if use-player-login-ip is true, setting this to true will cause chat messages not matching a known player IP to be ignored
+  #   require-player-login-ip: false
+  #   # (optional) block player login IDs that are banned from chatting
+  #   block-banned-player-chat: true
+  #   # Require login for web-to-server chat (requires login-enabled: true)
+  #   webchat-requires-login: false
+  #   # If set to true, users must have dynmap.webchat permission in order to chat
+  #   webchat-permissions: false
+  #   # Limit length of single chat messages
+  #   chatlengthlimit: 256
+  # #  # Optional - make players hidden when they are inside/underground/in shadows (#=light level: 0=full shadow,15=sky)
+  # #  hideifshadow: 4
+  # #  # Optional - make player hidden when they are under cover (#=sky light level,0=underground,15=open to sky)
+  # #  hideifundercover: 14
+  # #  # (Optional) if true, players that are crouching/sneaking will be hidden
+  #   hideifsneaking: false
+  #   # If true, player positions/status is protected (login with ID with dynmap.playermarkers.seeall permission required for info other than self)
+  #   protected-player-info: false
+  #   # If true, hide players with invisibility potion effects active
+  #   hide-if-invisiblity-potion: true
+  #   # If true, player names are not shown on map, chat, list
+  #   hidenames: false
+
+  - class: org.dynmap.JsonFileClientUpdateComponent
+    writeinterval: 1
+    sendhealth: true
+    sendposition: true
+    allowwebchat: false
+    webchat-interval: 5
+    hidewebchatip: false
+    includehiddenplayers: false
+    use-name-colors: false
+    use-player-login-ip: false
+    require-player-login-ip: false
+    block-banned-player-chat: true
+    hideifshadow: 0
+    hideifundercover: 0
+    hideifsneaking: false
+    # Require login for web-to-server chat (requires login-enabled: true)
+    webchat-requires-login: false
+    # If set to true, users must have dynmap.webchat permission in order to chat
+    webchat-permissions: false
+    # Limit length of single chat messages
+    chatlengthlimit: 256
+    hide-if-invisiblity-potion: true
+    hidenames: false
+
+  - class: org.dynmap.SimpleWebChatComponent
+    allowchat: false
+    # If true, web UI users can supply name for chat using 'playername' URL parameter.  'trustclientname' must also be set true.
+    allowurlname: false
+
+  # Note: this component is needed for the dmarker commands, and for the Marker API to be available to other plugins
+  - class: org.dynmap.MarkersComponent
+    type: markers
+    showlabel: false
+    enablesigns: false
+    # Default marker set for sign markers
+    default-sign-set: markers
+    # (optional) add spawn point markers to standard marker layer
+    showspawn: true
+    spawnicon: world
+    spawnlabel: "Spawn"
+    # (optional) layer for showing offline player's positions (for 'maxofflinetime' minutes after logoff)
+    showofflineplayers: false
+    offlinelabel: "Offline"
+    offlineicon: offlineuser
+    offlinehidebydefault: true
+    offlineminzoom: 0
+    maxofflinetime: 30
+    # (optional) layer for showing player's spawn beds
+    showspawnbeds: false
+    spawnbedlabel: "Spawn Beds"
+    spawnbedicon: bed
+    spawnbedhidebydefault: true
+    spawnbedminzoom: 0
+    spawnbedformat: "%name%'s bed"
+    # (optional) show world border (vanilla 1.8+)
+    showworldborder: true
+    worldborderlabel: "Border"
+
+  - class: org.dynmap.ClientComponent
+    type: chat
+    allowurlname: false
+  - class: org.dynmap.ClientComponent
+    type: chatballoon
+    focuschatballoons: false
+  - class: org.dynmap.ClientComponent
+    type: chatbox
+    showplayerfaces: true
+    messagettl: 5
+    # Optional: set number of lines in scrollable message history: if set, messagettl is not used to age out messages
+    #scrollback: 100
+    # Optional: set maximum number of lines visible for chatbox
+    #visiblelines: 10
+    # Optional: send push button
+    sendbutton: false
+  - class: org.dynmap.ClientComponent
+    type: playermarkers
+    showplayerfaces: true
+    showplayerhealth: true
+    # If true, show player body too (only valid if showplayerfaces=true
+    showplayerbody: false
+    # Option to make player faces small - don't use with showplayerhealth
+    smallplayerfaces: false
+    # Optional - make player faces layer hidden by default
+    hidebydefault: false
+    # Optional - ordering priority in layer menu (low goes before high - default is 0)
+    layerprio: 0
+    # Optional - label for player marker layer (default is 'Players')
+    label: "Players"
+
+  #- class: org.dynmap.ClientComponent
+  #  type: digitalclock
+  - class: org.dynmap.ClientComponent
+    type: link
+
+  - class: org.dynmap.ClientComponent
+    type: timeofdayclock
+    showdigitalclock: true
+    showweather: true
+  # Mouse pointer world coordinate display
+  - class: org.dynmap.ClientComponent
+    type: coord
+    label: "Location"
+    hidey: false
+    show-mcr: false
+    show-chunk: false
+
+  # Note: more than one logo component can be defined
+  #- class: org.dynmap.ClientComponent
+  #  type: logo
+  #  text: "Dynmap"
+  #  #logourl: "images/block_surface.png"
+  #  linkurl: "http://forums.bukkit.org/threads/dynmap.489/"
+  #  # Valid positions: top-left, top-right, bottom-left, bottom-right
+  #  position: bottom-right
+
+  #- class: org.dynmap.ClientComponent
+  #  type: inactive
+  #  timeout: 1800 # in seconds (1800 seconds = 30 minutes)
+  #  redirecturl: inactive.html
+  #  #showmessage: 'You were inactive for too long.'
+
+  #- class: org.dynmap.TestComponent
+  #  stuff: "This is some configuration-value"
+
+# Treat hiddenplayers.txt as a whitelist for players to be shown on the map? (Default false)
+display-whitelist: false
+
+# How often a tile gets rendered (in seconds).
+renderinterval: 1
+
+# How many tiles on update queue before accelerate render interval
+renderacceleratethreshold: 60
+
+# How often to render tiles when backlog is above renderacceleratethreshold
+renderaccelerateinterval: 0.2
+
+# How many update tiles to work on at once (if not defined, default is 1/2 the number of cores)
+tiles-rendered-at-once: 2
+
+# If true, use normal priority threads for rendering (versus low priority) - this can keep rendering
+# from starving on busy Windows boxes (Linux JVMs pretty much ignore thread priority), but may result
+# in more competition for CPU resources with other processes
+usenormalthreadpriority: true
+
+# Save and restore pending tile renders - prevents their loss on server shutdown or /reload
+saverestorepending: true
+
+# Save period for pending jobs (in seconds): periodic saving for crash recovery of jobs
+save-pending-period: 900
+
+# Zoom-out tile update period - how often to scan for and process tile updates into zoom-out tiles (in seconds)
+zoomoutperiod: 30
+
+# Control whether zoom out tiles are validated on startup (can be needed if zoomout processing is interrupted, but can be expensive on large maps)
+initial-zoomout-validate: true
+
+# Default delay on processing of updated tiles, in seconds.  This can reduce potentially expensive re-rendering
+# of frequently updated tiles (such as due to machines, pistons, quarries or other automation).  Values can
+# also be set on individual worlds and individual maps.
+tileupdatedelay: 30
+
+# Tile hashing is used to minimize tile file updates when no changes have occurred - set to false to disable
+enabletilehash: true
+
+# Optional - hide ores: render as normal stone (so that they aren't revealed by maps)
+#hideores: true
+
+# Optional - enabled BetterGrass style rendering of grass and snow block sides
+#better-grass: true
+
+# Optional - enable smooth lighting by default on all maps supporting it (can be set per map as lighting option)
+smooth-lighting: true
+
+# Optional - use world provider lighting table (good for custom worlds with custom lighting curves, like nether)
+#   false=classic Dynmap lighting curve
+use-brightness-table: true
+
+# Optional - render specific block names using the textures and models of another block name: can be used to hide/disguise specific
+#  blocks (e.g. make ores look like stone, hide chests) or to provide simple support for rendering unsupported custom blocks
+block-alias:
+#    "minecraft:quartz_ore": "stone"
+#    "diamond_ore": "coal_ore"
+
+# Default image format for HDMaps (png, jpg, jpg-q75, jpg-q80, jpg-q85, jpg-q90, jpg-q95, jpg-q100)
+# Has no effect on maps with explicit format settings
+image-format: jpg-q90
+
+#  use-generated-textures: if true, use generated textures (same as client); false is static water/lava textures
+#  correct-water-lighting: if true, use corrected water lighting (same as client); false is legacy water (darker)
+#  transparent-leaves: if true, leaves are transparent (lighting-wise): false is needed for some Spout versions that break lighting on leaf blocks
+use-generated-textures: true
+correct-water-lighting: true
+transparent-leaves: true
+
+# ctm-support: if true, Connected Texture Mod (CTM) in texture packs is enabled (default)
+ctm-support: true
+# custom-colors-support: if true, Custom Colors in texture packs is enabled (default)
+custom-colors-support: true
+
+# Control loading of player faces (if set to false, skins are never fetched)
+#fetchskins: false
+
+# Control updating of player faces, once loaded (if faces are being managed by other apps or manually)
+#refreshskins: false
+
+# Customize URL used for fetching player skins (%player% is macro for name)
+skin-url: "http://skins.minecraft.net/MinecraftSkins/%player%.png"
+
+# Enable skins via SkinsRestorer plugin instead of internal legacy implementation (disabled by default)
+#skinsrestorer-integration: true
+
+render-triggers:
+  #- playermove
+  #- playerjoin
+  - blockplaced
+  - blockbreak
+  - leavesdecay
+  - blockburn
+  - chunkgenerated
+  - blockformed
+  - blockfaded
+  - blockspread
+  - pistonmoved
+  - explosion
+  #- blockfromto
+  #- blockphysics
+  - structuregrow
+  - blockgrow
+  #- blockredstone
+
+# Title for the web page - if not specified, defaults to the server's name (unless it is the default of 'Unknown Server')
+#webpage-title: "My Awesome Server Map"
+
+# The path where the tile-files are placed.
+tilespath: web/tiles
+
+# The path where the web-files are located.
+webpath: web
+
+# The path were the /dynmapexp command exports OBJ ZIP files
+exportpath: export
+
+# The network-interface the webserver will bind to (0.0.0.0 for all interfaces, 127.0.0.1 for only local access).
+# If not set, uses same setting as server in server.properties (or 0.0.0.0 if not specified)
+#webserver-bindaddress: 0.0.0.0
+
+# The TCP-port the webserver will listen on.
+webserver-port: 8123
+
+# Maximum concurrent session on internal web server - limits resources used in Bukkit server
+max-sessions: 30
+
+# Disables Webserver portion of Dynmap (Advanced users only)
+disable-webserver: false
+
+# Enable/disable having the web server allow symbolic links (true=compatible with existing code, false=more secure (default))
+allow-symlinks: true
+
+# Enable login support
+login-enabled: false
+# Require login to access website (requires login-enabled: true)
+login-required: false
+
+# Period between tile renders for fullrender, in seconds (non-zero to pace fullrenders, lessen CPU load)
+timesliceinterval: 0.0
+
+# Maximum chunk loads per server tick (1/20th of a second) - reducing this below 90 will impact render performance, but also will reduce server thread load
+maxchunkspertick: 200
+
+# Progress report interval for fullrender/radiusrender, in tiles.  Must be 100 or greater
+progressloginterval: 100
+
+# Parallel fullrender: if defined, number of concurrent threads used for fullrender or radiusrender
+#   Note: setting this will result in much more intensive CPU use, some additional memory use.  Caution should be used when
+#  setting this to equal or exceed the number of physical cores on the system.
+#parallelrendercnt: 4
+
+# Interval the browser should poll for updates.
+updaterate: 2000
+
+# If nonzero, server will pause fullrender/radiusrender processing when 'fullrenderplayerlimit' or more users are logged in
+fullrenderplayerlimit: 0
+# If nonzero, server will pause update render processing when 'updateplayerlimit' or more users are logged in
+updateplayerlimit: 0
+# Target limit on server thread use - msec per tick
+per-tick-time-limit: 50
+# If TPS of server is below this setting, update renders processing is paused
+update-min-tps: 18.0
+# If TPS of server is below this setting, full/radius renders processing is paused
+fullrender-min-tps: 18.0
+# If TPS of server is below this setting, zoom out processing is paused
+zoomout-min-tps: 18.0
+
+showplayerfacesinmenu: true
+
+# Control whether players that are hidden or not on current map are grayed out (true=yes)
+grayplayerswhenhidden: true
+
+# Use player permissions to order player list: first to last, players are ordered by first permission listed that they have
+# That is, anyone with first listed permission goes before anyone with second, etc, with users with none of the nodes going last
+player-sort-permission-nodes:
+  - bukkit.command.op
+
+# Set sidebaropened: 'true' to pin menu sidebar opened permanently, 'pinned' to default the sidebar to pinned, but allow it to unpin
+#sidebaropened: true
+
+# Customized HTTP response headers - add 'id: value' pairs to all HTTP response headers (internal web server only)
+#http-response-headers:
+#    Access-Control-Allow-Origin: "my-domain.com"
+#    X-Custom-Header-Of-Mine: "MyHeaderValue"
+
+# Trusted proxies for web server - which proxy addresses are trusted to supply valid X-Forwarded-For fields
+trusted-proxies:
+  - "127.0.0.1"
+  - "0:0:0:0:0:0:0:1"
+
+# Join/quit message format for web chat: set to "" to disable notice on web UI
+joinmessage: "%playername% joined"
+quitmessage: "%playername% quit"
+
+spammessage: "You may only chat once every %interval% seconds."
+# format for messages from web: %playername% substitutes sender ID (typically IP), %message% includes text
+webmsgformat: "&color;2[WEB] %playername%: &color;f%message%"
+
+# Control whether layer control is presented on the UI (default is true)
+showlayercontrol: true
+
+# Enable checking for banned IPs via banned-ips.txt (internal web server only)
+check-banned-ips: true
+
+# Default selection when map page is loaded
+defaultzoom: 0
+defaultworld: world
+defaultmap: flat
+# (optional) Zoom level and map to switch to when following a player, if possible
+#followzoom: 3
+#followmap: surface
+
+# If true, make persistent record of IP addresses used by player logins, to support web IP to player matching
+persist-ids-by-ip: true
+
+# If true, map text to cyrillic
+cyrillic-support: false
+
+# If true, coordinates will be rounded
+round-coordinates: true
+
+# Messages to customize
+msg:
+    maptypes: "Map Types"
+    players: "Players"
+    chatrequireslogin: "Chat Requires Login"
+    chatnotallowed: "You are not permitted to send chat messages"
+    hiddennamejoin: "Player joined"
+    hiddennamequit: "Player quit"
+
+# URL for client configuration (only need to be tailored for proxies or other non-standard configurations)
+url:
+    # configuration URL
+    #configuration: "up/configuration"
+    # update URL
+    #update: "up/world/{world}/{timestamp}"
+    # sendmessage URL
+    #sendmessage: "up/sendmessage"
+    # login URL
+    #login: "up/login"
+    # register URL
+    #register: "up/register"
+    # tiles base URL
+    #tiles: "tiles/"
+    # markers base URL
+    #markers: "tiles/"
+
+# Customization commands - allows scripts to be run before/after certain events
+custom-commands:
+    image-updates:
+        # Command run just before any image file is written or updated: run with single parameter with fully qualified file name
+        preupdatecommand: ""
+        # Command run just after any image file is written or updated: run with single parameter with fully qualified file name
+        postupdatecommand: ""
+
+# Snapshot cache size, in chunks
+snapshotcachesize: 500
+# Snapshot cache uses soft references (true), else weak references (false)
+soft-ref-cache: true
+
+# Player enter/exit title messages for map markers
+#
+# Processing period - how often to check player positions vs markers - default is 1000ms (1 second)
+#enterexitperiod: 1000
+# Title message fade in time, in ticks (0.05 second intervals) - default is 10 (1/2 second)
+#titleFadeIn: 10
+# Title message stay time, in ticks (0.05 second intervals) - default is 70 (3.5 seconds)
+#titleStay: 70
+# Title message fade out time, in ticks (0.05 seocnd intervals) - default is 20 (1 second)
+#titleFadeOut: 20
+# Enter/exit messages use on screen titles (true - default), if false chat messages are sent instead
+#enterexitUseTitle: true
+# Set true if new enter messages should supercede pending exit messages (vs being queued in order), default false
+#enterReplacesExits: true
+
+# Set to true to enable verbose startup messages - can help with debugging map configuration problems
+# Set to false for a much quieter startup log
+verbose: false
+
+# Enables debugging.
+#debuggers:
+#  - class: org.dynmap.debug.LogDebugger
+# Debug: dump blocks missing render data
+dump-missing-blocks: false
+
+# Have dynmap migrate old chunks to the new format for the current MC version (specifically, for migrating pre-1.13 chunks to 1.13 or 1.14).  This is needed
+# in order to render chunks on an upgraded server (due to various bugs/limitations in CB/spigot 1.13+).  This setting is NOT suggested to be enabled full time,
+# but only long enough to do a fullrender of a migrated world - it should be turned back off once worlds are migrated).  It is EXPERIMENTAL, so be sure to backup
+# your worlds before running with this setting enabled (set to true)
+#
+#migrate-chunks: true
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/minecraft/server/templates/map.nginx.conf.j2	Sat Jul 03 13:23:46 2021 -0500
@@ -0,0 +1,11 @@
+server {
+    listen {{nginx_port}};
+    server_name {{nginx_server_name}};
+    root {{nginx_root_dir}};
+
+    index index.html;
+
+    location / {
+        try_files $uri $uri/ =404;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/minecraft/server/templates/minecraft.service.j2	Sat Jul 03 13:23:46 2021 -0500
@@ -0,0 +1,22 @@
+[Unit]
+Description=Minecraft Server
+Documentation=https://minecraft.gamepedia.com/Tutorials/Setting_up_a_server
+
+Wants=network.target
+After=network.target
+
+[Service]
+User={{minecraft_user}}
+Group={{minecraft_user}}
+WorkingDirectory={{minecraft_dir}}
+Restart=on-failure
+RestartSec=20 5
+ExecStart=/usr/bin/java -Xms{{minecraft_mem}} -Xmx{{minecraft_mem}} -XX:+UseG1GC -XX:+ParallelRefProcEnabled -XX:MaxGCPauseMillis=200 -XX:+UnlockExperimentalVMOptions -XX:+DisableExplicitGC -XX:+AlwaysPreTouch -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 -Dusing.aikars.flags=https://mcflags.emc.gs -Daikars.new.flags=true -jar server.jar nogui
+
+PrivateTmp=true
+ProtectSystem=full
+NoNewPrivileges=true
+PrivateDevices=true
+
+[Install]
+WantedBy=multi-user.target
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/minecraft/server/templates/ops.json.j2	Sat Jul 03 13:23:46 2021 -0500
@@ -0,0 +1,10 @@
+[
+  {% if minecraft_ops_uuid %}
+  {
+    "uuid": "{{minecraft_ops_uuid}}",
+    "name": "{{minecraft_ops_name}}",
+    "level": 4,
+    "bypassesPlayerLimit": true
+  }
+  {% endif %}
+]
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/minecraft/server/vars/main.yaml	Sat Jul 03 13:23:46 2021 -0500
@@ -0,0 +1,6 @@
+---
+
+minecraft_dir: "{{minecraft_parent_dir}}/minecraft/{{minecraft_fork}}"
+minecraft_paper_url: "https://papermc.io/api/v1/paper/{{minecraft_paper_version}}/{{minecraft_paper_build}}/download"
+minecraft_vanilla_url: "https://launcher.mojang.com/v1/objects/{{minecraft_vanilla_hash}}/server.jar"
+minecraft_dynmap_url: "http://dynmap.us/builds/dynmap/Dynmap-{{minecraft_dynmap_version}}.jar"
--- a/minecraft/tasks/adoptopenjdk.yaml	Sat Jul 03 11:16:17 2021 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,21 +0,0 @@
----
-
-- name: configure apt proxy bypass for https
-  become: yes
-  copy: src="03adoptopenjdk-direct" dest="/etc/apt/apt.conf.d/03adoptopenjdk-direct"
-
-- name: add adoptopenjdk apt key
-  become: yes
-  apt_key: url="https://adoptopenjdk.jfrog.io/adoptopenjdk/api/gpg/key/public/"
-
-- name: add adoptopenjdk apt repo
-  become: yes
-  apt_repository: repo="deb https://adoptopenjdk.jfrog.io/adoptopenjdk/deb/ buster main"
-
-- name: update apt package cache
-  become: yes
-  apt: upgrade="dist" autoremove="yes" autoclean="yes" update_cache="yes" cache_valid_time="3600"
-
-- name: install adoptopenjdk hotspot jre 16
-  become: yes
-  apt: name="adoptopenjdk-16-hotspot-jre"
--- a/minecraft/tasks/dynmap.yaml	Sat Jul 03 11:16:17 2021 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,27 +0,0 @@
----
-
-- name: create minecraft plugins dir
-  become: yes
-  file:
-    path: "{{minecraft_dir}}/{{item}}"
-    owner: "{{minecraft_user}}"
-    group: "{{minecraft_user}}"
-    mode: "0755"
-    state: "directory"
-  loop:
-    - "plugins"
-    - "plugins/dynmap"
-
-- name: download dynmap
-  become: yes
-  get_url:
-    url: "{{minecraft_dynmap_url}}"
-    dest: "{{minecraft_dir}}/plugins/dynmap.jar"
-    mode: "0755"
-  notify: restart minecraft
-
-- name: configure dynmap
-  become: yes
-  template:
-    src: "configuration.txt.j2"
-    dest: "{{minecraft_dir}}/plugins/dynmap/configuration.txt"
--- a/minecraft/tasks/main.yaml	Sat Jul 03 11:16:17 2021 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,90 +0,0 @@
----
-
-- name: add minecraft user
-  become: yes
-  user: name="{{minecraft_user}}" home="{{minecraft_dir}}"
-
-- name: install adoptopenjdk
-  include_tasks: adoptopenjdk.yaml
-
-- name: set minecraft fork
-  set_fact: minecraft_url="{{minecraft_vanilla_url}}"
-  when: minecraft_fork == "vanilla"
-
-- name: set minecraft fork
-  set_fact: minecraft_url="{{minecraft_paper_url}}"
-  when: minecraft_fork == "paper"
-
-- name: create minecraft dir
-  become: yes
-  file:
-    path: "{{minecraft_dir}}"
-    owner: "{{minecraft_user}}"
-    group: "{{minecraft_user}}"
-    mode: "0755"
-    state: "directory"
-
-- name: download minecraft
-  become: yes
-  get_url:
-    url: "{{minecraft_url}}"
-    dest: "{{minecraft_dir}}/server.jar"
-    mode: "0755"
-  notify: restart minecraft
-
-- name: configure minecraft eula
-  become: yes
-  copy:
-    src: "{{item}}"
-    dest: "{{minecraft_dir}}/{{item}}"
-    owner: "{{minecraft_user}}"
-    group: "{{minecraft_user}}"
-  loop:
-    - "eula.txt"
-  notify: restart minecraft
-
-- name: configure minecraft ops
-  become: yes
-  template:
-    src: "ops.json.j2"
-    dest: "{{minecraft_dir}}/ops.json"
-    owner: "{{minecraft_user}}"
-    group: "{{minecraft_user}}"
-  notify: restart minecraft
-
-- name: install plugins
-  include_tasks: dynmap.yaml
-  when: minecraft_fork == "paper"
-
-- name: create server.properties
-  become: yes
-  file:
-    path: "{{minecraft_dir}}/server.properties"
-    state: "touch"
-    access_time: "preserve"
-    modification_time: "preserve"
-    owner: "{{minecraft_user}}"
-    group: "{{minecraft_user}}"
-
-- name: configure server.properties
-  become: yes
-  lineinfile:
-    path: "{{minecraft_dir}}/server.properties"
-    regexp: "^{{item.key}}="
-    line: "{{item.key}}={{item.value}}"
-  notify: restart minecraft
-  loop:
-    - {key: "motd", value: "{{minecraft_motd}}"}
-    - {key: "level-seed", value: "{{minecraft_seed}}"}
-    - {key: "difficulty", value: "{{minecraft_difficulty}}"}
-
-- name: install systemd service
-  become: yes
-  template:
-    src: "minecraft.service.j2"
-    dest: "/lib/systemd/system/minecraft.service"
-  notify: restart minecraft
-
-- name: ensure service is started
-  become: yes
-  systemd: name="minecraft.service" enabled="yes" state="started"
--- a/minecraft/templates/configuration.txt.j2	Sat Jul 03 11:16:17 2021 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,492 +0,0 @@
-# All paths in this configuration file are relative to Dynmap's data-folder: minecraft_server/plugins/dynmap/
-
-# All map templates are defined in the templates directory
-# To use the HDMap very-low-res (2 ppb) map templates as world defaults, set value to vlowres
-#   The definitions of these templates are in normal-vlowres.txt, nether-vlowres.txt, and the_end-vlowres.txt
-# To use the HDMap low-res (4 ppb) map templates as world defaults, set value to lowres
-#   The definitions of these templates are in normal-lowres.txt, nether-lowres.txt, and the_end-lowres.txt
-# To use the HDMap hi-res (16 ppb) map templates (these can take a VERY long time for initial fullrender), set value to hires
-#   The definitions of these templates are in normal-hires.txt, nether-hires.txt, and the_end-hires.txt
-# To use the HDMap low-res (4 ppb) map templates, with support for boosting resolution selectively to hi-res (16 ppb), set value to low_boost_hi
-#   The definitions of these templates are in normal-low_boost_hi.txt, nether-low_boost_hi.txt, and the_end-low_boost_hi.txt
-# To use the HDMap hi-res (16 ppb) map templates, with support for boosting resolution selectively to vhi-res (32 ppb), set value to hi_boost_vhi
-#   The definitions of these templates are in normal-hi_boost_vhi.txt, nether-hi_boost_vhi.txt, and the_end-hi_boost_vhi.txt
-# To use the HDMap hi-res (16 ppb) map templates, with support for boosting resolution selectively to xhi-res (64 ppb), set value to hi_boost_xhi
-#   The definitions of these templates are in normal-hi_boost_xhi.txt, nether-hi_boost_xhi.txt, and the_end-hi_boost_xhi.txt
-deftemplatesuffix: hires
-
-# Map storage scheme: only uncomment one 'type' value
-#  filetree: classic and default scheme: tree of files, with all map data under the directory indicated by 'tilespath' setting
-#  sqlite: single SQLite database file (this can get VERY BIG), located at 'dbfile' setting (default is file dynmap.db in data directory)
-#  mysql: MySQL database, at hostname:port in database, accessed via userid with password
-storage:
-  # Filetree storage (standard tree of image files for maps)
-  type: filetree
-  # SQLite db for map storage (uses dbfile as storage location)
-  #type: sqlite
-  #dbfile: dynmap.db
-  # MySQL DB for map storage (at 'hostname':'port' with flags "flags" in database 'database' using user 'userid' password 'password' and table prefix 'prefix')
-  #type: mysql
-  #hostname: localhost
-  #port: 3306
-  #database: dynmap
-  #userid: dynmap
-  #password: dynmap
-  #prefix: ""
-  #flags: "?allowReconnect=true"
-
-components:
-  - class: org.dynmap.ClientConfigurationComponent
-
-  # - class: org.dynmap.InternalClientUpdateComponent
-  #   sendhealth: true
-  #   sendposition: true
-  #   allowwebchat: true
-  #   webchat-interval: 5
-  #   hidewebchatip: false
-  #   trustclientname: false
-  #   includehiddenplayers: false
-  #   # (optional) if true, color codes in player display names are used
-  #   use-name-colors: false
-  #   # (optional) if true, player login IDs will be used for web chat when their IPs match
-  #   use-player-login-ip: true
-  #   # (optional) if use-player-login-ip is true, setting this to true will cause chat messages not matching a known player IP to be ignored
-  #   require-player-login-ip: false
-  #   # (optional) block player login IDs that are banned from chatting
-  #   block-banned-player-chat: true
-  #   # Require login for web-to-server chat (requires login-enabled: true)
-  #   webchat-requires-login: false
-  #   # If set to true, users must have dynmap.webchat permission in order to chat
-  #   webchat-permissions: false
-  #   # Limit length of single chat messages
-  #   chatlengthlimit: 256
-  # #  # Optional - make players hidden when they are inside/underground/in shadows (#=light level: 0=full shadow,15=sky)
-  # #  hideifshadow: 4
-  # #  # Optional - make player hidden when they are under cover (#=sky light level,0=underground,15=open to sky)
-  # #  hideifundercover: 14
-  # #  # (Optional) if true, players that are crouching/sneaking will be hidden
-  #   hideifsneaking: false
-  #   # If true, player positions/status is protected (login with ID with dynmap.playermarkers.seeall permission required for info other than self)
-  #   protected-player-info: false
-  #   # If true, hide players with invisibility potion effects active
-  #   hide-if-invisiblity-potion: true
-  #   # If true, player names are not shown on map, chat, list
-  #   hidenames: false
-
-  - class: org.dynmap.JsonFileClientUpdateComponent
-    writeinterval: 1
-    sendhealth: true
-    sendposition: true
-    allowwebchat: false
-    webchat-interval: 5
-    hidewebchatip: false
-    includehiddenplayers: false
-    use-name-colors: false
-    use-player-login-ip: false
-    require-player-login-ip: false
-    block-banned-player-chat: true
-    hideifshadow: 0
-    hideifundercover: 0
-    hideifsneaking: false
-    # Require login for web-to-server chat (requires login-enabled: true)
-    webchat-requires-login: false
-    # If set to true, users must have dynmap.webchat permission in order to chat
-    webchat-permissions: false
-    # Limit length of single chat messages
-    chatlengthlimit: 256
-    hide-if-invisiblity-potion: true
-    hidenames: false
-
-  - class: org.dynmap.SimpleWebChatComponent
-    allowchat: false
-    # If true, web UI users can supply name for chat using 'playername' URL parameter.  'trustclientname' must also be set true.
-    allowurlname: false
-
-  # Note: this component is needed for the dmarker commands, and for the Marker API to be available to other plugins
-  - class: org.dynmap.MarkersComponent
-    type: markers
-    showlabel: false
-    enablesigns: false
-    # Default marker set for sign markers
-    default-sign-set: markers
-    # (optional) add spawn point markers to standard marker layer
-    showspawn: true
-    spawnicon: world
-    spawnlabel: "Spawn"
-    # (optional) layer for showing offline player's positions (for 'maxofflinetime' minutes after logoff)
-    showofflineplayers: false
-    offlinelabel: "Offline"
-    offlineicon: offlineuser
-    offlinehidebydefault: true
-    offlineminzoom: 0
-    maxofflinetime: 30
-    # (optional) layer for showing player's spawn beds
-    showspawnbeds: false
-    spawnbedlabel: "Spawn Beds"
-    spawnbedicon: bed
-    spawnbedhidebydefault: true
-    spawnbedminzoom: 0
-    spawnbedformat: "%name%'s bed"
-    # (optional) show world border (vanilla 1.8+)
-    showworldborder: true
-    worldborderlabel: "Border"
-
-  - class: org.dynmap.ClientComponent
-    type: chat
-    allowurlname: false
-  - class: org.dynmap.ClientComponent
-    type: chatballoon
-    focuschatballoons: false
-  - class: org.dynmap.ClientComponent
-    type: chatbox
-    showplayerfaces: true
-    messagettl: 5
-    # Optional: set number of lines in scrollable message history: if set, messagettl is not used to age out messages
-    #scrollback: 100
-    # Optional: set maximum number of lines visible for chatbox
-    #visiblelines: 10
-    # Optional: send push button
-    sendbutton: false
-  - class: org.dynmap.ClientComponent
-    type: playermarkers
-    showplayerfaces: true
-    showplayerhealth: true
-    # If true, show player body too (only valid if showplayerfaces=true
-    showplayerbody: false
-    # Option to make player faces small - don't use with showplayerhealth
-    smallplayerfaces: false
-    # Optional - make player faces layer hidden by default
-    hidebydefault: false
-    # Optional - ordering priority in layer menu (low goes before high - default is 0)
-    layerprio: 0
-    # Optional - label for player marker layer (default is 'Players')
-    label: "Players"
-
-  #- class: org.dynmap.ClientComponent
-  #  type: digitalclock
-  - class: org.dynmap.ClientComponent
-    type: link
-
-  - class: org.dynmap.ClientComponent
-    type: timeofdayclock
-    showdigitalclock: true
-    showweather: true
-  # Mouse pointer world coordinate display
-  - class: org.dynmap.ClientComponent
-    type: coord
-    label: "Location"
-    hidey: false
-    show-mcr: false
-    show-chunk: false
-
-  # Note: more than one logo component can be defined
-  #- class: org.dynmap.ClientComponent
-  #  type: logo
-  #  text: "Dynmap"
-  #  #logourl: "images/block_surface.png"
-  #  linkurl: "http://forums.bukkit.org/threads/dynmap.489/"
-  #  # Valid positions: top-left, top-right, bottom-left, bottom-right
-  #  position: bottom-right
-
-  #- class: org.dynmap.ClientComponent
-  #  type: inactive
-  #  timeout: 1800 # in seconds (1800 seconds = 30 minutes)
-  #  redirecturl: inactive.html
-  #  #showmessage: 'You were inactive for too long.'
-
-  #- class: org.dynmap.TestComponent
-  #  stuff: "This is some configuration-value"
-
-# Treat hiddenplayers.txt as a whitelist for players to be shown on the map? (Default false)
-display-whitelist: false
-
-# How often a tile gets rendered (in seconds).
-renderinterval: 1
-
-# How many tiles on update queue before accelerate render interval
-renderacceleratethreshold: 60
-
-# How often to render tiles when backlog is above renderacceleratethreshold
-renderaccelerateinterval: 0.2
-
-# How many update tiles to work on at once (if not defined, default is 1/2 the number of cores)
-tiles-rendered-at-once: 2
-
-# If true, use normal priority threads for rendering (versus low priority) - this can keep rendering
-# from starving on busy Windows boxes (Linux JVMs pretty much ignore thread priority), but may result
-# in more competition for CPU resources with other processes
-usenormalthreadpriority: true
-
-# Save and restore pending tile renders - prevents their loss on server shutdown or /reload
-saverestorepending: true
-
-# Save period for pending jobs (in seconds): periodic saving for crash recovery of jobs
-save-pending-period: 900
-
-# Zoom-out tile update period - how often to scan for and process tile updates into zoom-out tiles (in seconds)
-zoomoutperiod: 30
-
-# Control whether zoom out tiles are validated on startup (can be needed if zoomout processing is interrupted, but can be expensive on large maps)
-initial-zoomout-validate: true
-
-# Default delay on processing of updated tiles, in seconds.  This can reduce potentially expensive re-rendering
-# of frequently updated tiles (such as due to machines, pistons, quarries or other automation).  Values can
-# also be set on individual worlds and individual maps.
-tileupdatedelay: 30
-
-# Tile hashing is used to minimize tile file updates when no changes have occurred - set to false to disable
-enabletilehash: true
-
-# Optional - hide ores: render as normal stone (so that they aren't revealed by maps)
-#hideores: true
-
-# Optional - enabled BetterGrass style rendering of grass and snow block sides
-#better-grass: true
-
-# Optional - enable smooth lighting by default on all maps supporting it (can be set per map as lighting option)
-smooth-lighting: true
-
-# Optional - use world provider lighting table (good for custom worlds with custom lighting curves, like nether)
-#   false=classic Dynmap lighting curve
-use-brightness-table: true
-
-# Optional - render specific block names using the textures and models of another block name: can be used to hide/disguise specific
-#  blocks (e.g. make ores look like stone, hide chests) or to provide simple support for rendering unsupported custom blocks
-block-alias:
-#    "minecraft:quartz_ore": "stone"
-#    "diamond_ore": "coal_ore"
-
-# Default image format for HDMaps (png, jpg, jpg-q75, jpg-q80, jpg-q85, jpg-q90, jpg-q95, jpg-q100)
-# Has no effect on maps with explicit format settings
-image-format: jpg-q90
-
-#  use-generated-textures: if true, use generated textures (same as client); false is static water/lava textures
-#  correct-water-lighting: if true, use corrected water lighting (same as client); false is legacy water (darker)
-#  transparent-leaves: if true, leaves are transparent (lighting-wise): false is needed for some Spout versions that break lighting on leaf blocks
-use-generated-textures: true
-correct-water-lighting: true
-transparent-leaves: true
-
-# ctm-support: if true, Connected Texture Mod (CTM) in texture packs is enabled (default)
-ctm-support: true
-# custom-colors-support: if true, Custom Colors in texture packs is enabled (default)
-custom-colors-support: true
-
-# Control loading of player faces (if set to false, skins are never fetched)
-#fetchskins: false
-
-# Control updating of player faces, once loaded (if faces are being managed by other apps or manually)
-#refreshskins: false
-
-# Customize URL used for fetching player skins (%player% is macro for name)
-skin-url: "http://skins.minecraft.net/MinecraftSkins/%player%.png"
-
-# Enable skins via SkinsRestorer plugin instead of internal legacy implementation (disabled by default)
-#skinsrestorer-integration: true
-
-render-triggers:
-  #- playermove
-  #- playerjoin
-  - blockplaced
-  - blockbreak
-  - leavesdecay
-  - blockburn
-  - chunkgenerated
-  - blockformed
-  - blockfaded
-  - blockspread
-  - pistonmoved
-  - explosion
-  #- blockfromto
-  #- blockphysics
-  - structuregrow
-  - blockgrow
-  #- blockredstone
-
-# Title for the web page - if not specified, defaults to the server's name (unless it is the default of 'Unknown Server')
-#webpage-title: "My Awesome Server Map"
-
-# The path where the tile-files are placed.
-tilespath: web/tiles
-
-# The path where the web-files are located.
-webpath: web
-
-# The path were the /dynmapexp command exports OBJ ZIP files
-exportpath: export
-
-# The network-interface the webserver will bind to (0.0.0.0 for all interfaces, 127.0.0.1 for only local access).
-# If not set, uses same setting as server in server.properties (or 0.0.0.0 if not specified)
-#webserver-bindaddress: 0.0.0.0
-
-# The TCP-port the webserver will listen on.
-webserver-port: 8123
-
-# Maximum concurrent session on internal web server - limits resources used in Bukkit server
-max-sessions: 30
-
-# Disables Webserver portion of Dynmap (Advanced users only)
-disable-webserver: false
-
-# Enable/disable having the web server allow symbolic links (true=compatible with existing code, false=more secure (default))
-allow-symlinks: true
-
-# Enable login support
-login-enabled: false
-# Require login to access website (requires login-enabled: true)
-login-required: false
-
-# Period between tile renders for fullrender, in seconds (non-zero to pace fullrenders, lessen CPU load)
-timesliceinterval: 0.0
-
-# Maximum chunk loads per server tick (1/20th of a second) - reducing this below 90 will impact render performance, but also will reduce server thread load
-maxchunkspertick: 200
-
-# Progress report interval for fullrender/radiusrender, in tiles.  Must be 100 or greater
-progressloginterval: 100
-
-# Parallel fullrender: if defined, number of concurrent threads used for fullrender or radiusrender
-#   Note: setting this will result in much more intensive CPU use, some additional memory use.  Caution should be used when
-#  setting this to equal or exceed the number of physical cores on the system.
-#parallelrendercnt: 4
-
-# Interval the browser should poll for updates.
-updaterate: 2000
-
-# If nonzero, server will pause fullrender/radiusrender processing when 'fullrenderplayerlimit' or more users are logged in
-fullrenderplayerlimit: 0
-# If nonzero, server will pause update render processing when 'updateplayerlimit' or more users are logged in
-updateplayerlimit: 0
-# Target limit on server thread use - msec per tick
-per-tick-time-limit: 50
-# If TPS of server is below this setting, update renders processing is paused
-update-min-tps: 18.0
-# If TPS of server is below this setting, full/radius renders processing is paused
-fullrender-min-tps: 18.0
-# If TPS of server is below this setting, zoom out processing is paused
-zoomout-min-tps: 18.0
-
-showplayerfacesinmenu: true
-
-# Control whether players that are hidden or not on current map are grayed out (true=yes)
-grayplayerswhenhidden: true
-
-# Use player permissions to order player list: first to last, players are ordered by first permission listed that they have
-# That is, anyone with first listed permission goes before anyone with second, etc, with users with none of the nodes going last
-player-sort-permission-nodes:
-  - bukkit.command.op
-
-# Set sidebaropened: 'true' to pin menu sidebar opened permanently, 'pinned' to default the sidebar to pinned, but allow it to unpin
-#sidebaropened: true
-
-# Customized HTTP response headers - add 'id: value' pairs to all HTTP response headers (internal web server only)
-#http-response-headers:
-#    Access-Control-Allow-Origin: "my-domain.com"
-#    X-Custom-Header-Of-Mine: "MyHeaderValue"
-
-# Trusted proxies for web server - which proxy addresses are trusted to supply valid X-Forwarded-For fields
-trusted-proxies:
-  - "127.0.0.1"
-  - "0:0:0:0:0:0:0:1"
-
-# Join/quit message format for web chat: set to "" to disable notice on web UI
-joinmessage: "%playername% joined"
-quitmessage: "%playername% quit"
-
-spammessage: "You may only chat once every %interval% seconds."
-# format for messages from web: %playername% substitutes sender ID (typically IP), %message% includes text
-webmsgformat: "&color;2[WEB] %playername%: &color;f%message%"
-
-# Control whether layer control is presented on the UI (default is true)
-showlayercontrol: true
-
-# Enable checking for banned IPs via banned-ips.txt (internal web server only)
-check-banned-ips: true
-
-# Default selection when map page is loaded
-defaultzoom: 0
-defaultworld: world
-defaultmap: flat
-# (optional) Zoom level and map to switch to when following a player, if possible
-#followzoom: 3
-#followmap: surface
-
-# If true, make persistent record of IP addresses used by player logins, to support web IP to player matching
-persist-ids-by-ip: true
-
-# If true, map text to cyrillic
-cyrillic-support: false
-
-# If true, coordinates will be rounded
-round-coordinates: true
-
-# Messages to customize
-msg:
-    maptypes: "Map Types"
-    players: "Players"
-    chatrequireslogin: "Chat Requires Login"
-    chatnotallowed: "You are not permitted to send chat messages"
-    hiddennamejoin: "Player joined"
-    hiddennamequit: "Player quit"
-
-# URL for client configuration (only need to be tailored for proxies or other non-standard configurations)
-url:
-    # configuration URL
-    #configuration: "up/configuration"
-    # update URL
-    #update: "up/world/{world}/{timestamp}"
-    # sendmessage URL
-    #sendmessage: "up/sendmessage"
-    # login URL
-    #login: "up/login"
-    # register URL
-    #register: "up/register"
-    # tiles base URL
-    #tiles: "tiles/"
-    # markers base URL
-    #markers: "tiles/"
-
-# Customization commands - allows scripts to be run before/after certain events
-custom-commands:
-    image-updates:
-        # Command run just before any image file is written or updated: run with single parameter with fully qualified file name
-        preupdatecommand: ""
-        # Command run just after any image file is written or updated: run with single parameter with fully qualified file name
-        postupdatecommand: ""
-
-# Snapshot cache size, in chunks
-snapshotcachesize: 500
-# Snapshot cache uses soft references (true), else weak references (false)
-soft-ref-cache: true
-
-# Player enter/exit title messages for map markers
-#
-# Processing period - how often to check player positions vs markers - default is 1000ms (1 second)
-#enterexitperiod: 1000
-# Title message fade in time, in ticks (0.05 second intervals) - default is 10 (1/2 second)
-#titleFadeIn: 10
-# Title message stay time, in ticks (0.05 second intervals) - default is 70 (3.5 seconds)
-#titleStay: 70
-# Title message fade out time, in ticks (0.05 seocnd intervals) - default is 20 (1 second)
-#titleFadeOut: 20
-# Enter/exit messages use on screen titles (true - default), if false chat messages are sent instead
-#enterexitUseTitle: true
-# Set true if new enter messages should supercede pending exit messages (vs being queued in order), default false
-#enterReplacesExits: true
-
-# Set to true to enable verbose startup messages - can help with debugging map configuration problems
-# Set to false for a much quieter startup log
-verbose: false
-
-# Enables debugging.
-#debuggers:
-#  - class: org.dynmap.debug.LogDebugger
-# Debug: dump blocks missing render data
-dump-missing-blocks: false
-
-# Have dynmap migrate old chunks to the new format for the current MC version (specifically, for migrating pre-1.13 chunks to 1.13 or 1.14).  This is needed
-# in order to render chunks on an upgraded server (due to various bugs/limitations in CB/spigot 1.13+).  This setting is NOT suggested to be enabled full time,
-# but only long enough to do a fullrender of a migrated world - it should be turned back off once worlds are migrated).  It is EXPERIMENTAL, so be sure to backup
-# your worlds before running with this setting enabled (set to true)
-#
-#migrate-chunks: true
--- a/minecraft/templates/map.nginx.conf.j2	Sat Jul 03 11:16:17 2021 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,11 +0,0 @@
-server {
-    listen {{nginx_port}};
-    server_name {{nginx_server_name}};
-    root {{nginx_root_dir}};
-
-    index index.html;
-
-    location / {
-        try_files $uri $uri/ =404;
-    }
-}
--- a/minecraft/templates/minecraft.service.j2	Sat Jul 03 11:16:17 2021 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,22 +0,0 @@
-[Unit]
-Description=Minecraft Server
-Documentation=https://minecraft.gamepedia.com/Tutorials/Setting_up_a_server
-
-Wants=network.target
-After=network.target
-
-[Service]
-User={{minecraft_user}}
-Group={{minecraft_user}}
-WorkingDirectory={{minecraft_dir}}
-Restart=on-failure
-RestartSec=20 5
-ExecStart=/usr/bin/java -Xms{{minecraft_mem}} -Xmx{{minecraft_mem}} -XX:+UseG1GC -XX:+ParallelRefProcEnabled -XX:MaxGCPauseMillis=200 -XX:+UnlockExperimentalVMOptions -XX:+DisableExplicitGC -XX:+AlwaysPreTouch -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 -Dusing.aikars.flags=https://mcflags.emc.gs -Daikars.new.flags=true -jar server.jar nogui
-
-PrivateTmp=true
-ProtectSystem=full
-NoNewPrivileges=true
-PrivateDevices=true
-
-[Install]
-WantedBy=multi-user.target
--- a/minecraft/templates/ops.json.j2	Sat Jul 03 11:16:17 2021 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,10 +0,0 @@
-[
-  {% if minecraft_ops_uuid %}
-  {
-    "uuid": "{{minecraft_ops_uuid}}",
-    "name": "{{minecraft_ops_name}}",
-    "level": 4,
-    "bypassesPlayerLimit": true
-  }
-  {% endif %}
-]
--- a/minecraft/vars/main.yaml	Sat Jul 03 11:16:17 2021 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,6 +0,0 @@
----
-
-minecraft_dir: "{{minecraft_parent_dir}}/minecraft/{{minecraft_fork}}"
-minecraft_paper_url: "https://papermc.io/api/v1/paper/{{minecraft_paper_version}}/{{minecraft_paper_build}}/download"
-minecraft_vanilla_url: "https://launcher.mojang.com/v1/objects/{{minecraft_vanilla_hash}}/server.jar"
-minecraft_dynmap_url: "http://dynmap.us/builds/dynmap/Dynmap-{{minecraft_dynmap_version}}.jar"