Skip to content

Instantly share code, notes, and snippets.

@moxwel
Last active February 10, 2023 18:50
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save moxwel/4427b5324e0f6d8807adac28871bfecd to your computer and use it in GitHub Desktop.
Save moxwel/4427b5324e0f6d8807adac28871bfecd to your computer and use it in GitHub Desktop.
Setup crossplay multi version compatible Minecraft Java and Bedrock server

#1 | Crossplay multi version compatible Minecraft Java and Bedrock server with GeyserMC

πŸ“š Index
  1. ➑ minecraft_server_crossplay.md GitHub Gist last commit

  2. minecraft_server_luckperms.md GitHub Gist last commit

  3. minecraft_server_authme.md GitHub Gist last commit

  4. minecraft_server_easycommandblocker.md GitHub Gist last commit


Using PaperMC as backend server (version 1.14.4) and Velocity as proxy with "modern" forwarding.

Tested on Exaroton and standalone.

Source: https://support.exaroton.com/hc/en-us/articles/4404724229137-Using-Minecraft-proxies-on-exaroton

Geyser only works with Java 16+. Paper 1.14.4 only works with Java 8. That's why is necessary to use a proxy in this case.
Check out Paper requirements. Geyser requirements and Floodgate requirements for more information.

TIP: If you want to set up a Paper 1.16.5+ server, you can do all of this without proxy! Is so much easier.

Proxy (Velocity)

  • Plugins:

    • GeyserMC geyser-velocity.jar (crossplay support)
    • Floodgate floodgate-velocity.jar (java/bedrock linking)
  • πŸ”€ /velocity/velocity.toml:

    show-max-players = 10                     # Only visual.
    online-mode = false                       # Depends on you.
    player-info-forwarding-mode = "modern"    # Use this if using PaperMC.
    
    [servers]                                 # Servers to forward.
    main = "<address>:<port>"
    try = ["main"]                            # First server to forward when player joins.
    
    [advanced]
    show-ping-requests = true                 # Show when clients ping the server.
    announce-proxy-commands = true            # Necessary for tab autocomplete.
  • Your PROXY_TOKEN is in /velocity/forwarding.secret.

Server (PaperMC)

  • Plugins:

    • ViaVersion ViaVersion.jar (multi-version support)

    ViaVersion permits newer Minecraft versions to join old Minecraft Server versions. For example: Minecraft 1.19-1.18-1.17 can join Minecraft 1.17 Server, but Minecraft 1.16 can't.

    If you want older Minecraft versions to join newer Minecraft Server versions, you need ViaBackwards.

  • πŸ“ƒ /paper/spigot.yaml:

    settings:
      bungeecord: false        # Must disable if using Velocity proxy with "modern" forwarding.
    commands:
      send-namespaced: true    # "<plugin>:<command>" style commands.
  • πŸ“ƒ /paper/paper.yaml:

    settings:
      velocity-support:           # Modify this section only if using Velocity proxy.
        enabled: true             # Enable this for "modern" forwarding.
        online-mode: false        # Must match proxy's online-mode configuration.
        secret: <PROXY_TOKEN>     # Paste your secret here.

    In Paper 1.19+ those settings are located in /paper/config/paper-global.yml/.

  • πŸ“ƒ /paper/commands.yml:

    aliases:
      icanhasbukkit:
      - []                        # Disable command.
      ?:
      - minecraft:help            # Vanilla-style help command.
      help:
      - minecraft:help            # Vanilla-style help command.
  • πŸ“ƒ /paper/server.properties:

    online-mode = false           # Must disable if using proxy.

GeyserMC / Floodgate

These settings apply even if you aren't using proxy.

  • πŸ”€ /velocity/plugins/geyser-velocity/config.yml:

    remote:
      auth-type: floodgate                  # Tell Geyser to use Floodgate.
    
    passthrough-motd: true                  # Use motd set in servrer/proxy.
    passthrough-player-counts: true         # Use player count set in server/proxy.
    
    show-cooldown: title                    # Show the MC 1.8 style cooldown to Bedrock players.
    show-coordinates: true                  # Show coordinates to Bedrock players.
    emote-offhand-workaround: "no-emotes"    # Let Bedrock players swap offhand items with emotes.
  • πŸ”€ /velocity/plugins/floodgate/config.yml:

    username-prefix: "."               # Prefix for non-linked Bedrock players.

    If Bedrock player called Steve joins, they will be renamed as .Steve.

    If your server is in online-mode=false, you may want to use a local database for linking data..

