Geyser Documentation

A bridge/proxy allowing you to connect to Minecraft: Java Edition servers with Minecraft: Bedrock Edition.

RAW Doc

CONTRIBUTING

Thank you for considering a contribution! Generally, Geyser welcomes PRs from everyone. There are some guidelines about what features should go where:

Pull requests that may not get accepted: Niche features that apply to a specific group, for example, integration with a specific plugin. For now, please create a separate plugin if possible.

Pull requests for Floodgate: Anything that opens up information within the game for developers to use.

Pull requests for Geyser: Anything that fixes compatibility between Java or Bedrock or improves the quality of play for Bedrock players. The exception is wherever direct server access is required; in this case, it may be better for Floodgate.

We have some general style guides that should be applied throughout the code:

java
public class LongClassName {
    private static final int AIR_ITEM = 0; // Static item names should be capitalized

    public Int2IntMap items = new Int2IntOpenHashMap(); // Use the interface as the class type but initialize with the implementation.

    public int nameWithMultipleWords = 0;

    /**
     * Javadoc comment to explain what a function does.
     */
    @RandomAnnotation(stuff = true, moreStuff = "might exist")
    public void applyStuff() {
        Variable variable = new Variable();
        Variable otherVariable = new Variable();

        if (condition) {
            // Do stuff.
        } else if (anotherCondition) {
            // Do something else.
        }

        switch (value) {
            case 0 -> stuff();
            case 1 -> differentStuff();
        }
    }
}

Make sure to comment your code where possible. To mark nullable methods, use @Nullable (and subsequently, @NonNull) from the org.checkerframework.checker.nullness.qual package.

The nature of our software requires a lot of arrays and maps to be stored - where possible, use Fastutil's specialized maps. For example, if you're storing block state translations, use an Int2IntMap.

We have a rundown of all the tools you need to develop over on our wiki. If you have any questions, please feel free to reach out to our Discord!

If you're making a pull request that also depends on changes to the base API, simply fork the API repo and create a branch with the same name as your Geyser PR. The pull request action will automatically use your API changes while building your changes to Geyser.


README



Geyser is a bridge between Minecraft: Bedrock Edition and Minecraft: Java Edition, closing the gap from those wanting to play true cross-platform.

Geyser is an Open Collaboration project.

What is Geyser?

Geyser is a proxy, bridging the gap between Minecraft: Bedrock Edition and Minecraft: Java Edition servers.
The ultimate goal of this project is to allow Minecraft: Bedrock Edition users to join Minecraft: Java Edition servers as seamlessly as possible. However, due to the nature of Geyser translating packets over the network of two different games, do not expect everything to work perfectly!

Special thanks to the DragonProxy project for being a trailblazer in protocol translation and for all the team members who have joined us here!

Supported Versions

Edition Supported Versions
Bedrock 26.0, 26.1, 26.2, 26.3, 26.10, 26.20, 26.21, 26.22, 26.23, 26.30, 26.31, 26.32, 26.33, 26.34, 26.40, 26.41, 26.42, 26.43, 26.44
Java 26.2 (For older versions, see this guide)

Setting Up

Take a look here for how to set up Geyser.

What's Left to be Added/Fixed

  • Near-perfect movement (to the point where anticheat on large servers is unlikely to ban you)
  • Some Entity Flags

What can't be fixed

There are a few things Geyser is unable to support due to various differences between Minecraft Bedrock and Java. For a list of these limitations, see the Current Limitations page.

Compiling

  1. Clone the repo to your computer
  2. Navigate to the Geyser root directory and run git submodule update --init --recursive. This command downloads all the needed submodules for Geyser and is a crucial step in this process.
  3. Run gradlew build and locate to bootstrap/build folder.

Contributing

Any contributions are appreciated. Please feel free to reach out to us on Discord if
you're interested in helping out with Geyser.

Libraries Used: