From aee81eb9c899e9717dcce3fea2d16d43c5f7407f Mon Sep 17 00:00:00 2001 From: Michael Vorburger Date: Sat, 2 Apr 2022 01:06:59 +0200 Subject: [PATCH 1/8] Remove (broken) Travis CI badge from README --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 50994599..ab8ccc9a 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# minecraft-storeys-maker [![Build Status](https://travis-ci.com/OASIS-learn-study/minecraft-storeys-maker.svg?branch=master)](https://travis-ci.com/OASIS-learn-study/minecraft-storeys-maker) +# minecraft-storeys-maker Minecraft extension to make your own stories in, with and for Minecraft - it's like being a movie director! From 280ded4aee98ef90ac98f9d42af340c49d24c486 Mon Sep 17 00:00:00 2001 From: Michael Vorburger Date: Sat, 2 Apr 2022 01:05:35 +0200 Subject: [PATCH 2/8] Use our great custom server-icon.png from https://github.com/OASIS-learn-study/swissarmyknife-minecraft-server/blob/master/src/server-icon.png from https://github.com/OASIS-learn-study/minecraft-storeys-maker/issues/74 --- Dockerfile | 6 +++++- Dockerfile-local | 6 +++++- minecraft-server/README.md | 3 +++ minecraft-server/server-icon.png | Bin 0 -> 3862 bytes minecraft-server/start-custom | 6 ++++++ 5 files changed, 19 insertions(+), 2 deletions(-) create mode 100644 minecraft-server/README.md create mode 100644 minecraft-server/server-icon.png create mode 100755 minecraft-server/start-custom diff --git a/Dockerfile b/Dockerfile index bb9138fd..6a289b89 100644 --- a/Dockerfile +++ b/Dockerfile @@ -8,8 +8,12 @@ RUN ./gradlew build -x test # Keep any changes made here strictly in sync with Dockerfile-local FROM itzg/minecraft-server:java8 COPY --from=build /project/web/build/libs/*-all.jar /mods/ +COPY minecraft-server/* /data-init/ ENV EULA=TRUE ENV TYPE=SPONGEVANILLA EXPOSE 25565 25575 7070 8080 -ENTRYPOINT [ "/start" ] +ENTRYPOINT [ "/data-init/start-custom" ] + +# TODO When https://github.com/itzg/docker-minecraft-server/issues/1449, +# then "ENV ICON=/data-init/server-icon.png", but until then that's in the start-custom diff --git a/Dockerfile-local b/Dockerfile-local index 7a359792..f9985ebd 100644 --- a/Dockerfile-local +++ b/Dockerfile-local @@ -2,8 +2,12 @@ # Keep any changes made here strictly in sync with Dockerfile FROM itzg/minecraft-server:java8 COPY web/build/libs/*-all.jar /mods/ +COPY minecraft-server/* /data-init/ ENV EULA=TRUE ENV TYPE=SPONGEVANILLA EXPOSE 25565 25575 7070 8080 -ENTRYPOINT [ "/start" ] +ENTRYPOINT [ "/data-init/start-custom" ] + +# TODO When https://github.com/itzg/docker-minecraft-server/issues/1449, +# then "ENV ICON=/data-init/server-icon.png", but until then that's in the start-custom diff --git a/minecraft-server/README.md b/minecraft-server/README.md new file mode 100644 index 00000000..f7d8215a --- /dev/null +++ b/minecraft-server/README.md @@ -0,0 +1,3 @@ +This directory contains configuration files for the Minecraft server, used by the `Dockerfile`. + +The storeys server's plugin code is not here, but in `../web`. diff --git a/minecraft-server/server-icon.png b/minecraft-server/server-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..850b31506ceb2a8ee167c852f420e63a4964cfac GIT binary patch literal 3862 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 Date: Sat, 2 Apr 2022 01:16:46 +0200 Subject: [PATCH 3/8] Use custom MOTD --- Dockerfile | 2 ++ Dockerfile-local | 2 ++ 2 files changed, 4 insertions(+) diff --git a/Dockerfile b/Dockerfile index 6a289b89..31bef47a 100644 --- a/Dockerfile +++ b/Dockerfile @@ -12,6 +12,8 @@ COPY minecraft-server/* /data-init/ ENV EULA=TRUE ENV TYPE=SPONGEVANILLA +ENV OVERRIDE_SERVER_PROPERTIES=true +ENV MOTD="§a§l/make§r your §bown§r Plugins/Mods, §l§6with Scratch!" EXPOSE 25565 25575 7070 8080 ENTRYPOINT [ "/data-init/start-custom" ] diff --git a/Dockerfile-local b/Dockerfile-local index f9985ebd..78567207 100644 --- a/Dockerfile-local +++ b/Dockerfile-local @@ -6,6 +6,8 @@ COPY minecraft-server/* /data-init/ ENV EULA=TRUE ENV TYPE=SPONGEVANILLA +ENV OVERRIDE_SERVER_PROPERTIES=true +ENV MOTD="§a§l/make§r your §bown§r Plugins/Mods, §l§6with Scratch!" EXPOSE 25565 25575 7070 8080 ENTRYPOINT [ "/data-init/start-custom" ] From 2fc8e83abc986cbdfb5497720fc789c52c24e559 Mon Sep 17 00:00:00 2001 From: Michael Vorburger Date: Sat, 2 Apr 2022 01:42:00 +0200 Subject: [PATCH 4/8] Use creative peaceful server.properties Based on https://github.com/OASIS-learn-study/s2i-minecraft-server/blob/master/src/server.properties, I've verified each of the properties we had there, but most of them were the defaults anyway, this is better. --- Dockerfile | 3 +++ Dockerfile-local | 3 +++ 2 files changed, 6 insertions(+) diff --git a/Dockerfile b/Dockerfile index 31bef47a..371e2899 100644 --- a/Dockerfile +++ b/Dockerfile @@ -14,6 +14,9 @@ ENV EULA=TRUE ENV TYPE=SPONGEVANILLA ENV OVERRIDE_SERVER_PROPERTIES=true ENV MOTD="§a§l/make§r your §bown§r Plugins/Mods, §l§6with Scratch!" +ENV SPAWN_PROTECTION=0 +ENV DIFFICULTY=peaceful +ENV MODE=creative EXPOSE 25565 25575 7070 8080 ENTRYPOINT [ "/data-init/start-custom" ] diff --git a/Dockerfile-local b/Dockerfile-local index 78567207..7a8a2b19 100644 --- a/Dockerfile-local +++ b/Dockerfile-local @@ -8,6 +8,9 @@ ENV EULA=TRUE ENV TYPE=SPONGEVANILLA ENV OVERRIDE_SERVER_PROPERTIES=true ENV MOTD="§a§l/make§r your §bown§r Plugins/Mods, §l§6with Scratch!" +ENV SPAWN_PROTECTION=0 +ENV DIFFICULTY=peaceful +ENV MODE=creative EXPOSE 25565 25575 7070 8080 ENTRYPOINT [ "/data-init/start-custom" ] From 4243aa6e8af8e3254bcb768f4b45ee68c1ae1c23 Mon Sep 17 00:00:00 2001 From: Michael Vorburger Date: Sat, 2 Apr 2022 02:14:33 +0200 Subject: [PATCH 5/8] Using 0/1 instead of peaceful/creative doesn't work either... ... because of https://github.com/itzg/docker-minecraft-server/issues/1452. --- Dockerfile | 4 ++-- Dockerfile-local | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Dockerfile b/Dockerfile index 371e2899..4b3df3a0 100644 --- a/Dockerfile +++ b/Dockerfile @@ -15,8 +15,8 @@ ENV TYPE=SPONGEVANILLA ENV OVERRIDE_SERVER_PROPERTIES=true ENV MOTD="§a§l/make§r your §bown§r Plugins/Mods, §l§6with Scratch!" ENV SPAWN_PROTECTION=0 -ENV DIFFICULTY=peaceful -ENV MODE=creative +ENV DIFFICULTY=0 +ENV MODE=1 EXPOSE 25565 25575 7070 8080 ENTRYPOINT [ "/data-init/start-custom" ] diff --git a/Dockerfile-local b/Dockerfile-local index 7a8a2b19..0162eb75 100644 --- a/Dockerfile-local +++ b/Dockerfile-local @@ -9,8 +9,8 @@ ENV TYPE=SPONGEVANILLA ENV OVERRIDE_SERVER_PROPERTIES=true ENV MOTD="§a§l/make§r your §bown§r Plugins/Mods, §l§6with Scratch!" ENV SPAWN_PROTECTION=0 -ENV DIFFICULTY=peaceful -ENV MODE=creative +ENV DIFFICULTY=0 +ENV MODE=1 EXPOSE 25565 25575 7070 8080 ENTRYPOINT [ "/data-init/start-custom" ] From d3c1fba80516f6c3192bcbc920858c72bdcb6b1d Mon Sep 17 00:00:00 2001 From: Michael Vorburger Date: Sat, 2 Apr 2022 02:46:25 +0200 Subject: [PATCH 6/8] Use custom server.properties instead of MODE & DIFFICULTY environment variables because of https://github.com/itzg/docker-minecraft-server/issues/1452 --- Dockerfile | 6 +--- Dockerfile-local | 6 +--- minecraft-server/server.properties | 49 ++++++++++++++++++++++++++++++ minecraft-server/start-custom | 1 + 4 files changed, 52 insertions(+), 10 deletions(-) create mode 100644 minecraft-server/server.properties diff --git a/Dockerfile b/Dockerfile index 4b3df3a0..fa2a7579 100644 --- a/Dockerfile +++ b/Dockerfile @@ -12,11 +12,7 @@ COPY minecraft-server/* /data-init/ ENV EULA=TRUE ENV TYPE=SPONGEVANILLA -ENV OVERRIDE_SERVER_PROPERTIES=true -ENV MOTD="§a§l/make§r your §bown§r Plugins/Mods, §l§6with Scratch!" -ENV SPAWN_PROTECTION=0 -ENV DIFFICULTY=0 -ENV MODE=1 +ENV SKIP_SERVER_PROPERTIES=true EXPOSE 25565 25575 7070 8080 ENTRYPOINT [ "/data-init/start-custom" ] diff --git a/Dockerfile-local b/Dockerfile-local index 0162eb75..ca63a169 100644 --- a/Dockerfile-local +++ b/Dockerfile-local @@ -6,11 +6,7 @@ COPY minecraft-server/* /data-init/ ENV EULA=TRUE ENV TYPE=SPONGEVANILLA -ENV OVERRIDE_SERVER_PROPERTIES=true -ENV MOTD="§a§l/make§r your §bown§r Plugins/Mods, §l§6with Scratch!" -ENV SPAWN_PROTECTION=0 -ENV DIFFICULTY=0 -ENV MODE=1 +ENV SKIP_SERVER_PROPERTIES=true EXPOSE 25565 25575 7070 8080 ENTRYPOINT [ "/data-init/start-custom" ] diff --git a/minecraft-server/server.properties b/minecraft-server/server.properties new file mode 100644 index 00000000..7ad8f152 --- /dev/null +++ b/minecraft-server/server.properties @@ -0,0 +1,49 @@ +spawn-protection=0 +max-tick-time=60000 +query.port=25565 +generator-settings= +sync-chunk-writes=true +force-gamemode=false +allow-nether=true +enforce-whitelist=false +gamemode=1 +broadcast-console-to-ops=true +enable-query=false +player-idle-timeout=0 +difficulty=0 +spawn-monsters=false +broadcast-rcon-to-ops=true +op-permission-level=4 +pvp=true +entity-broadcast-range-percentage=100 +snooper-enabled=true +level-type=DEFAULT +hardcore=false +enable-status=true +enable-command-block=true +max-players=20 +network-compression-threshold=256 +resource-pack-sha1= +max-world-size=29999984 +function-permission-level=2 +rcon.port=25575 +server-port=25565 +texture-pack= +server-ip= +spawn-npcs=true +allow-flight=false +level-name=world +view-distance=10 +resource-pack= +spawn-animals=true +white-list=false +rcon.password=minecraft +generate-structures=true +max-build-height=256 +online-mode=true +level-seed= +prevent-proxy-connections=false +use-native-transport=true +enable-jmx-monitoring=false +enable-rcon=true +motd=\u00A7a\u00A7l/make\u00A7r your \u00A7bown\u00A7r Plugins/Mods, \u00A7l\u00A76with Scratch\! diff --git a/minecraft-server/start-custom b/minecraft-server/start-custom index ffd2b6b3..f0811f3a 100755 --- a/minecraft-server/start-custom +++ b/minecraft-server/start-custom @@ -1,6 +1,7 @@ #!/bin/bash set -euox pipefail +cp /data-init/server.properties /data/ cp /data-init/server-icon.png /data/ /start From 8509525178ec996d4a62165f0bf7ad95993daabc Mon Sep 17 00:00:00 2001 From: Michael Vorburger Date: Sat, 2 Apr 2022 02:29:51 +0200 Subject: [PATCH 7/8] Make GuardGameModeJoinListener log game mode changes --- .../storeys/guard/GuardGameModeJoinListener.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/storeys/src/main/java/ch/vorburger/minecraft/storeys/guard/GuardGameModeJoinListener.java b/storeys/src/main/java/ch/vorburger/minecraft/storeys/guard/GuardGameModeJoinListener.java index c3744e9b..3b429969 100644 --- a/storeys/src/main/java/ch/vorburger/minecraft/storeys/guard/GuardGameModeJoinListener.java +++ b/storeys/src/main/java/ch/vorburger/minecraft/storeys/guard/GuardGameModeJoinListener.java @@ -18,6 +18,8 @@ */ package ch.vorburger.minecraft.storeys.guard; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.spongepowered.api.data.key.Keys; import org.spongepowered.api.entity.living.player.Player; import org.spongepowered.api.entity.living.player.gamemode.GameMode; @@ -32,8 +34,9 @@ */ public class GuardGameModeJoinListener implements EventListener { - @Override - public void handle(Join joinEvent) throws Exception { + private static final Logger LOG = LoggerFactory.getLogger(GuardGameModeJoinListener.class); + + @Override public void handle(Join joinEvent) throws Exception { GameMode newGameMode = null; Player player = joinEvent.getTargetEntity(); // NB: Order and use of if and not else if - because higher permission overrides lower... @@ -48,6 +51,7 @@ public void handle(Join joinEvent) throws Exception { } if (newGameMode != null) { player.offer(Keys.GAME_MODE, newGameMode); + LOG.info("Player {} game mode {}", player, newGameMode); } } From 578ee8e33bd29b766b00f697fc9283c03081ec2a Mon Sep 17 00:00:00 2001 From: Michael Vorburger Date: Sat, 2 Apr 2022 02:44:56 +0200 Subject: [PATCH 8/8] Fix quite confusing 2nd bug in GuardGameModeJoinListener --- .../minecraft/storeys/guard/GuardGameModeJoinListener.java | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/storeys/src/main/java/ch/vorburger/minecraft/storeys/guard/GuardGameModeJoinListener.java b/storeys/src/main/java/ch/vorburger/minecraft/storeys/guard/GuardGameModeJoinListener.java index 3b429969..3c9adade 100644 --- a/storeys/src/main/java/ch/vorburger/minecraft/storeys/guard/GuardGameModeJoinListener.java +++ b/storeys/src/main/java/ch/vorburger/minecraft/storeys/guard/GuardGameModeJoinListener.java @@ -40,18 +40,17 @@ public class GuardGameModeJoinListener implements EventListener { GameMode newGameMode = null; Player player = joinEvent.getTargetEntity(); // NB: Order and use of if and not else if - because higher permission overrides lower... + // But beware that OPS on servers without permissions plugin (such as LuckPerms) have all permissions; + // therefore the last permission must be the one which we wants an OPS to have! if (player.hasPermission("storeys.guard.adventure")) { newGameMode = GameModes.ADVENTURE; } if (player.hasPermission("storeys.guard.creative")) { newGameMode = GameModes.CREATIVE; } - if (player.hasPermission("storeys.guard.survival")) { - newGameMode = GameModes.SURVIVAL; - } if (newGameMode != null) { player.offer(Keys.GAME_MODE, newGameMode); - LOG.info("Player {} game mode {}", player, newGameMode); + LOG.info("Setting Player {} game mode to {} due to their storeys.guard.* permissions", player.getName(), newGameMode); } }