This is a Velocity plugin that makes it possible to host a modern forge server behind a Velocity proxy!

Overview

Ambassador

This is a Velocity plugin that makes it possible to host a modern forge server behind a Velocity proxy!

Unlike other solutions, this plugin does not require any special modifications to the client. (The player doesn't need to do anything)

This plugin is right now in its alpha stage and should not be used in production, use it at your own risk, you have been warned.

How to get started:

On the Velocity proxy side:

  1. Download and install this plugin to your proxy.
  2. Start the proxy, then close it.
  3. Go to "plugins/ambassador" and open "forgeServer.toml"
  4. In the "Forge Server" field, put the name of the forge server. The name must be the same as that you put in "Velocity.toml" config.
  5. Now you are done on the proxy side!

On the Forge server side:

  1. Download and install "Ambassador-Forge" as a mod to your forge server. (Found at https://github.com/adde0109/Ambassador-Forge)
  2. Start the server.
  3. If you wish to use modern forwarding, close the server and open "ambassador-common.toml" in the config folder and put your forwarding secret in the "forwardingSecret" field.
  4. In Server.Properties make sure online-mode is set to false.
  5. You are now ready to start the server and connect to it with Velocity!

Features

  • Server Switching.
  • Force forge clients to connect directly to forge server if mods don't allow vanilla.
  • Connect to diffrent forge servers depending on client version.

Planned features

  • Ping Forwarding.
  • Server switching using kick to reset the client.
  • Smart handshaking-data caching system to reduce load/network-traffic.
Comments
  • Error when connecting to ChromaSky2 1.16.5 modpack

    Error when connecting to ChromaSky2 1.16.5 modpack

    `[23:06:54 INFO]: [server connection] Longtianmu -> chromasky2 has connected [23:06:55 ERROR]: [server connection] Longtianmu -> chromasky2: exception encountered in com.velocitypowered.proxy.connection.backend.LoginSessionHandler@4b57b34f

    io.netty.handler.codec.EncoderException: java.lang.IllegalArgumentException: Unable to find id for packet of type com.velocitypowered.proxy.protocol.packet.PluginMessage in SERVERBOUND protocol 1.16.4 at io.netty.handler.codec.MessageToByteEncoder.write(MessageToByteEncoder.java:125) ~[velocity.jar:3.1.2-SNAPSHOT (git-e8bf6ab5-b161)] at io.netty.channel.AbstractChannelHandlerContext.invokeWrite0(AbstractChannelHandlerContext.java:717) ~[velocity.jar:3.1.2-SNAPSHOT (git-e8bf6ab5-b161)] at io.netty.channel.AbstractChannelHandlerContext.invokeWrite(AbstractChannelHandlerContext.java:709) ~[velocity.jar:3.1.2-SNAPSHOT (git-e8bf6ab5-b161)] at io.netty.channel.AbstractChannelHandlerContext.write(AbstractChannelHandlerContext.java:792) ~[velocity.jar:3.1.2-SNAPSHOT (git-e8bf6ab5-b161)] at io.netty.channel.AbstractChannelHandlerContext.write(AbstractChannelHandlerContext.java:702) ~[velocity.jar:3.1.2-SNAPSHOT (git-e8bf6ab5-b161)] at io.netty.handler.codec.MessageToMessageEncoder.write(MessageToMessageEncoder.java:110) ~[velocity.jar:3.1.2-SNAPSHOT (git-e8bf6ab5-b161)] at io.netty.channel.AbstractChannelHandlerContext.invokeWrite0(AbstractChannelHandlerContext.java:717) ~[velocity.jar:3.1.2-SNAPSHOT (git-e8bf6ab5-b161)] at io.netty.channel.AbstractChannelHandlerContext.invokeWriteAndFlush(AbstractChannelHandlerContext.java:764) ~[velocity.jar:3.1.2-SNAPSHOT (git-e8bf6ab5-b161)] at io.netty.channel.AbstractChannelHandlerContext.write(AbstractChannelHandlerContext.java:790) ~[velocity.jar:3.1.2-SNAPSHOT (git-e8bf6ab5-b161)] at io.netty.channel.AbstractChannelHandlerContext.writeAndFlush(AbstractChannelHandlerContext.java:758) ~[velocity.jar:3.1.2-SNAPSHOT (git-e8bf6ab5-b161)] at io.netty.channel.DefaultChannelPipeline.writeAndFlush(DefaultChannelPipeline.java:1020) ~[velocity.jar:3.1.2-SNAPSHOT (git-e8bf6ab5-b161)] at io.netty.channel.AbstractChannel.writeAndFlush(AbstractChannel.java:311) ~[velocity.jar:3.1.2-SNAPSHOT (git-e8bf6ab5-b161)] at com.velocitypowered.proxy.connection.MinecraftConnection.write(MinecraftConnection.java:218) ~[velocity.jar:3.1.2-SNAPSHOT (git-e8bf6ab5-b161)] at com.velocitypowered.proxy.connection.client.InitialConnectSessionHandler.handle(InitialConnectSessionHandler.java:49) ~[velocity.jar:3.1.2-SNAPSHOT (git-e8bf6ab5-b161)] at com.velocitypowered.proxy.protocol.packet.PluginMessage.handle(PluginMessage.java:104) ~[velocity.jar:3.1.2-SNAPSHOT (git-e8bf6ab5-b161)] at com.velocitypowered.proxy.connection.MinecraftConnection.channelRead(MinecraftConnection.java:142) ~[velocity.jar:3.1.2-SNAPSHOT (git-e8bf6ab5-b161)] at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) ~[velocity.jar:3.1.2-SNAPSHOT (git-e8bf6ab5-b161)] at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) ~[velocity.jar:3.1.2-SNAPSHOT (git-e8bf6ab5-b161)] at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) ~[velocity.jar:3.1.2-SNAPSHOT (git-e8bf6ab5-b161)] at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:103) ~[velocity.jar:3.1.2-SNAPSHOT (git-e8bf6ab5-b161)] at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) ~[velocity.jar:3.1.2-SNAPSHOT (git-e8bf6ab5-b161)] at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) ~[velocity.jar:3.1.2-SNAPSHOT (git-e8bf6ab5-b161)] at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) ~[velocity.jar:3.1.2-SNAPSHOT (git-e8bf6ab5-b161)] at com.velocitypowered.proxy.protocol.netty.MinecraftDecoder.tryDecode(MinecraftDecoder.java:89) ~[velocity.jar:3.1.2-SNAPSHOT (git-e8bf6ab5-b161)] at com.velocitypowered.proxy.protocol.netty.MinecraftDecoder.channelRead(MinecraftDecoder.java:58) ~[velocity.jar:3.1.2-SNAPSHOT (git-e8bf6ab5-b161)] at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) ~[velocity.jar:3.1.2-SNAPSHOT (git-e8bf6ab5-b161)] at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) ~[velocity.jar:3.1.2-SNAPSHOT (git-e8bf6ab5-b161)] at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) ~[velocity.jar:3.1.2-SNAPSHOT (git-e8bf6ab5-b161)] at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:103) ~[velocity.jar:3.1.2-SNAPSHOT (git-e8bf6ab5-b161)] at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) ~[velocity.jar:3.1.2-SNAPSHOT (git-e8bf6ab5-b161)] at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) ~[velocity.jar:3.1.2-SNAPSHOT (git-e8bf6ab5-b161)] at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) ~[velocity.jar:3.1.2-SNAPSHOT (git-e8bf6ab5-b161)] at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:103) ~[velocity.jar:3.1.2-SNAPSHOT (git-e8bf6ab5-b161)] at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) ~[velocity.jar:3.1.2-SNAPSHOT (git-e8bf6ab5-b161)] at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) ~[velocity.jar:3.1.2-SNAPSHOT (git-e8bf6ab5-b161)] at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) ~[velocity.jar:3.1.2-SNAPSHOT (git-e8bf6ab5-b161)] at io.netty.handler.timeout.IdleStateHandler.channelRead(IdleStateHandler.java:286) ~[velocity.jar:3.1.2-SNAPSHOT (git-e8bf6ab5-b161)] at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) ~[velocity.jar:3.1.2-SNAPSHOT (git-e8bf6ab5-b161)] at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) ~[velocity.jar:3.1.2-SNAPSHOT (git-e8bf6ab5-b161)] at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) ~[velocity.jar:3.1.2-SNAPSHOT (git-e8bf6ab5-b161)] at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:327) ~[velocity.jar:3.1.2-SNAPSHOT (git-e8bf6ab5-b161)] at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:299) ~[velocity.jar:3.1.2-SNAPSHOT (git-e8bf6ab5-b161)] at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) ~[velocity.jar:3.1.2-SNAPSHOT (git-e8bf6ab5-b161)] at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) ~[velocity.jar:3.1.2-SNAPSHOT (git-e8bf6ab5-b161)] at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) ~[velocity.jar:3.1.2-SNAPSHOT (git-e8bf6ab5-b161)] at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410) ~[velocity.jar:3.1.2-SNAPSHOT (git-e8bf6ab5-b161)] at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) ~[velocity.jar:3.1.2-SNAPSHOT (git-e8bf6ab5-b161)] at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) ~[velocity.jar:3.1.2-SNAPSHOT (git-e8bf6ab5-b161)] at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919) ~[velocity.jar:3.1.2-SNAPSHOT (git-e8bf6ab5-b161)] at io.netty.channel.epoll.AbstractEpollStreamChannel$EpollStreamUnsafe.epollInReady(AbstractEpollStreamChannel.java:800) ~[velocity.jar:3.1.2-SNAPSHOT (git-e8bf6ab5-b161)] at io.netty.channel.epoll.EpollEventLoop.processReady(EpollEventLoop.java:487) ~[velocity.jar:3.1.2-SNAPSHOT (git-e8bf6ab5-b161)] at io.netty.channel.epoll.EpollEventLoop.run(EpollEventLoop.java:385) ~[velocity.jar:3.1.2-SNAPSHOT (git-e8bf6ab5-b161)] at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:995) ~[velocity.jar:3.1.2-SNAPSHOT (git-e8bf6ab5-b161)] at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) ~[velocity.jar:3.1.2-SNAPSHOT (git-e8bf6ab5-b161)] at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) ~[velocity.jar:3.1.2-SNAPSHOT (git-e8bf6ab5-b161)] at java.lang.Thread.run(Thread.java:833) [?:?] Caused by: java.lang.IllegalArgumentException: Unable to find id for packet of type com.velocitypowered.proxy.protocol.packet.PluginMessage in SERVERBOUND protocol 1.16.4 at com.velocitypowered.proxy.protocol.StateRegistry$PacketRegistry$ProtocolRegistry.getPacketId(StateRegistry.java:469) ~[velocity.jar:3.1.2-SNAPSHOT (git-e8bf6ab5-b161)] at com.velocitypowered.proxy.protocol.netty.MinecraftEncoder.encode(MinecraftEncoder.java:49) ~[velocity.jar:3.1.2-SNAPSHOT (git-e8bf6ab5-b161)] at com.velocitypowered.proxy.protocol.netty.MinecraftEncoder.encode(MinecraftEncoder.java:29) ~[velocity.jar:3.1.2-SNAPSHOT (git-e8bf6ab5-b161)] at io.netty.handler.codec.MessageToByteEncoder.write(MessageToByteEncoder.java:107) ~[velocity.jar:3.1.2-SNAPSHOT (git-e8bf6ab5-b161)] ... 55 more`

    opened by Longtianmu 27
  • Unable to connect to modded server (All the Mods 7 1.18) with legacy or modern ip forwarding

    Unable to connect to modded server (All the Mods 7 1.18) with legacy or modern ip forwarding

    Screenshot_6 Screenshot_7 Screenshot_5 Screenshot_8 I have attempted to join with legacy and modern ip forwarding and also tried the forced setting with both. I also have tried compiling the 1.18.2 branch manually but to no avail. Let me know if you want more information.

    opened by ZiroGX2 6
  • Cant use * perm node 1.16.5 ARCLIGHT

    Cant use * perm node 1.16.5 ARCLIGHT

    Hello im using ambassador inside my velocity proxy, but im getting this Velocity log: https://pastebin.com/7Tw2UECD

    Player log: https://pastebin.com/DwRKbxRD

    i can join server if i dont have * perm on my user but if i put it it disconnects me and cant join back

    opened by Liopoxys 2
  • Nothing happens when placed in velocity plugins folder.

    Nothing happens when placed in velocity plugins folder.

    I downloaded the ambassador folder and placed it into the velocity plugins folder, relaunched velocity but upon startup velocity says "loaded 0 plugins" and I did not notice any change of files. Is this normal? I did not see the ambassador.toml to edit.

    opened by Tromas06 2
  • Incompatibility with mod

    Incompatibility with mod "Silent Gear"

    When on a Forge server running under Velocity via Ambassador, the mod "Silent Gear" does not work properly. (Silent Gear is a mod that introduces "modular" tools and equipment, a la Tinker's Construct.)

    Proxy:

    • Velocity: 3.1.2-SNAPSHOT-179
    • Ambassador: 0.5.1

    Client / Backend:

    • Minecraft: 1.18.2
    • Forge: 40.1.80
    • Ambassador-Forge: 1.18.2-0.2.1
    • Silent Gear: 2.10.14
    • (Caelus API: 1.18.1-3.0.0.2)
    • (Curios API: 1.18.2-5.0.7.1)
    • (Silent Lib: 6.2.0)

    When crafting a Silent Gear tool through any means, an "invalid item" is produced rather than the expected tool.

    image

    Expected: image

    Despite being a red X, the tool seems to function normally otherwise.

    Here's some information I've gathered regarding when this bug is encountered:

    • Connecting to the backend server directly (w/o Ambassador) works fine.
    • Connecting to the backend server directly, logging out, restarting the backend server with Ambassador-Forge installed, then connecting to the backend server via Velocity + Ambassador works fine as well.
    • After a game restart, connecting to the backend server via Velocity first does not work.
    • Afterwards, restarting the backend server without Ambassador and connecting to it directly (without a game restart in between) does not work.

    Note that tools created as "X"s later appear correctly when directly connecting to the backend server first, and tools created as normal appear as "X"s when connecting via Velocity first. So I assume the item data remains the same between relogs with or without restarting the game.

    Also note that, rather than making a direct connection to the backend server before connecting via Velocity, you can instead simply load a singleplayer world. This has the same effect, regarding making Silent Gear tools look correct.

    If I recall correctly, connecting to the server via Velocity first (to trigger the issue) will not affect the look of the tools in a singleplayer world loaded afterward, in the same gameplay session (i.e. without restarting the game). That is to say, Silent Gear will work fine in singleplayer, even after connecting to the backend via Velocity (which would otherwise break Silent Gear). Also IIRC, after leaving singleplayer as above and connecting to the backend via Velocity a second time (in one session), the mod will continue to work fine. (I say the above ambiguously, as I last tested singleplayer in the context of this issue with a modpack (All the Mods 7), which had a tendency to crash when switching from multiplayer to singleplayer.)

    Let me know if I need to clarify anything, as I've come to realize that this issue is rather difficult to explain in text. Maybe I should make a diagram of some sort...

    bug 
    opened by unilock 1
  • cannot mix modded and unmodded servers on proxy

    cannot mix modded and unmodded servers on proxy

    not sure if this is intentional but i run a network with a vanilla server and a modded server but cannot connect to the vanilla one while using this plugin on my backend. is this intentional behaviour?

    opened by OfficiallySp 1
Releases(v1.1.6-alpha)
Owner
Adrian Bergqvist
Adrian Bergqvist
UniFi Proxy makes it possible to integrate third-party hardware into UniFi Protect

UniFi Proxy UniFi Proxy makes it possible to integrate third-party hardware into UniFi Protect. For testing purposes only, it is recommended to purcha

Jan Heil 8 Dec 27, 2022
Winfoom is an HTTP(s) proxy server facade that allows applications to authenticate through the proxy without having to deal with the actual handshake.

winfoom Basic Proxy Facade for NTLM, Kerberos, SOCKS and Proxy Auto Config file proxies To help this project please give it a star ⭐ Overview Winfoom

Eugen Covaci 56 Dec 8, 2022
LimboAuth - Minecraft Auth System for Velocity proxy built in virtual server (Limbo).

LimboAuth Auth System built in virtual server (Limbo). MC-Market SpigotMC.org Описание и обсуждение на русском языке (spigotmc.ru) Описание и обсужден

Elytrium 89 Jan 4, 2023
Library that makes it possible to read, edit and write CSV files

AdaptiveTableLayout Welcome the new CSV Library AdaptiveTableLayout for Android by Cleveroad Pay your attention to our new library that makes it possi

Cleveroad 1.9k Jan 6, 2023
Make the Velocity proxy run commands based on backend input.

Command Sync Server This plugin allows the Velocity proxy to run commands based on backend input. Purpose The purpose of this is to allow easy access

Wind Development 3 May 23, 2022
A generic proxy server for applying access-control policies for a FHIR-store.

FHIR Access Proxy This is a simple access-control proxy that sits in front of a FHIR store (e.g., a HAPI FHIR server, GCP FHIR store, etc.) and contro

Google 17 Jan 5, 2023
Protect your Spigot server against IP forwarding exploits, as well as blocking unknown BungeeCord and/or Velocity proxies.

Sentey Protect your Spigot server against IP forwarding exploits, as well as blocking unknown BungeeCord and/or Velocity proxies. But firewalls are a

ComuGamers Network 18 Dec 28, 2022
The shortest possible maven template / quickstarter for Java 16

The shortest possible Java 16 maven quickstarter The shortest possible Apache Maven template for Java 16 usage git clone https://github.com/AdamBien/j

Adam Bien 6 Nov 8, 2021
A singular file to protect as many Minecraft servers and clients as possible from the Log4j exploit (CVE-2021-44228).

MC-Log4J-Patcher The goal of this project is to provide Minecraft players, and server owners, peace of mind in regards to the recently discovered Log4

Koupa Taylor 4 Jan 4, 2022
Harvest your animals in the most cursed way possible.

Reaping Harvest your animals in the most cursed way possible. By using the Reaper you can harvest food from animals as if you had killed them, but wit

Jam Core 4 Oct 23, 2022
Plugin for Spigot, PaperMC, BungeeCord and Velocity to create custom MOTDs, playercount message and playercount hover with priorities and conditions.

AdvancedServerList AdvancedServerList is a server and proxy plugin that allows you to create custom MOTDs and more in your server list with priority a

Andre_601 19 Dec 14, 2022
A MOTD plugin for Velocity that caches network packets. This helps it be the fastest one of the MOTD plugins.

FastMOTD A MOTD plugin for Velocity that catches network packets. This helps it be the fastest one of the MOTD plugins. Test server: ely.su Features F

Elytrium 19 Dec 24, 2022
InterfaceMaker is a modern plugin to handle and customize join items, hotbars and menus with a developer and administrator friendly API.

Interface Maker InterfaceMaker is a modern plugin to handle and customize join items, hotbars and menus with a developer friendly API. Features Simple

2LStudios - Minecraft 10 Nov 27, 2022
💡极致性能的企业级Java服务器框架,RPC,游戏服务器框架,web应用服务器框架。(Extreme fast enterprise Java server framework, can be RPC, game server framework, web server framework.)

?? 为性能而生的万能服务器框架 ?? Ⅰ. zfoo简介 ?? 性能炸裂,天生异步,Actor设计思想,无锁化设计,基于Spring的MVC式用法的万能RPC框架 极致序列化,原生集成的目前二进制序列化和反序列化速度最快的 zfoo protocol 作为网络通讯协议 高可拓展性,单台服务器部署,

null 1k Jan 1, 2023
Generate a dynamic PAC script that will route traffic to your Burp proxy only if it matches the scope defined in your Burp target.

Burp PAC Server This Burp Extension generates a dynamic Proxy Auto-Configuration (PAC) script that will route traffic to your Burp proxy only if it ma

null 30 Jun 13, 2022
a proxy for http & https ,write by java,no dependences for other tech

申明 本项目只是作者记录和分享Java网络编程学习心得,请勿用于非法用途,否则后果自负! 原理介绍博客: https://blog.csdn.net/wang382758656/article/details/123098032 https://juejin.cn/post/706921880022

Sand 58 May 3, 2022
🚀 A Motd Virtualization with Minecraft Proxy.

ProxyVirtualMotd プレイヤー別に 仮想 Motd を表示するプラグインです For Minecraft Proxy (BungeeCord / Waterfall) Plugin Waterfall 1.18 v483 動作確認済み Features 実装済みの機能です (今後、新機

takagi-minecraft-lab 3 Sep 21, 2022
Kafdrop configured for Openshift, with OAuth proxy

Deploying Kafdrop to Openshift This repo takes the original Kafdrop and extends it to deploy it on Openshift. Integration with Kafka Clusters managed

Justin Davis 2 Jul 17, 2022
Simple Minecraft mod that makes it easy to put horses in boats.

HorseInBoat What does this mod do? This mod makes it much easier to put horses into boats. This mod also changes the hitbox of horses in boats, this i

null 8 Dec 20, 2022