From b7bbe1b0a6cf33828313738fa02c84b8aa6ad153 Mon Sep 17 00:00:00 2001 From: Luc Ritchie Date: Sun, 6 Feb 2022 16:51:28 -0500 Subject: [PATCH] Support Spigot-style and vanilla-style world zips, for any server type (#1305) --- scripts/start-setupWorld | 63 +++++++++++++++--- .../docker-compose.yml | 15 +++++ .../verify.sh | 5 ++ .../worlds/world-for-testing.zip | Bin 0 -> 2460 bytes .../docker-compose.yml | 14 ++++ .../verify.sh | 5 ++ .../worlds/world-for-testing.zip | Bin 0 -> 2460 bytes .../docker-compose.yml | 15 +++++ .../spigot_world_for_spigot_server/verify.sh | 4 ++ .../worlds/world-for-testing.zip | Bin 0 -> 1674 bytes .../docker-compose.yml | 14 ++++ .../spigot_world_for_vanilla_server/verify.sh | 4 ++ .../worlds/world-for-testing.zip | Bin 0 -> 1674 bytes .../docker-compose.yml | 15 +++++ .../vanilla_world_for_spigot_server/verify.sh | 3 + .../worlds/world-for-testing.zip | Bin 0 -> 782 bytes .../docker-compose.yml | 14 ++++ .../verify.sh | 3 + .../worlds/world-for-testing.zip | Bin 0 -> 782 bytes 19 files changed, 163 insertions(+), 11 deletions(-) create mode 100644 tests/setuponlytests/conflicting_world_for_spigot_server/docker-compose.yml create mode 100644 tests/setuponlytests/conflicting_world_for_spigot_server/verify.sh create mode 100644 tests/setuponlytests/conflicting_world_for_spigot_server/worlds/world-for-testing.zip create mode 100644 tests/setuponlytests/conflicting_world_for_vanilla_server/docker-compose.yml create mode 100644 tests/setuponlytests/conflicting_world_for_vanilla_server/verify.sh create mode 100644 tests/setuponlytests/conflicting_world_for_vanilla_server/worlds/world-for-testing.zip create mode 100644 tests/setuponlytests/spigot_world_for_spigot_server/docker-compose.yml create mode 100644 tests/setuponlytests/spigot_world_for_spigot_server/verify.sh create mode 100644 tests/setuponlytests/spigot_world_for_spigot_server/worlds/world-for-testing.zip create mode 100644 tests/setuponlytests/spigot_world_for_vanilla_server/docker-compose.yml create mode 100644 tests/setuponlytests/spigot_world_for_vanilla_server/verify.sh create mode 100644 tests/setuponlytests/spigot_world_for_vanilla_server/worlds/world-for-testing.zip create mode 100644 tests/setuponlytests/vanilla_world_for_spigot_server/docker-compose.yml create mode 100644 tests/setuponlytests/vanilla_world_for_spigot_server/verify.sh create mode 100644 tests/setuponlytests/vanilla_world_for_spigot_server/worlds/world-for-testing.zip create mode 100644 tests/setuponlytests/vanilla_world_for_vanilla_server/docker-compose.yml create mode 100644 tests/setuponlytests/vanilla_world_for_vanilla_server/verify.sh create mode 100644 tests/setuponlytests/vanilla_world_for_vanilla_server/worlds/world-for-testing.zip diff --git a/scripts/start-setupWorld b/scripts/start-setupWorld index dc3901e9..10c9b486 100755 --- a/scripts/start-setupWorld +++ b/scripts/start-setupWorld @@ -37,11 +37,7 @@ if [[ "$WORLD" ]] && ( isTrue "${FORCE_WORLD_COPY}" || [ ! -d "$worldDest" ] ); exit 1 fi - if [ "$FAMILY" = "SPIGOT" ]; then - baseDirs=$(find /tmp/world-data -name "level.dat" -not -path "*_nether*" -not -path "*_the_end*" -exec dirname "{}" \;) - else - baseDirs=$(find /tmp/world-data -name "level.dat" -exec dirname "{}" \;) - fi + baseDirs=$(find /tmp/world-data -name "level.dat" -exec dirname "{}" \;) if ! [[ $baseDirs ]]; then log "ERROR world content is not valid since level.dat could not be found" @@ -50,20 +46,65 @@ if [[ "$WORLD" ]] && ( isTrue "${FORCE_WORLD_COPY}" || [ ! -d "$worldDest" ] ); count=$(echo "$baseDirs" | wc -l) if [[ $count -gt 1 ]]; then - baseDir="$(echo "$baseDirs" | sed -n ${WORLD_INDEX:-1}p)" - baseName=$(basename "$baseDir") - log "WARN multiple levels found, picking: $baseName" + baseDirsNoSpigotSuffix=$(echo "$baseDirs" | sed -re 's:(_nether|_the_end)/?$::' | sort -u) + if [ $(echo "$baseDirsNoSpigotSuffix" | wc -l) -eq 1 ]; then + baseDir="$baseDirsNoSpigotSuffix" + baseName=$(basename "$baseDir") + log "Found Spigot naming conventions, taking $baseName as main dimension" + else + baseDir="$(echo "$baseDirs" | sed -n ${WORLD_INDEX:-1}p)" + baseName=$(basename "$baseDir") + log "WARN multiple levels found, picking: $baseName" + fi elif [[ $count -gt 0 ]]; then baseDir="$baseDirs" else log "ERROR invalid world content" exit 1 fi + + if [ -d "${baseDir}_nether/DIM-1" ]; then + if [ -d "$baseDir/DIM-1" ]; then + log "WARN found Nether dimension in both $baseDir and ${baseDir}_nether, picking ${baseDir}_nether" + rm -r "$baseDir/DIM-1" + fi + fi + if [ -d "${baseDir}_the_end/DIM1" ]; then + if [ -d "$baseDir/DIM1" ]; then + log "WARN found End dimension in both $baseDir and ${baseDir}_the_end, picking ${baseDir}_the_end" + rm -r "$baseDir/DIM1" + fi + fi + + log "Copying world..." rsync --remove-source-files --recursive --delete "$baseDir/" "$worldDest" + if [ "$FAMILY" = "SPIGOT" ]; then - log "Copying end and nether ..." - [ -d "${baseDir}_nether" ] && rsync --remove-source-files --recursive --delete "${baseDir}_nether/" "${worldDest}_nether" - [ -d "${baseDir}_the_end" ] && rsync --remove-source-files --recursive --delete "${baseDir}_the_end/" "${worldDest}_the_end" + if [ -d "${baseDir}_nether" ]; then + log "Copying Spigot Nether..." + rsync --remove-source-files --recursive --delete "${baseDir}_nether/" "${worldDest}_nether" + elif [ -d "$worldDest/DIM-1" ]; then + log "Moving Nether to Spigot location..." + mkdir -p "${worldDest}_nether" + mv -f "$worldDest/DIM-1" "${worldDest}_nether/" + fi + if [ -d "${baseDir}_the_end" ]; then + log "Copying Spigot End..." + rsync --remove-source-files --recursive --delete "${baseDir}_the_end/" "${worldDest}_the_end" + elif [ -d "$worldDest/DIM1" ]; then + log "Moving End to Spigot location..." + mkdir -p "${worldDest}_the_end" + mv -f "$worldDest/DIM1" "${worldDest}_the_end/" + fi + else + if [ -d "${baseDir}_nether/DIM-1" ]; then + log "Copying Spigot Nether to vanilla location..." + rsync --remove-source-files --recursive --delete "${baseDir}_nether/DIM-1" "${worldDest}/" + fi + if [ -d "${baseDir}_the_end/DIM1" ]; then + log "Copying Spigot End to vanilla location..." + rsync --remove-source-files --recursive --delete "${baseDir}_the_end/DIM1" "${worldDest}/" + fi fi elif [ -d "$WORLD" ]; then log "Cloning world directory from $WORLD ..." diff --git a/tests/setuponlytests/conflicting_world_for_spigot_server/docker-compose.yml b/tests/setuponlytests/conflicting_world_for_spigot_server/docker-compose.yml new file mode 100644 index 00000000..b8172d99 --- /dev/null +++ b/tests/setuponlytests/conflicting_world_for_spigot_server/docker-compose.yml @@ -0,0 +1,15 @@ +version: "3" + +services: + mc: + restart: "no" + image: ${IMAGE_TO_TEST:-itzg/minecraft-server} + environment: + EULA: "TRUE" + SETUP_ONLY: "TRUE" + VERSION: ${MINECRAFT_VERSION:-LATEST} + TYPE: "PAPER" + WORLD: /worlds/world-for-testing.zip + volumes: + - ./worlds:/worlds:ro + - ./data:/data diff --git a/tests/setuponlytests/conflicting_world_for_spigot_server/verify.sh b/tests/setuponlytests/conflicting_world_for_spigot_server/verify.sh new file mode 100644 index 00000000..75daef8d --- /dev/null +++ b/tests/setuponlytests/conflicting_world_for_spigot_server/verify.sh @@ -0,0 +1,5 @@ +mc-image-helper assert fileExists world/level.dat && \ +mc-image-helper assert fileExists world_nether/DIM-1/some_spigot_nether_file && \ +mc-image-helper assert fileExists world_the_end/DIM1/some_spigot_end_file && \ +! mc-image-helper assert fileExists world_nether/DIM-1/some_vanilla_nether_file && \ +! mc-image-helper assert fileExists world_the_end/DIM1/some_vanilla_end_file diff --git a/tests/setuponlytests/conflicting_world_for_spigot_server/worlds/world-for-testing.zip b/tests/setuponlytests/conflicting_world_for_spigot_server/worlds/world-for-testing.zip new file mode 100644 index 0000000000000000000000000000000000000000..20520f029511e5279fdb2781468e9ff7f58c4223 GIT binary patch literal 2460 zcmai$K}#D!6vrnfDOhW1F?aU_ZvZvqw&2RJmr1~jec+BuKb+%Fy57F%@ zd&Tx!yZl?L9n_otF0X9XMp^#ryPz^0H>3UhynXvhE7#`f~`prfV_#SW8y{$&T#kiP&m-YPD zr@F^kk|5x%E^iC93jG5tI8DqLCQ1YiCKe(UM_DRNTG>L=Tr_!Shqu+tn1Yv8$E~4b z(oFF}WcdF2py0~&V<;O6UfOU86USL5swes@`{0HOA^Urc?N%omUip}w8~Sr_S$*6X zKBh<(2*#gWDC9g#$Wo>d$x~a>&l0j>2&q_y6wss)ZCOe-8@Z9!d0XvFM+NkZ4L;%{ z(vu}r3`>X@R!mw!lF8U*Z;db$g#>UcBnRAVkO?N?IPfWfN7@0LS{rI=6FeV-aq2(m zU~M^-`|LDYQ}P(XQO@)(g3Qu_7%VM^Ewf}w@uASx1&NVs3*^*VQMycWIVR%){#nSH zFRje76KR!6Wq6h^BZe|nY=FjMb7-QqmPGe$=!7jSIY$7kI2nMp{<{N&w6wy5gJI!0 za%tVkTy(Y#e;*JYueT@5YO@AxEI$XER$r2RZ)K~E#3FPA&>EBhDD6qXHoOQ(O4Ak- WOOb>YAHjaJarizjGIjuH#vTA4FE0oH literal 0 HcmV?d00001 diff --git a/tests/setuponlytests/conflicting_world_for_vanilla_server/docker-compose.yml b/tests/setuponlytests/conflicting_world_for_vanilla_server/docker-compose.yml new file mode 100644 index 00000000..4a30460e --- /dev/null +++ b/tests/setuponlytests/conflicting_world_for_vanilla_server/docker-compose.yml @@ -0,0 +1,14 @@ +version: "3" + +services: + mc: + restart: "no" + image: ${IMAGE_TO_TEST:-itzg/minecraft-server} + environment: + EULA: "TRUE" + SETUP_ONLY: "TRUE" + VERSION: ${MINECRAFT_VERSION:-LATEST} + WORLD: /worlds/world-for-testing.zip + volumes: + - ./worlds:/worlds:ro + - ./data:/data diff --git a/tests/setuponlytests/conflicting_world_for_vanilla_server/verify.sh b/tests/setuponlytests/conflicting_world_for_vanilla_server/verify.sh new file mode 100644 index 00000000..020b8637 --- /dev/null +++ b/tests/setuponlytests/conflicting_world_for_vanilla_server/verify.sh @@ -0,0 +1,5 @@ +mc-image-helper assert fileExists world/level.dat && \ +mc-image-helper assert fileExists world/DIM-1/some_spigot_nether_file && \ +mc-image-helper assert fileExists world/DIM1/some_spigot_end_file && \ +! mc-image-helper assert fileExists world/DIM-1/some_vanilla_nether_file && \ +! mc-image-helper assert fileExists world/DIM1/some_vanilla_end_file diff --git a/tests/setuponlytests/conflicting_world_for_vanilla_server/worlds/world-for-testing.zip b/tests/setuponlytests/conflicting_world_for_vanilla_server/worlds/world-for-testing.zip new file mode 100644 index 0000000000000000000000000000000000000000..20520f029511e5279fdb2781468e9ff7f58c4223 GIT binary patch literal 2460 zcmai$K}#D!6vrnfDOhW1F?aU_ZvZvqw&2RJmr1~jec+BuKb+%Fy57F%@ zd&Tx!yZl?L9n_otF0X9XMp^#ryPz^0H>3UhynXvhE7#`f~`prfV_#SW8y{$&T#kiP&m-YPD zr@F^kk|5x%E^iC93jG5tI8DqLCQ1YiCKe(UM_DRNTG>L=Tr_!Shqu+tn1Yv8$E~4b z(oFF}WcdF2py0~&V<;O6UfOU86USL5swes@`{0HOA^Urc?N%omUip}w8~Sr_S$*6X zKBh<(2*#gWDC9g#$Wo>d$x~a>&l0j>2&q_y6wss)ZCOe-8@Z9!d0XvFM+NkZ4L;%{ z(vu}r3`>X@R!mw!lF8U*Z;db$g#>UcBnRAVkO?N?IPfWfN7@0LS{rI=6FeV-aq2(m zU~M^-`|LDYQ}P(XQO@)(g3Qu_7%VM^Ewf}w@uASx1&NVs3*^*VQMycWIVR%){#nSH zFRje76KR!6Wq6h^BZe|nY=FjMb7-QqmPGe$=!7jSIY$7kI2nMp{<{N&w6wy5gJI!0 za%tVkTy(Y#e;*JYueT@5YO@AxEI$XER$r2RZ)K~E#3FPA&>EBhDD6qXHoOQ(O4Ak- WOOb>YAHjaJarizjGIjuH#vTA4FE0oH literal 0 HcmV?d00001 diff --git a/tests/setuponlytests/spigot_world_for_spigot_server/docker-compose.yml b/tests/setuponlytests/spigot_world_for_spigot_server/docker-compose.yml new file mode 100644 index 00000000..b8172d99 --- /dev/null +++ b/tests/setuponlytests/spigot_world_for_spigot_server/docker-compose.yml @@ -0,0 +1,15 @@ +version: "3" + +services: + mc: + restart: "no" + image: ${IMAGE_TO_TEST:-itzg/minecraft-server} + environment: + EULA: "TRUE" + SETUP_ONLY: "TRUE" + VERSION: ${MINECRAFT_VERSION:-LATEST} + TYPE: "PAPER" + WORLD: /worlds/world-for-testing.zip + volumes: + - ./worlds:/worlds:ro + - ./data:/data diff --git a/tests/setuponlytests/spigot_world_for_spigot_server/verify.sh b/tests/setuponlytests/spigot_world_for_spigot_server/verify.sh new file mode 100644 index 00000000..233a8497 --- /dev/null +++ b/tests/setuponlytests/spigot_world_for_spigot_server/verify.sh @@ -0,0 +1,4 @@ +mc-image-helper assert fileExists world/level.dat && \ +mc-image-helper assert fileExists world/some_overworld_file && \ +mc-image-helper assert fileExists world_nether/DIM-1/some_nether_file && \ +mc-image-helper assert fileExists world_the_end/DIM1/some_end_file diff --git a/tests/setuponlytests/spigot_world_for_spigot_server/worlds/world-for-testing.zip b/tests/setuponlytests/spigot_world_for_spigot_server/worlds/world-for-testing.zip new file mode 100644 index 0000000000000000000000000000000000000000..8f779b16b68f96481f74c5038b1a83471bd3a851 GIT binary patch literal 1674 zcmb7_ze>YU6o*fnR;YqF_@_`&oLVU=PHuweph!!Hb`F7FQAk^)Sah2c z#XBVy*&r0*g&icW2UgBuGEqdpo>#hEhw0dn2Ral6_9i3FRc0FhwS2z0P z(6SjSU3gOmA}FM2a{SIjENdaC!4~bNH}qqYiE5$=#X}XoiNz!n99oJUQbMH(968WH z2@^G>(rZ>+3-W#+7GQKhpS%-UuM^rC3z&K%6cgb2{#av%`hjrjhXJm)BMcvE@QGbX z-a&7QiXksQJSON3qNz8A4fp{sKp1_PV#*a-bqE9Kcux^f9tV*BfjL0$Q*xl*rtn68 zTA=DeqmFFqmSGuQf~c)Zn%h!rzh@XgEtn#p6tVSW4q%;&OUusSfq@*}m-GX{2jCwY CSa*W} literal 0 HcmV?d00001 diff --git a/tests/setuponlytests/spigot_world_for_vanilla_server/docker-compose.yml b/tests/setuponlytests/spigot_world_for_vanilla_server/docker-compose.yml new file mode 100644 index 00000000..4a30460e --- /dev/null +++ b/tests/setuponlytests/spigot_world_for_vanilla_server/docker-compose.yml @@ -0,0 +1,14 @@ +version: "3" + +services: + mc: + restart: "no" + image: ${IMAGE_TO_TEST:-itzg/minecraft-server} + environment: + EULA: "TRUE" + SETUP_ONLY: "TRUE" + VERSION: ${MINECRAFT_VERSION:-LATEST} + WORLD: /worlds/world-for-testing.zip + volumes: + - ./worlds:/worlds:ro + - ./data:/data diff --git a/tests/setuponlytests/spigot_world_for_vanilla_server/verify.sh b/tests/setuponlytests/spigot_world_for_vanilla_server/verify.sh new file mode 100644 index 00000000..a0d1a149 --- /dev/null +++ b/tests/setuponlytests/spigot_world_for_vanilla_server/verify.sh @@ -0,0 +1,4 @@ +mc-image-helper assert fileExists world/level.dat && \ +mc-image-helper assert fileExists world/some_overworld_file && \ +mc-image-helper assert fileExists world/DIM-1/some_nether_file && \ +mc-image-helper assert fileExists world/DIM1/some_end_file diff --git a/tests/setuponlytests/spigot_world_for_vanilla_server/worlds/world-for-testing.zip b/tests/setuponlytests/spigot_world_for_vanilla_server/worlds/world-for-testing.zip new file mode 100644 index 0000000000000000000000000000000000000000..8f779b16b68f96481f74c5038b1a83471bd3a851 GIT binary patch literal 1674 zcmb7_ze>YU6o*fnR;YqF_@_`&oLVU=PHuweph!!Hb`F7FQAk^)Sah2c z#XBVy*&r0*g&icW2UgBuGEqdpo>#hEhw0dn2Ral6_9i3FRc0FhwS2z0P z(6SjSU3gOmA}FM2a{SIjENdaC!4~bNH}qqYiE5$=#X}XoiNz!n99oJUQbMH(968WH z2@^G>(rZ>+3-W#+7GQKhpS%-UuM^rC3z&K%6cgb2{#av%`hjrjhXJm)BMcvE@QGbX z-a&7QiXksQJSON3qNz8A4fp{sKp1_PV#*a-bqE9Kcux^f9tV*BfjL0$Q*xl*rtn68 zTA=DeqmFFqmSGuQf~c)Zn%h!rzh@XgEtn#p6tVSW4q%;&OUusSfq@*}m-GX{2jCwY CSa*W} literal 0 HcmV?d00001 diff --git a/tests/setuponlytests/vanilla_world_for_spigot_server/docker-compose.yml b/tests/setuponlytests/vanilla_world_for_spigot_server/docker-compose.yml new file mode 100644 index 00000000..b8172d99 --- /dev/null +++ b/tests/setuponlytests/vanilla_world_for_spigot_server/docker-compose.yml @@ -0,0 +1,15 @@ +version: "3" + +services: + mc: + restart: "no" + image: ${IMAGE_TO_TEST:-itzg/minecraft-server} + environment: + EULA: "TRUE" + SETUP_ONLY: "TRUE" + VERSION: ${MINECRAFT_VERSION:-LATEST} + TYPE: "PAPER" + WORLD: /worlds/world-for-testing.zip + volumes: + - ./worlds:/worlds:ro + - ./data:/data diff --git a/tests/setuponlytests/vanilla_world_for_spigot_server/verify.sh b/tests/setuponlytests/vanilla_world_for_spigot_server/verify.sh new file mode 100644 index 00000000..89a74836 --- /dev/null +++ b/tests/setuponlytests/vanilla_world_for_spigot_server/verify.sh @@ -0,0 +1,3 @@ +mc-image-helper assert fileExists world/level.dat && \ +mc-image-helper assert fileExists world_nether/DIM-1/some_nether_file && \ +mc-image-helper assert fileExists world_the_end/DIM1/some_end_file diff --git a/tests/setuponlytests/vanilla_world_for_spigot_server/worlds/world-for-testing.zip b/tests/setuponlytests/vanilla_world_for_spigot_server/worlds/world-for-testing.zip new file mode 100644 index 0000000000000000000000000000000000000000..cfdd882edcc677460ad106197059108cd911e1db GIT binary patch literal 782 zcmWIWW@h1H0D*uRb|GK}lwf0!VQ}&E)iu-)4dG;9mQeqms1C%X72FJrEH9WD7{EjT zPW@tV{l)pYsquNKB^jwj@oAYksc`c^X5uu@56wNS5c8nU5h3IpbnQYg?O@lW=A|H< z0x}DPaXY2P93^NtfoA2TmZj$Cr6iVseRE~^+eCS6MldqTG2;qf31~oh5Y7T>hy!8<1^}cZho%4k literal 0 HcmV?d00001 diff --git a/tests/setuponlytests/vanilla_world_for_vanilla_server/docker-compose.yml b/tests/setuponlytests/vanilla_world_for_vanilla_server/docker-compose.yml new file mode 100644 index 00000000..4a30460e --- /dev/null +++ b/tests/setuponlytests/vanilla_world_for_vanilla_server/docker-compose.yml @@ -0,0 +1,14 @@ +version: "3" + +services: + mc: + restart: "no" + image: ${IMAGE_TO_TEST:-itzg/minecraft-server} + environment: + EULA: "TRUE" + SETUP_ONLY: "TRUE" + VERSION: ${MINECRAFT_VERSION:-LATEST} + WORLD: /worlds/world-for-testing.zip + volumes: + - ./worlds:/worlds:ro + - ./data:/data diff --git a/tests/setuponlytests/vanilla_world_for_vanilla_server/verify.sh b/tests/setuponlytests/vanilla_world_for_vanilla_server/verify.sh new file mode 100644 index 00000000..82e2044c --- /dev/null +++ b/tests/setuponlytests/vanilla_world_for_vanilla_server/verify.sh @@ -0,0 +1,3 @@ +mc-image-helper assert fileExists world/level.dat && \ +mc-image-helper assert fileExists world/DIM-1/some_nether_file && \ +mc-image-helper assert fileExists world/DIM1/some_end_file diff --git a/tests/setuponlytests/vanilla_world_for_vanilla_server/worlds/world-for-testing.zip b/tests/setuponlytests/vanilla_world_for_vanilla_server/worlds/world-for-testing.zip new file mode 100644 index 0000000000000000000000000000000000000000..cfdd882edcc677460ad106197059108cd911e1db GIT binary patch literal 782 zcmWIWW@h1H0D*uRb|GK}lwf0!VQ}&E)iu-)4dG;9mQeqms1C%X72FJrEH9WD7{EjT zPW@tV{l)pYsquNKB^jwj@oAYksc`c^X5uu@56wNS5c8nU5h3IpbnQYg?O@lW=A|H< z0x}DPaXY2P93^NtfoA2TmZj$Cr6iVseRE~^+eCS6MldqTG2;qf31~oh5Y7T>hy!8<1^}cZho%4k literal 0 HcmV?d00001