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!

Subscribe
Notify of
guest

406 Comments
Inline Feedbacks
View all comments
Theron Wilson
Theron Wilson
1 year ago

Is it possible to change the install location? Its a huge hassle going to /var/lib/docker. I would like to install it to etc/home/user/minecraft

Theron Wilson
Theron Wilson
1 year ago

Hey thanks for the reply. I heavily appreciate you being concerned with everyone’s security. I’ve just decided to deal with the inconvenience. I was using WinSCP to move and transfer files because thats the easiest for me, but the permissions on the folders prevented me from entering/editing. So everytime I would have to run sudo chmod -R +777 on every directory until I reached the one I wanted to get to. There is probably a much easier way and I’m just stupid, but its worked for me. Actually, I ran into a new problem. I am using a plugin that is incompatible with ViaVersion. Is there anyway to remove ViaVersion? Everytime I try to remove it, it comes back. Thanks

Peter
Peter
1 year ago

Hi again James,
I hope your interviews went well.
I understand that it’s not worth your while at the moment to add forge support.
Maybe you can just help me debug getting the existing container up and running on the NAS? I seem to be going round and round in circles with the same error related to volumes.
Will try to email details to your paypal email, but in case thay isn’t monitored / doesn’t work, please let me know. You should be able to email me or dm through my profile.
Thanks!

TonyK
TonyK
1 year ago

Greetings, loving this server, thank you!

Been running it for a while, and I just noticed this is popping up at startup:

Starting org.bukkit.craftbukkit.Main
*** Warning, you've not updated in a while! ***
*** Please download a new build as per instructions from https://papermc.io/downloads ***

Instructions appear simple enough, download new paper jar and replace. Only problem is I can’t seem to find the paper jar file on my install. I’ve been all through the volume and don’t know where to find it. Looking through the rest of the events, looks like I’m still on 1.19.2 (and a snapshot version of 1.19.2), but latest is 1.19.4. Is it perhaps a setting that I haven’t set to auto-update?

[13:19:59 INFO]: This server is running Paper version git-Paper-307 (MC: 1.19.2) (Implementing API version 1.19.2-R0.1-SNAPSHOT) (Git: 476ef25)

TonyK
TonyK
1 year ago

It did (and after updating all the outdated plugins. 🙂 ), thank you!

João Grazina
João Grazina
10 months ago

Hi James,

You’ve been very patient with all of these folks, but rest assured you have lots of smiling kids on this end!
I’m having the same predicament as Tony here. It did work with the -e Version 1.19.4 flag, but once I remove it, it falls back to 1.19.3.

Now, I was able to check the versions folder, deleted the 1.19.3, and when launching with the flag, it updated the version_history.json to the current being 1.19.4.
As soon as I remove the flag, it automatically upgrades (or in this case downgrades) to 1.19.3.

The only reason I noticed this was because I wanted to op all the kids so they had all infinite effects and play super-heroes, and realised I wasn’t running the container with -it, so I restarted it and it started complaining their world was written in a newer version, a bunch of exceptions and an empty world with kids falling in the void.

Could it be that somehow the “:latest” was moved back from 1.19.4 somehow?

Thanks in advance for your help … and thanks anyway, if you don’t have time to reply!
João

João Grazina
João Grazina
10 months ago

Hey James,
I got it to work indeed, without the -e Version flag. However, i had to pull from the repository without the :latest

sudo docker pull 05jchambers/legendary-minecraft-geyser-floodgate

Same for the new 1.20 version.

Thanks again for your support!
Kid’s are now building japanese gardens! 😂

Michael
Michael
1 year ago

Hello,
everything is working fine on Rasberry Pi 4. The kids are playing on a Nintendo Switch. Therefore I have to modifie the DNS-Server in the switch to use a Bedrock connect server for connecting to private servers. Can I add my own Bedrock Connect DNS Server in this container, use another container for the bedrock connect server or does this will cause new conflicts by using the same port?

Michael
Michael
1 year ago

