Minecraft Java + Bedrock Server Together – Geyser + Floodgate

Minecraft Geyser + Floodgate Paper Minecraft Server
Minecraft Geyser + Floodgate Paper Minecraft Server

This is a new Docker container to automatically set up and run a Minecraft server that both Java and Bedrock players can connect to! This allows everyone to play on your server no matter which edition of Minecraft you are using. It uses the Geyser and Floodgate plugins to accomplish this.

Since it uses the Paper Minecraft server it also supports any additional plugins that are compatible with Paper / Spigot. This gives you the ability to do many things that are currently impossible to do in Bedrock if you are hosting the official Bedrock dedicated server.

It is fully compatible with my Paper Minecraft Java Server Container and you can swap between these two containers without changing any configuration.

The official GitHub page is located here.

The Docker Hub page for the container is located here.

It’s now possible to convert your worlds between Bedrock and Java versions. Check out my guide on Chunker here for more information.

Features

  • Sets up fully operational Minecraft server that allows both Java and Bedrock clients to connect
  • Runs the highly efficient “Paper” Minecraft server
  • Runs Geyser to allow Bedrock clients to connect and Floodgate to allow them to authenticate with their Bedrock credentials to a Java server
  • Plugin support for Paper / Spigot / Bukkit
  • Uses named Docker volume for safe and easy to access storage of server data files (which enables more advanced Docker features such as automatic volume backups)
  • Installs and configures OpenJDK 18
  • Automatic backups to minecraft/backups when server restarts
  • Full logging available in minecraft/logs folder
  • Updates automatically to the latest version when server is started
  • Runs on all Docker platforms including Raspberry Pi

Usage

First you must create a named Docker volume. This can be done with:

docker volume create yourvolumename

Now you may launch the server and open the ports necessary with one of the following Docker launch commands.

With default ports:

docker run -it -v yourvolumename:/minecraft -p 25565:25565 -p 19132:19132/udp -p 19132:19132 --restart unless-stopped 05jchambers/legendary-minecraft-geyser-floodgate:latest

With custom ports:

docker run -it -v yourvolumename:/minecraft -p 12345:12345 -e Port=12345 -p 54321:54321/udp -p 54321:54321 -e BedrockPort=54321 --restart unless-stopped 05jchambers/legendary-minecraft-geyser-floodgate:latest

With a custom Minecraft version (add -e Version=1.X.X, must be present on Paper’s API servers to work):

docker run -it -v yourvolumename:/minecraft -p 25565:25565 -p 19132:19132/udp -p 19132:19132 -e Version=1.17.1 --restart unless-stopped 05jchambers/legendary-minecraft-geyser-floodgate:latest

With a maximum memory limit in megabytes (optional, prevents crashes on platforms with limited memory, -e MaxMemory=2048):

docker run -it -v yourvolumename:/minecraft -p 25565:25565 -p 19132:19132/udp -p 19132:19132 -e MaxMemory=2048 --restart unless-stopped 05jchambers/legendary-minecraft-geyser-floodgate:latest

Using a custom timezone:

docker run -it -v yourvolumename:/minecraft -p 25565:25565 -p 19132:19132/udp -p 19132:19132 -e TZ="America/Denver" --restart unless-stopped 05jchambers/legendary-minecraft-geyser-floodgate:latest

Skipping backups on a certain folder:

docker run -it -v yourvolumename:/minecraft -p 25565:25565 -p 19132:19132/udp -p 19132:19132 -e NoBackup="plugins" --restart unless-stopped 05jchambers/legendary-minecraft-geyser-floodgate:latest

Skipping permissions check:

docker run -it -v yourvolumename:/minecraft -p 25565:25565 -p 19132:19132/udp -p 19132:19132 -e NoPermCheck="Y" --restart unless-stopped 05jchambers/legendary-minecraft-geyser-floodgate:latest

Change number of backups:

docker run -it -v yourvolumename:/minecraft -p 25565:25565 -p 19132:19132/udp -p 19132:19132 -e BackupCount=1 --restart unless-stopped 05jchambers/legendary-minecraft-geyser-floodgate:latest

Configuration / Accessing Server Files

The server data is stored where Docker stores your volumes. This is typically a folder on the host OS that is shared and mounted with the container. I’ll give the usual locations here but if you’re having trouble just do some Googling for your exact platform and you should find where Docker is storing the volume files.

You can find your exact path by typing:

docker volume inspect yourvolumename

This will give you the fully qualified path to your volume like this:

{
        "CreatedAt": "2022-05-09T21:08:34-06:00",
        "Driver": "local",
        "Labels": {},
        "Mountpoint": "/var/lib/docker/volumes/yourvolumename/_data",
        "Name": "yourvolumename",
        "Options": {},
        "Scope": "local"
}

On Linux it’s typically available at:

/var/lib/docker/volumes/yourvolumename/_data

On Windows it’s at

C:\ProgramData\DockerDesktop

but may be located at something more like

\wsl$\docker-desktop-data\version-pack-data\community\docker\volumes\

if you are using WSL (Windows Subsystem for Linux).


On Mac it’s typically

~/Library/Containers/com.docker.docker/Data/vms/0/

If you are using Docker Desktop on Mac then you need to access the Docker VM with the following command first:

screen ~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/tty

You can then normally access the Docker volumes using the path you found in the first step with docker volume inspect.

Most people will want to edit server.properties. You can make the changes to the file and then restart the container to make them effective.
Backups are stored in the “backups” folder
Log files with timestamps are stored in the “logs” folder.

