diff --git a/Reactor/Patches/ServerInfoFixes.cs b/Reactor/Patches/ServerInfoFixes.cs
new file mode 100644
index 0000000..b23880e
--- /dev/null
+++ b/Reactor/Patches/ServerInfoFixes.cs
@@ -0,0 +1,84 @@
+using System;
+using System.Linq;
+using System.Net;
+using System.Net.Sockets;
+using HarmonyLib;
+using InnerNet;
+
+namespace Reactor.Patches
+{
+ ///
+ /// Fixes hardcoded ports
+ ///
+ [HarmonyPatch(typeof(InnerNetClient), nameof(InnerNetClient.SetEndpoint))]
+ public static class SetEndpointPatch
+ {
+ public static void Prefix(InnerNetClient __instance, ref string addr, ref ushort port)
+ {
+ var serverManager = ServerManager.Instance;
+ if (addr == serverManager.OnlineNetAddress && __instance.GameMode == GameModes.OnlineGame && port != serverManager.OnlineNetPort)
+ {
+ Logger.Info($"Set endpoint to {addr}:{port}");
+ Logger.Info($"Correcting port to {serverManager.OnlineNetPort}");
+ port = serverManager.OnlineNetPort;
+ }
+ }
+ }
+
+ [HarmonyPatch(typeof(InnerNetClient), nameof(InnerNetClient.Connect))]
+ public static class ConnectPatch
+ {
+ public static void Prefix(InnerNetClient __instance)
+ {
+ Logger.Info($"Joining {__instance.networkAddress}:{__instance.networkPort}");
+ }
+ }
+
+ ///
+ /// Fixes hardcoded port and filters out IPv6 in DnsRegionInfo
+ ///
+ [HarmonyPatch(typeof(DnsRegionInfo), nameof(DnsRegionInfo.PopulateServers))]
+ public static class PopulateServersPatch
+ {
+ public static bool Prefix(DnsRegionInfo __instance)
+ {
+ try
+ {
+ var i = 0;
+ var servers = Dns.GetHostAddresses(__instance.Fqdn)
+ .Distinct()
+ .Where(ipAddress => ipAddress.AddressFamily == AddressFamily.InterNetwork)
+ .Select(ipAddress => new ServerInfo($"{__instance.Name}-{i++}", ipAddress.ToString(), __instance.Port))
+ .ToArray();
+
+ __instance.cachedServers = servers;
+ Logger.Info($"Populated {__instance.Name} ({__instance.Fqdn}:{__instance.Port}) with {servers.Length} server(s) {{{servers.Join()}}}");
+ }
+ catch (Exception e)
+ {
+ Logger.Info($"Failed to populate {__instance.Name}: {e}");
+ __instance.cachedServers = new[]
+ {
+ new ServerInfo(__instance.Name ?? string.Empty, __instance.DefaultIp, __instance.Port),
+ };
+ }
+
+ return false;
+ }
+ }
+
+ ///
+ /// De-inlines AmongUsClient#SetEndpoint from JoinGameButton
+ ///
+ [HarmonyPatch(typeof(JoinGameButton), nameof(JoinGameButton.OnClick))]
+ public static class JoinGameButtonPatch
+ {
+ public static void Postfix(JoinGameButton __instance)
+ {
+ if (__instance.GameMode == GameModes.OnlineGame)
+ {
+ AmongUsClient.Instance.SetEndpoint(DestroyableSingleton.Instance.OnlineNetAddress, DestroyableSingleton.Instance.OnlineNetPort);
+ }
+ }
+ }
+}