Hello James;
Thank you for your great support! The idea of having my own DNS server came to me so that the children on the PC and the IOS tablet cannot use the public Bedrock servers, but only our own. I could edit the hosts file on a PC, but I don’t know how to do that on a tablet.
Other questions:
My daughter loves dogs. So I was looking for a plugin/mod/addon and found something called “better dogs”. It is offered as a texture pack or as a resource pack. The children play with the Bedrock Edition, but I have your Java server with Geyser as the server. Now I’m not sure if I can install this extension.
In the Server.Properties I can specify texture packs. Now, when I join the Java server with a Bedrock client, does it offer me to install the package, or does it not work that way?
For an update of the Docker container I would have to enter the pull command as described by Tonyk and it finds the correct container on its own? Or do I have to give all the arguments like port, version and volume again?
The backups are now stored on my server. With a 500GB SSD, this shouldn’t be a problem in terms of space. But if I don’t need these automatic backups, could I deactivate them with which command?
Best regards
Michael

Michael
Michael
1 year ago
Reply to  Michael

Also, can I specify multiple texture packs in the file, or do I need to install Optifine on the client? It would probably be possible on the PC, but probably not on the Ipad and the Switch.

Michael
Michael
1 year ago

Hello James,
I am very sorry that I understand so little about it, as I have to relearn everything. I thought there were only two versions of servers, Bedrock and Java. Now I realize that every fork has its peculiarity. I didn’t want you to start something new. I’m very happy with the current container, but would like to learn what I can modify and how. I didn’t realize that Forge or Fabric is another fork of Server
Do I have to enter the command to end the backup function separately in the server console or where do I enter the command?

Michael
Michael
1 year ago

Hello James,
the server starts automatic at boot. So do I have to stop the server and then run the command with BackupCount=1? I´ve got some error massages in the server console. I´ve sent a screenshot of the masseges in Serverconsole to your email. PErhaps you can have a look.
Best regards

Michael
Michael
1 year ago

Hello James,
You asked, if I Did install ViaVersion yourself manually? No! And pulling I get the massage “Your Image is up to date!” May the error is caused by an incompatible Plugin. Now the server is running fine. Can you explain, why mutliverse core as plugin for Java Servers is working also for the joined bedrock clients? With the EssentialX plugin, version 2.19.7, which is released for 1.19, still gave the error: you are running an unsupported server. Now I have taken a DEV Build 2.20. This runs without errors.
To install resource packs for Bedrock, I should load the pack into Geyser’s packs folder. So it just adds one folder named pack, or do I have to add the subfolders? Do I then have to add a JSON file with the UUID and the version to activate the pack?
At the moment I’m still trying desperately to install a special TNT pack (https://mcpedl.com/more-tnt-add-on/). Are my efforts in vain? After unpacking, this has a resource pack and a behavior pack. Do these two have to be in Geyser’s Packs folder for the addon to run?
In some articles it says only tested up to version 1.18 and it still needs a datapack. If that’s true, could I run your server with version 1.18 to test this?
Best regards

elborderas
elborderas
1 year ago

Hi,
It seems that my kid’s devices have updated to a beta version (1.19.80.22) and now cannot connect to my server:

Outdated Geyser proxy! This server supports the following Bedrock versions: 1.19.30/1.19.31, 1.19.40/1.19.41, 1.19.50/1.19.51, 1.19.60, 1.19.62, 1.19.70/1.19.71

Is there a way I can fix this?

Thanks

elborderas
elborderas
1 year ago

Thanks.
I did pull the latest version of the container which has ViaVersion but it didn’t work with the beta.

The app was in Android so i uninstalled the App, unenrolled from the Beta program and installed again. I believe they are now in 1.19.71 and it works.

Probably the beta is too new

elborderas
elborderas
1 year ago

Thanks for taking care, like always. I did see some errors or warnings when starting the container around ViaVersion but that may be expected. I didn’t manage to capture the logs. I’ll check next time I restart the container, in case it helps

Tom Salmon
Tom Salmon
1 year ago

Hello James.

Id like to run the latest minecraft snapshot on the server.
Is this possible ? If so, how pls.

Thanks

Tom

Edward
Edward
1 year ago

Oops, sorry should have read the most recent comment, disregard!

1 5 6 7 8 9 14