Plugin Support for Paper / Spigot / Bukkit

This is a “Paper” Minecraft server which has plugin compatibility with Paper / Spigot / Bukkit.

Installation is simple. There is a “plugins” folder on your Docker named volume.

Navigate to your server files on your host operating system (see accessing server files section if you don’t know where this is) and you will see the “plugins” folder.

You just need to drop the extracted version of the plugin (a .jar file) into this folder and restart the container. That’s it!

Some plugins have dependencies so make sure you read the installation guide first for the plugin you are looking at.

A popular place to get plugins is: dev.bukkit.org

Troubleshooting Note – Oracle Virtual Machines

A very common problem people have with the Oracle Virtual Machine tutorials out there that typically show you how to use a free VM is that the VM is much more difficult to configure than just about any other product / offering out there.

It is because there are several steps you need to take to open the ports on the Oracle VM. You need to both:

  • Set the ingress ports (TCP/UDP) in the Virtual Cloud Network (VCN) security list
  • *and* set the ingress ports in a Network Security Group assigned to your instance

Both of these settings are typically required before you will be able to connect to your VM instance. This is purely configuration related and has nothing to do with the script or the Minecraft server itself.

I do not recommend this platform due to the configuration difficulty but the people who have gone through the pain of configuring an Oracle VM have had good experiences with it after that point. Just keep in mind it’s going to be a rough ride through the configuration for most people.

Troubleshooting Note – Hyper-V

There is a weird bug in Hyper-V that breaks UDP connections on the Minecraft server. The easy workaround for this is that you have to use a Generation 1 VM with the Legacy LAN network driver.

There is a second fix that was shared by bpsimons here. For that fix you need to install ethtool first with sudo apt install ethtool. Next in your /etc/network/interfaces file add “offload-tx off” to the bottom as the issue appears to be with TX offloading.

Here’s an example:

# The primary network interface
auto eth0
iface eth0 inet static
address 192.168.1.5
netmask 255.255.255.0
network 192.168.1.0
broadcast 192.168.1.255
gateway 192.168.1.1
offload-tx off

This can also be done non-persistently with the following ethtool command:

ethtool -K eth0 tx off

Additional Support

The comments section right here is the best place for support. The second best place is the GitHub issues section.

I will add additional documentation based on what problems people are running into / questions people are asking because right now I’m not really sure what those will be yet. Definitely let me know if you need any of these things!

406 thoughts on “Minecraft Java + Bedrock Server Together – Geyser + Floodgate”

  1. Avatar for Jonathan Turunen

    Hi James,

    This looks like just what I need and it’s clear a lot of work has gone into it so, first off, thanks for making this!

    I’m having a issue with the start.sh Internet check (line 120) where it fails the connection test (at line 121) and, therefore, won’t download paperclip which results in the error that paperclip.jar is not found.

    If I extract those lines on their own and run them by themselves (changing the else at line 123 to a simple echo “Connected, proceeding”) then it works but, for some reason, but in Docker it does not.

    Here’s the command on its own:

    me@debian:~$ sudo cat test.sh
    #!/bin/bash
    curl -H "Accept-Encoding: identity" -H "Accept-Language: en" -L -A "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4.212 Safari/537.36" -s google.com -o /dev/null
    if [ "$?" != 0 ]; then
    echo "Unable to connect to update website (internet connection may be down). Skipping update ..."
    else
    echo "Connected, proceeding"
    fi
    me@debian:~$ sudo bash test.sh
    Connected, proceeding

    Here’s my Docker output:

    me@debian:~$ sudo docker run -it -v minecraftcreative:/minecraft -p 12345:12345 -e Port=12345 -p 54321:54321/udp -p 54321:54321 -e TZ="Australia/Melbourne" -e MaxMemory=2048 -e BedrockPort=54321 05jchambers/legendary-minecraft-geyser-floodgate:latest
    Paper Minecraft Java Server Docker + Geyser/Floodgate script by James A. Chambers
    Latest version always at https://github.com/TheRemote/Legendary-Java-Minecraft-Geyser-Floodgate
    Don't forget to set up port forwarding on your router! The default port is 25565 and the Bedrock port is 19132
    Port used: 12345
    Bedrock port used: 54321
    Updating to most recent paperclip version ...
    Unable to connect to update website (internet connection may be down). Skipping update ...
    Starting Minecraft server...
    [screen is terminating]

    It’s clearly working for everyone else, though, so I tried to fork the github then convert to my own docker image but that is, so far, beyond my capabilities unfortunately.

    1. Avatar for James A. Chambers

      Hey Jonathan,

      Welcome! It looks like your server can’t access the internet is or having DNS issues:

      Updating to most recent paperclip version ...
      Unable to connect to update website (internet connection may be down). Skipping update ...

      This probably means that either your Docker or your server itself can’t resolve DNS names like google.com. It basically can’t download the server here.

      If you bypass these lines you would still have no server files basically if that makes sense. It can’t download them. Your server volume should be completely empty as it’s failing to even ping google.com basically.

      The line that is failing is:

      curl -H "Accept-Encoding: identity" -H "Accept-Language: en" -L -A "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4.212 Safari/537.36" -s google.com

      I would try pasting that on your server’s command line. If it works then the problem is the Docker environment and not the server’s DNS.

      The most common reason for this is running too old of an operating system. Which OS and version are you running? This usually happens on old distros like Debian Buster (vs. Bullseye, the current version) or using Ubuntu 20.04/18.04 instead of the current 22.04 version.

      Can you verify your OS version for us? It may just need an update to fix Docker’s DNS issues here!

      1. Avatar for Jonathan Turunen

        Thanks, James, the curl line does work when used either on the CLI or in a shell script. I’ll try the OS update as I’m still on Stretch actually, very far behind!

        1. Avatar for James A. Chambers

          Hey Jonathan,

          Thanks for testing that! This is a great test to confirm this. The reason I knew about that test is that this happened to someone else before.

          In that case it was with the Bedrock version of the container but the problem was exactly the same. In that case they were on Buster actually so they were even one ahead of you and still had these strange Docker DNS issues. Their normal DNS worked fine within the OS and the problem was only within Docker just like your case here.

          The good news about this is that it’s usually pretty easy to update Debian. It’s almost as simple as editing /etc/apt/sources.list for most setups and then doing a sudo apt full-upgrade (going in order to Buster first, full-upgrade followed by a reboot and then edit /etc/apt/sources.list again to go to Bullseye). Of course a clean image is always a good option if you have easy services to backup / restore especially when it’s several versions behind but I’ve definitely upgraded ones like this before in-place and Debian is one of the kinder/nicer ones when doing this. Hopefully that helps!

    1. Avatar for James A. Chambers

      Hey Lerkista,

      It actually couldn’t do this before but I just added a new feature to make this work! The way you use it is with the environment variable “TZ”. For example for my timezone:

      -e TZ="America/Denver"

      You can see here for your exact timezone format if you don’t know it already.

      This should yield the correct time with the timestamps! Just pull the latest version of the container with:

      docker pull 05jchambers/legendary-minecraft-geyser-floodgate:latest

      and then restart the server (with the new -e TZ= added to your docker launch line). That should get it going for you!

  2. Avatar for Kim Skov Rasmussen
    Kim Skov Rasmussen

    Hi, i have truble understanding why this is not working? i keep getting errors alle over the place..

    version: "3"

    services:
    minecraft:
    image: 05jchambers/legendary-minecraft-geyser-floodgate
    container_name: Minecraft
    volumes:
    - minecraftdata:/data
    - /home/minecraft/plugins:/plugins
    - /home/minecraft/mods:/mods
    ports:
    - 25565:25565
    - 19132:19132/udp
    - 19132:19132
    stdin_open: true
    tty: true
    restart: unless-stopped
    volumes:
    minecraftdata:
    external: true

    1. Avatar for James A. Chambers

      Hey Kim,

      Welcome! So I put your YAML code into a YAML verifier and got the following error:

      (): found a tab character that violate intendation while scanning a plain scalar at line 3 column 12

      You were using spaces to indent until that line and then you started using tabs it looks like. YAML is incredibly sensitive to spacing (it’s the most annoying thing about it for sure in my opinion). What I would recommend is trying pasting your code into that web site and fix the spacing until it passes without errors. This is basically what I do when dealing with these types of files. That should take care of it for you!

      It might honestly be easier to start over with the template from the GitHub repository but you can just change the tabs to spaces (but they’ll have to be the right # of spaces or it will also break but the tool will tell you this).

  3. Avatar for Pavel

    Hello,
    I just wanted to say THANK YOU for all your efforts with this server container!
    Now me and my 6+ year old son can play Minecraft together! Me – on linux and my son on iPad 🙂
    You did awesome job!

  4. Avatar for Hajo

    Hi,
    when connecting with my android smartphone, I get the following.

    [20:37:04 INFO]: [Geyser-Spigot] /172.17.0.1:41400 tried to connect!
    [20:37:04 WARN]: [io.netty.util.concurrent.AbstractEventExecutor] A task raised an exception. Task: com.nukkitx.protocol.bedrock.BedrockRakNetSessionListener$$Lambda$6404/0x0000000801e10ad0@42ae902a
    java.lang.RuntimeException: Unable to inflate buffer data
    at com.nukkitx.protocol.bedrock.wrapper.BedrockWrapperSerializerV9_10.deserialize(BedrockWrapperSerializerV9_10.java:87) ~[Geyser-Spigot.jar:?]
    at com.nukkitx.protocol.bedrock.BedrockSession.onWrappedPacket(BedrockSession.java:283) ~[Geyser-Spigot.jar:?]
    at com.nukkitx.protocol.bedrock.BedrockRakNetSessionListener.lambda$onEncapsulated$0(BedrockRakNetSessionListener.java:39) ~[Geyser-Spigot.jar:?]
    at io.netty.util.concurrent.AbstractEventExecutor.runTask(AbstractEventExecutor.java:174) ~[netty-common-4.1.77.Final.jar:4.1.77.Final]
    ...

    Any idea?

    1. Avatar for James A. Chambers

      Hey Hajo,

      Hmmm. This is an interesting one. I found this on the GeyserMC issues page. It looks like it’s related to a 10th Gen Intel processor.

      I’m pushing a fix to see if this takes care of it for you. Can you pull the latest version with:

      docker pull 05jchambers/legendary-minecraft-geyser-floodgate:latest

      and try running again here?

        1. Avatar for James A. Chambers

          Hey Hajo,

          Thanks for confirming! Apparently the bug is this:

          There is some encryption-related bug where players are only able to play for a short time before communication essentially ceases and no actions go through to Geyser if the server is running a 10th or 11th generation Intel processor. It appears not all 10th generation Intel processors are affected, but potentially all 11th generation processors are.

          Looks like 11th gen is even worse. From what I can tell it’s honestly the worst CPU ever made (and that’s by the numbers). I haven’t seen failure rates that high on a part since like the 1990s!

          I added the fix from their GitHub of -XX:+UnlockDiagnosticVMOptions -XX:-UseAESCTRIntrinsics to the container and that did not fix yours. It’s actually a hardware issue. You can fix it by using a non-11th Gen Intel CPU but obviously that’s a silly suggestion / unacceptable (surely there has to be a better fix than throwing away the CPU). I do not know of another fix to try yet but I’ll keep looking!

            1. Avatar for James A. Chambers

              Hey Hajo,

              Is the client running on a 10th or 11th gen Intel as well? If it’s Android that is extremely unlikely (but not impossible, there are Android tablets with Intel CPUs) but I’m honestly puzzled why the fix didn’t get it. If the Android devices are in fact running an Intel chip that is impacted then you would actually need to add that fix to the client that I did for the server (let me know if this is the case and I’ll try to explain it, but basically you change the client’s Java launch line and add -XX:+UnlockDiagnosticVMOptions -XX:-UseAESCTRIntrinsics).

              It’s certainly possible the beta version could be impacting it but I would just expect the beta to tell you “wrong version” if it was able to connect as the worst case scenario (Geyser and Floodgate remove a lot of the version restrictions in vanilla as well). Trying it with the non-beta version does seem like it would be worth a shot.

              It looks like they are hard at work fixing this. Here’s what they said:

              Yes, it is an OpenJDK bug that only affects processors with AVX-512. The bug seems to occur when encrypting/decrypting less than 16 bytes at a time. The relevant code is here https://github.com/openjdk/jdk/blob/9bff3b76f2e5d0ecede6c0d4042f65d377a28325/src/hotspot/cpu/x86/macroAssembler_x86_aes.cpp#L783-L814

              It looks like the preloop assumes there is at least 16 bytes of input, leading to corruption of the cipher state such as the counter variable.

              A bug report and potential fix has been sent. Waiting on their response.

              That was 13 days ago. It looks like this needs to be fixed in OpenJDK. I just checked to see if there is an updated release of OpenJDK from what I’m using and there isn’t yet (it’s OpenJDK18U-jre_x64_linux_hotspot_18.0.2_9.tar.gz) unless I went to OpenJDK 19 (which doesn’t look like it’s going to fix it, I actually found the code merge to OpenJDK that I’ll share in a moment here).

              I’d imagine that within a few weeks this will be completely fixed in OpenJDK. I actually found the fix report in OpenJDK for this here. Basically when this fix is merged this bug should be fixed on 11th gen Intel (and the 10th Gen Intel processors impacted). It looks like it has passed 2 / 3 checks and is waiting for review (presumably from a high level developer on the OpenJDK team).

              Sorry that you are getting hit by this bug. The bug itself is only a few weeks old and was introduced during an improvement they were making to another system in Java. It hasn’t always been like this for Intel 11th gen. They introduced something that broke it not too long ago (they went into more detail in the links I linked to if anyone is wanting to know the specifics). Do you have any computers that could host it that don’t have a 11th Gen CPU? Even a Raspberry Pi would work (temporarily until they fix this)!

              1. Avatar for Hajo

                Hi James,
                the clients are non-intel android.
                I tried version 19 too, but still the same error.
                I am wondering, why the i7 have the same issue; but no idea about that. I removed that XX options for the i7. No success.
                My synology is a non Intel, non docker 213+, I assume too old.
                I have a raspberry, but I nedd a bedrock+java; and I didn’t find that even on your page! 😉
                Or maybe go back to an early 18 version with the i7.
                Thank you vre much for your support!!!

              2. Avatar for James A. Chambers

                Hey Hajo,

                It will absolutely work on the Raspberry for sure! You’d just need to install docker on it and then you’d run it the same way (make sure it’s running the latest Raspberry Pi OS which unless it has been reimaged recently as in since April 2022 it’s probably running Buster). There are ARM images available and this will fire right up on it (without this bug I’m sure).

                That being said I think your idea of trying a slightly older OpenJDK is worth it. I tried rolling it back to jre_x64_linux_hotspot_18.0.1_10.tar.gz. This is one of the earlier ones I know of (although I’m sure I could find older if I dig through the archives). Is it early enough? Maybe. It’s worth a try I think. This bug like I said seems to only be a few weeks or so old and this version is definitely older than that. It looks like that one is from April.

                Can you try pulling the latest again and see if it will take the CPU with this OpenJDK 18 version?

              3. Avatar for Hajo

                Hey James,
                I did two things.
                First I tried your new version by pulling it. And i installed version 17, no luck.

                Second thing: I used my pi3modelBrev1.2, installed docker (cool stuff!) and run your container – still the same issue.

                As a conclusion from my side, this seems not to be an issue with Intel Gen11. I tried it with i7 and with arm; still the same issue.
                So I assume, something else than the CPU will be the cause.

              4. Avatar for James A. Chambers

                Hey Hajo,

                It would point to it being the client for me honestly. That’s extremely strange that you’re getting that issue on the Pi. Is it still the exact same error?

                Nobody has ever got this before except for you which is the really strange part. I just tried it to make sure:

                [14:05:35 INFO]: [Geyser-Spigot] ******************************************
                [14:05:35 INFO]: [Geyser-Spigot]
                [14:05:35 INFO]: [Geyser-Spigot] Loading Geyser version 2.0.7-SNAPSHOT (git-master-33af9e0)
                [14:05:35 INFO]: [Geyser-Spigot]
                [14:05:35 INFO]: [Geyser-Spigot] ******************************************
                [14:05:37 INFO]: [Geyser-Spigot] Started Geyser on 0.0.0.0:19132
                [14:05:37 INFO]: [Geyser-Spigot] Done (1.395s)! Run /geyser help for help!
                [14:05:37 INFO]: Running delayed init tasks
                [14:05:37 INFO]: Done (3.047s)! For help, type "help"
                [14:05:37 INFO]: Timings Reset
                [14:08:28 INFO]: [Geyser-Spigot] /192.168.1.18:52802 tried to connect!
                [14:08:29 INFO]: [Geyser-Spigot] Player connected with username Jimmy Cham
                [14:08:29 INFO]: [Geyser-Spigot] Jimmy Cham (logged in as: Jimmy_Cham) has connected to the Java server
                [14:08:30 INFO]: UUID of player .Jimmy_Cham is 00000000-0000-0000-0009-000001777226
                [14:08:30 INFO]: [floodgate] Floodgate player logged in as .Jimmy_Cham joined (UUID: 00000000-0000-0000-0009-000001777226)
                [14:08:30 INFO]: .Jimmy_Cham joined the game
                [14:08:30 INFO]: .Jimmy_Cham[/192.168.1.18:0] logged in with entity id 1 at ([Bedrock level]-33.5, 67.0, -0.5)
                > stop

                So basically that leaves us where I can’t reproduce this and nobody else has ever got it before. I have no idea why this is happening and it has never happened to anyone else for sure!

              5. Avatar for Hajo

                System Info: Java 18 (OpenJDK Server VM 18.0.2+9) Host: Linux 5.15.56-v7+ (arm)
                Loading libraries, please wait...
                [15:41:11 INFO]: Building unoptimized datafixer
                [15:41:23 INFO]: Environment: authHost='https://authserver.mojang.com', accountsHost='https://api.mojang.com', sessionHost='https://sessionserver.mojang.com', servicesHost='https://api.minecraftservices.com', name='PROD'
                [15:41:43 INFO]: Loaded 7 recipes
                [15:41:58 INFO]: Starting minecraft server version 1.19.2
                [15:41:58 WARN]: To start the server with more ram, launch it as "java -Xmx1024M -Xms1024M -jar minecraft_server.jar"
                [15:41:58 WARN]: ****************************
                [15:41:58 WARN]: YOU ARE RUNNING THIS SERVER AS AN ADMINISTRATIVE OR ROOT USER. THIS IS NOT ADVISED.
                [15:41:58 WARN]: YOU ARE OPENING YOURSELF UP TO POTENTIAL RISKS WHEN DOING THIS.
                [15:41:58 WARN]: FOR MORE INFORMATION, SEE https://madelinemiller.dev/blog/root-minecraft-server/
                [15:41:58 WARN]: ****************************
                [15:41:58 INFO]: Loading properties
                [15:41:58 INFO]: This server is running Paper version git-Paper-131 (MC: 1.19.2) (Implementing API version 1.19.2-R0.1-SNAPSHOT) (Git: 2da891f)
                [15:41:59 INFO]: Server Ping Player Sample Count: 12
                [15:41:59 INFO]: Using 4 threads for Netty based IO
                [15:42:01 INFO]: Default game type: SURVIVAL
                [15:42:01 INFO]: Generating keypair
                [15:42:03 INFO]: Starting Minecraft server on *:25565
                [15:42:03 INFO]: Using default channel type
                [15:42:03 INFO]: Paper: Using Java 11 compression from Velocity.
                [15:42:03 INFO]: Paper: Using Java cipher from Velocity.
                [15:42:09 INFO]: [floodgate] Loading floodgate v2.2.0-SNAPSHOT (b73-4f36112)
                [15:42:14 INFO]: [floodgate] Took 4,453ms to boot Floodgate
                [15:42:14 INFO]: [Geyser-Spigot] Loading Geyser-Spigot v2.0.7-SNAPSHOT
                [15:42:14 INFO]: Server permissions file permissions.yml is empty, ignoring it
                [15:42:14 INFO]: Preparing level "world"
                [15:44:53 INFO]: [floodgate] Enabling floodgate v2.2.0-SNAPSHOT (b73-4f36112)
                [15:44:56 INFO]: [Geyser-Spigot] Enabling Geyser-Spigot v2.0.7-SNAPSHOT
                [15:44:59 WARN]: [Geyser-Spigot] Your Geyser config is out of date! Please regenerate your config when possible.
                [15:45:00 INFO]: [Geyser-Spigot] ******************************************
                [15:45:00 INFO]: [Geyser-Spigot]
                [15:45:00 INFO]: [Geyser-Spigot] Loading Geyser version 2.0.7-SNAPSHOT (git-master-33af9e0)
                [15:45:00 INFO]: [Geyser-Spigot]
                [15:45:00 INFO]: [Geyser-Spigot] ******************************************
                [15:45:37 INFO]: [Geyser-Spigot] Started Geyser on 0.0.0.0:19132
                [15:45:37 INFO]: [Geyser-Spigot] Done (37.276s)! Run /geyser help for help!
                [15:45:38 INFO]: Running delayed init tasks
                [15:45:38 INFO]: Done (220.177s)! For help, type "help"
                [15:45:38 INFO]: Timings Reset
                [15:46:19 INFO]: [Geyser-Spigot] /172.17.0.1:44837 tried to connect!
                [15:46:22 WARN]: [io.netty.util.concurrent.AbstractEventExecutor] A task raised an exception. Task: com.nukkitx.protocol.bedrock.BedrockRakNetSessionListener$$Lambda$6014/0x51e8f7d0@dd540f
                java.lang.RuntimeException: Unable to inflate buffer data
                at com.nukkitx.protocol.bedrock.wrapper.BedrockWrapperSerializerV9_10.deserialize(BedrockWrapperSerializerV9_10.java:87) ~[Geyser-Spigot.jar:?]
                at com.nukkitx.protocol.bedrock.BedrockSession.onWrappedPacket(BedrockSession.java:283) ~[Geyser-Spigot.jar:?]
                at com.nukkitx.protocol.bedrock.BedrockRakNetSessionListener.lambda$onEncapsulated$0(BedrockRakNetSessionListener.java:39) ~[Geyser-Spigot.jar:?]
                at io.netty.util.concurrent.AbstractEventExecutor.runTask(AbstractEventExecutor.java:174) ~[netty-common-4.1.77.Final.jar:4.1.77.Final]
                at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:167) ~[netty-common-4.1.77.Final.jar:4.1.77.Final]
                at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:470) ~[netty-common-4.1.77.Final.jar:4.1.77.Final]
                at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:503) ~[netty-transport-4.1.77.Final.jar:4.1.77.Final]
                at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:995) ~[netty-common-4.1.77.Final.jar:4.1.77.Final]
                at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) ~[netty-common-4.1.77.Final.jar:4.1.77.Final]
                at java.lang.Thread.run(Unknown Source) ~[?:?]
                Caused by: java.util.zip.DataFormatException: incorrect header check
                at java.util.zip.Inflater.inflateBufferBuffer(Native Method) ~[?:?]
                at java.util.zip.Inflater.inflate(Unknown Source) ~[?:?]
                at com.nukkitx.natives.zlib.Java11Inflater.inflate(Java11Inflater.java:21) ~[Geyser-Spigot.jar:?]
                at com.nukkitx.protocol.util.Zlib.inflate(Zlib.java:56) ~[Geyser-Spigot.jar:?]
                at com.nukkitx.protocol.bedrock.wrapper.BedrockWrapperSerializerV9_10.deserialize(BedrockWrapperSerializerV9_10.java:61) ~[Geyser-Spigot.jar:?]
                ... 9 more
                [15:46:28 INFO]: [Geyser-Spigot] Bedrock user with ip: /172.17.0.1 has disconnected for reason Bedrock client disconnected

                Please check it on your own.

              6. Avatar for James A. Chambers

                Hey Hajo,

                Huge thanks for that! I think it should be helpful and it seems like this is a really low-level issue (seemingly all the way down to the hardware level somehow) that we absolutely are going to need some help from the developers who work closer to that level of the code to find. I’ll keep an eye on it and I’m sure you will as well and hopefully we’ll have some things to try here before too long!

              7. Avatar for Hajo

                Hey James,
                me again ;-).
                Android phone is working like a charme.
                But the switch is not seeing the server.
                I go to connect to local network and don’t see the server on the switch.
                Microsoft account is not connected. This seems to be not possible while connected to local network.
                On the android, I have to be connected to the MS account to see the local server.
                What should`I change?

              8. Avatar for James A. Chambers

                Hey Hajo,

                It probably is connected to the Microsoft account. The way you can fix this is by editing server.properties. There is a setting called online-mode. This controls whether it connects to Microsoft’s servers to verify your account. The default setting is:

                online-mode=true

                You want to set this setting to false. Can you give that a try? See the editing the server files if you need help getting to this file (or let me know and I can help with that as well)!

              9. Avatar for Hajo

                Hey James,
                tried that; nothing better. I currently have the impression, the restriction is on the switch side 🙁
                I will be back on that – if I am succesfull 🙂

  5. Avatar for Jeff

    I’m not sure what I’m doing wrong but I can’t get the server to start after the first time. It will initially start and work just fine but after a restart it won’t start again and I can’t seem to find a command that will start it back up. Tried Ubuntu 20.04.3 adn 22.04.1 with similar results. It also installs to a different directory than listed above for Linux, mine installed to /var/snap/docker/common/var-lib-docker/volumes/yourvolumename/_data. I’m pretty new to ubuntu but I’m trying to get this running on a VM and I figured that would be the best route to go to limit as much overhead as possible.

    1. Avatar for James A. Chambers

      Hey Jeff,

      Welcome! Your path looks okay. To explain what is happening I installed my Docker via sudo apt install docker.io so it was installed via apt. Yours was installed by snapd via something like sudo snap install docker.io. This piece should be okay.

      It’s normal for it to not start itself when the computer restarts. There are a few ways to make it do this though like with docker-compose. It is normal for it to not do it on it’s own.

      Probably the easiest way of all is to install docker-compose. Then you simply use the docker-compose.yml template from the GitHub repository from this project and it will configure everything for you and start automatically.

      Here’s another article on automatic startup (it’s easier with docker-compose but people have used both methods).

      The normal way to use it though is after a restart you would just run the original Docker launch command again. So basically you’d just start it again with:

      docker run -it -v yourvolumename:/minecraft -p 25565:25565 -p 19132:19132/udp -p 19132:19132 05jchambers/legendary-minecraft-geyser-floodgate:latest

      This will load up your server exactly how it was when it shut down basically. The server contents are all stored in the Docker volume that you put in your original message basically so they’ll all be safe through restarts.

      In other words the way to think about the Docker line is that is the server launch line. It’s not an installation line and isn’t really installing anything. If you moved that Docker volume to a different machine that had never ran the container before and ran it it would work perfectly as there basically is no installation since it runs off the Docker image (and only your server files are stored in the Docker named volume you created but this volume can easily be backed up / copied / moved).

      Hopefully that helps, let me know if that gets it going for you!

      1. Avatar for Stephen

        For restart you can use some of these switches. I added –name and –restart as part of my kickoff script: docker run -it -v minecraftserver1:/minecraft -p 25565:25565 -p 19132:19132/udp -p 19132:19132 -d –name minecraftserver1 –restart unless-stopped 05jchambers/legendary-minecraft-geyser-floodgate:latest

          1. Avatar for James A. Chambers

            Hey Stephen,

            Absolutely! The Docker switches will work well for automatic restarts. That will make it work just like my other Minecraft scripts basically (assuming they answered ‘y’ to the automatic startup question).

            They have a few different ways to control this. With docker-compose you can also create these with simple text files. The docker-compose template for this container is here.

            If you used that file you would just change the name of the volume (and the ports if you are using different ports) but you would basically just do:

            docker-compose create docker-compose.yml

            This would automatically create and restart your server for you forever as a Docker service basically. You wouldn’t even have to use the launch line with that method at all. It’s basically a one time install from the text file. It’s actually easier to do it this way in my opinion but I didn’t see it that way before I’d tried docker-compose (in other words I tried it and I liked it, the Docker launch lines are messy/ugly compared to a clean .yml file you only use once). I wanted nothing to do with it before but people started asking for the template so I finally tried it and it was way, way easier than I thought it would be.

            There is definitely nothing wrong with using either method. People who use Docker in larger environments will almost certainly go for the docker-compose file but if you are wanting it to just restart the server when the computer reboots your solution is perfectly excellent!

            1. Avatar for Stephen

              Yep, use docker-compose/ansible at work for on-prem server config and app deployment (non-k8s-hosted apps). Probably easier to have a docker-compose.yml file handy rather than remembering command line switches. Thanks for reminding me and providing one, and I’ll download it so my son can edit it and configure multiple servers!

              1. Avatar for James A. Chambers

                Hey Stephen,

                Ahh I see, you are probably more experienced than I am with it by the sound of it (I think I installed docker-compose for the first time only about 2-3 months ago for the Docker containers)! The only tricky part is including the docker -i -t switches within the docker-compose.yml file (so it creates an interactive terminal for screen) but the file includes this so it should work as expected!

  6. Avatar for Stephen

    Trying to run this on Docker/Mac. The container builds OK, but I think the volume mounting is causing problems. I get some log errors telling me that there is no secure profile applied when my son tries to connect from a java client. I have created a volume and mounted it using docker desktop, and “docker volume inspect” shows that it should be at /var/lib/docker/volumes/minecraft-server/_data. However in the Docker desktop GUI it seems to show that the volume mount is being accessed, and I can “explore” the data there, but not edit. I did try to go to ~/Library/Containers/com.docker.docker/Data/vms/0/data but there is a Docker.raw folder that might be the volume that you cannot access. I did docker exec -it /bin/bash into the container to try to modify files, but there seems to be no editor in the Docker build (might want to add for future). I ran apt-get install vim and edited the server.profiles to disable secure client (set false) and restarted and the client could connect. I can probably spin up some Linux/Raspi server to run this to get at the local files, but for now this works. I should also look at a way to access the container files on the host (in the Docker.raw file), which is quite easy on linux volumes, but I’m not sure how to do this on Mac.

    1. Avatar for James A. Chambers

      Hey Stephen,

      Welcome, thanks for trying the container out! These are indeed some interesting issues. Let’s start with the “secure profile” issue. This is related to the new controversial chat reporting feature. I think turning it off makes perfect sense for sure although I did not do this on mine and when players connect it just says chat messages could not be verified on this server. For that reason I’m going to keep an eye on this issue as I wonder why some people get a critical failure for this feature while mine just says chat messages won’t be verified when I connect to the server.

      Are they connecting with Bedrock to the Java server just out of curiosity when they get this? Or is it Java on Java crime at work here? One thing I could do to potentially solve this is to disable the setting by default in my server.properties file it uses if there is no server.properties present on the volume. EDIT: I did end up adding this to the default server.properties to prevent this issue for new servers going forward

      The reason there is no editor inside there is that it has actually never happened before where someone couldn’t edit their volume contents (on all 3 containers, this one, the plain Java one without Floodgate as well as the Bedrock one). I did some research though and this is a thing on Mac OS X. You’re definitely right that something is different here. I’m certain this has happened to others on the other containers but nobody has reported it to me before so I had no idea and I am in your debt.

      Check out this article.

      I’m definitely not opposed to adding an editor in as it will take a negligible amount of space but I’m hoping you will be able to access your Docker volume contents as this will make things much more pleasant for sure. I’ll get an editor put in if only for troubleshooting/diagnostic purposes in the future! EDIT: I ended up adding nano as the editor because vim made the project go from 3 low vulnerabilities to 45 on Snyk, and nano keeps it at 3.

      Can you give that a try and let me know if it works for you? I’ll definitely add it to the documentation for Mac OS X if this takes care of being able to edit the files!

      1. Avatar for Stephen

        James, thanks for the quick response and the changes! I still have the server running on my old Mac Mini, but my son and I put another one together on a Pi4. Thought it was a good idea to teach him to use Linux Subsystem and build a Pi/Ubuntu/Docker server. Now we have a portable minecraft server that we use with our portable WiFi/4G/Ethernet router. This is cool. I’ll need to check out the Mac/path stuff someday, but for now we are good and everything works out of the box with the “secure profile” setting off.

        By the way, I’ve been following your blog for a long time (can’t remember when) and the combination of RasPi stuff, other hardware/security hacks, and crypto stuff is definitely my kind of interests. Thanks for putting content out there, I’m sure there are lots reading it. In fact I recommended it to my team at work as they are building docker/k8s servers on RasPis for learning. (Also Alex Ellis from OpenFaaS also has cool pi/cluster/boot info).

        1. Avatar for James A. Chambers

          Hey Stephen,

          Wow, that is fantastic! That is basically the dream I had when putting these packages/scripts together. When I was experimenting with Minecraft on the Pi something like 7-8 years ago originally learning how to use the Linux subsystem was the most valuable and life changing thing I got out of doing it. It’s easy, free, and safe. This is extremely valuable to know and I believe will only become more valuable as Microsoft has never been more friendly to Linux as well so it’s showing up with full support in Microsoft products across the board. Even if you’d never want to use a Linux desktop (or you’re not there yet) the value for servers (and hosting microservices like this) is amazing even for people who absolutely swear by Mac/Windows.

          That is awesome that you’ve been visiting for so long! It’s honestly been a hard journey because of how the cryptocurrency market is combined with the Raspberry Pi shortage + the general economic conditions. I’m trying to diversify my content a little bit for that reason but the spirit of the site won’t change (and I hope I even might expose people to stuff they’ve truly never seen before but that may actually be valuable/useful to them). The site is absolutely about empowering people through technology and I love what you’re doing with the server as it’s in that spirit!

          Whatever I’ve been able to accomplish with the scripts and the site it’s honestly thanks to people like you who visited early on and left me comments and feedback. The first several years of trying to launch something like this is pretty lonely. The way launching new IT apps / services/ ideas kind of works is that literally nobody cares and you won’t make any money. For years.

          If you are somehow able to keep doing it though one day all of the sudden it’s just finally enough. You finally rank high enough and all of the sudden you are what everyone is using. I don’t mean to go cheese mode but seriously it’s so quiet in those early years that without people like you reading and giving feedback I’m not sure anyone can truly do this on their own.

          I’m not saying that I’m there yet and have succeeded in making the site / projects financially viable (not yet, it’s still being subsidized by my crypto mining even in as bad of shape as it’s in) but I’ve reversed the decline in numbers due to the crypto/Pi market and it’s starting to grow again. I figure if I can keep it growing during this economic nightmare then when things do improve that is when it will probably happen. It doesn’t help that I want to accomplish this by not really taking money from my readers. The Amazon links are the only monetization because I’d like to just do enough volume that I take Amazon’s money from the clicks even though they pay like 1-2%. My readers need their money. Jeff Bezos doesn’t so I’ll take his money gladly as the Amazon commission comes out of their end and not the purchaser’s.

          Thank you for sharing, I’m glad you met with success here and created an awesome portable Minecraft server. Definitely stop by if you need any more help and take care!

          1. Avatar for Stephen

            I think I started learning Unix/Linux back in 2002 when my company dropped me into a project that used massive Sun servers to run their OA&M (ops management project). Knowing nothing, I got one of the first editions of Evi Nemeth’s classic Unix admin guide from a bookstore(!) and used Knoppix live CD on my company’s Dell Windows laptop to force myself to learn the CLI. Now it’s everywhere, it’s astonishing, but I’m far from a poweruser. Good luck with the crypto, I just started spring 2021 (ouch), despite working on distributed systems and with young engineers, somehow ignored it until now. As they say, we are still early – I hope…

            1. Avatar for James A. Chambers

              Hey Stephen,

              Great stuff! That’s a great background and a pretty early one in Linux because as you said that was *much* less common back then. It was a real chore, a nightmare even, to try to use Linux on regular systems (i.e. consumer hardware) a lot of the time and I bet even Linus himself would agree with that. That may have been the first time I tried Linux was around that time as well! I think my earliest need was hosting game servers for my earliest projects I did when I was literally a child (under 18) that are on my GitHub. The Linux dedicated servers (and eventually virtual dedicated servers) were always substantially cheaper and performed very well.

              I’m working on becoming a power user in Linux. I would probably be considered one at most organizations. As I learn more and more tricks like using QEMU and Box64 to emulate binaries from other architectures and crazy things like that I actually only realize more how much I still don’t know. This is kind of a theme I run into across IT though in general. The people I encounter in IT that are the most difficult to work with are the people who think they are general experts (i.e. good at everything in IT) simply because they don’t understand how much they don’t know. I feel like I wouldn’t be good enough to even be an intern for Linus and that’s probably a healthy attitude to have when approaching Linux!

              I agree that we’re both early. I think embedded computers have given a huge boost to Linux as well particularly the Raspberry Pi. Linux always has done incredibly well on embedded systems / SBCs / etc. but the Raspberry Pi has unquestionably pushed it into way more people’s hands than probably anything else ever. 40+ million Pis sold so far were the last numbers I’ve seen. Exciting times ahead!

Leave a Comment

Your email address will not be published. Required fields are marked *

Type here..

Exit mobile version