Extras

Geyser command alias

  • πŸ“ƒ /paper/commands.yml:

    aliases:
      advancements:
      - geyser advancements
      offhand:
      - geyser offhand

Aikar's Flags

Add these Java arguments for Minecraft Server (PaperMC):

-XX:+UseG1GC -XX:+ParallelRefProcEnabled -XX:MaxGCPauseMillis=200 -XX:+UnlockExperimentalVMOptions -XX:+DisableExplicitGC -XX:+AlwaysPreTouch -XX:G1NewSizePercent=30 -XX:G1MaxNewSizePercent=40 -XX:G1HeapRegionSize=8M -XX:G1ReservePercent=20 -XX:G1HeapWastePercent=5 -XX:G1MixedGCCountTarget=4 -XX:InitiatingHeapOccupancyPercent=15 -XX:G1MixedGCLiveThresholdPercent=90 -XX:G1RSetUpdatingPauseTimePercent=5 -XX:SurvivorRatio=32 -XX:+PerfDisableSharedMem -XX:MaxTenuringThreshold=1 -Dusing.aikars.flags=https://mcflags.emc.gs -Daikars.new.flags=true

Source: https://docs.papermc.io/paper/aikars-flags

Exaroton plugin

Use if your proxy and backend servers are hosted in Exaroton. It can be installed on proxy only. This is optional.

  • πŸ”€ /velocity/plugins/exaroton/config.toml:

    [auto-start]
    enabled = false                          # Enable/Disable.
    servers = ["example.exaroton.me:port"]   # Servers will autostart when proxy is online.
    
    [auto-stop]
    enabled = false                          # Enable/Disable.
    servers = ["example.exaroton.me:port"]   # Servers will stop when proxy is shut down.

Local Floodgate linking database

Use this when using online-mode = false on server/proxy.

Must install SQLite Floodgate plugin to work: download floodgate-sqlite-database.jar inside /velocity/plugins/floodgate/ folder. DO NOT PUT IT IN /velocity/plugins/.

  • πŸ”€ /velocity/plugins/floodgate/config.yml:

    player-link:
      enable-own-linking: true        # Enable local database.
      allowed: true
      link-code-timeout: 60           # Only 1 minute to link account for security.
      type: sqlite
      enable-global-linking: false    # Disable online database from Floodgate servers.

    Linking data will be on linked_players.db file inside /velocity/plugins/floodgate/.

Anti X-Ray configs

Apply this inside world configs on each dimension. Read this.

  • Overworld:
anticheat:
  anti-xray:
    enabled: true
    engine-mode: 2
    hidden-blocks:
    - copper_ore
    - deepslate_copper_ore
    - raw_copper_block
    - diamond_ore
    - deepslate_diamond_ore
    - gold_ore
    - deepslate_gold_ore
    - iron_ore
    - deepslate_iron_ore
    - raw_iron_block
    - lapis_ore
    - deepslate_lapis_ore
    - redstone_ore
    - deepslate_redstone_ore
    lava-obscures: false
    max-block-height: 64
    replacement-blocks:
    - chest
    - amethyst_block
    - andesite
    - budding_amethyst
    - calcite
    - coal_ore
    - deepslate_coal_ore
    - deepslate
    - diorite
    - dirt
    - emerald_ore
    - deepslate_emerald_ore
    - granite
    - gravel
    - oak_planks
    - smooth_basalt
    - stone
    - tuff
    update-radius: 2
    use-permission: false
  • Nether:
anticheat:
  anti-xray:
    enabled: true
    engine-mode: 2
    hidden-blocks:
    - ancient_debris
    - bone_block
    - glowstone
    - magma_block
    - nether_bricks
    - nether_gold_ore
    - nether_quartz_ore
    - polished_blackstone_bricks
    lava-obscures: false
    max-block-height: 128
    replacement-blocks:
    - basalt
    - blackstone
    - gravel
    - netherrack
    - soul_sand
    - soul_soil
    update-radius: 2
    use-permission: false
  • End:
anticheat:
  anti-xray:
    enabled: false

Hearts below name

Run the commands below.

/scoreboard objectives add health_score health "§c❀"

/scoreboard objectives setdisplay belowName health_score

⬆ Go to top

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment