FilterAPI 1.0.2
dotnet add package FilterAPI --version 1.0.2
NuGet\Install-Package FilterAPI -Version 1.0.2
<PackageReference Include="FilterAPI" Version="1.0.2" />
<PackageVersion Include="FilterAPI" Version="1.0.2" />
<PackageReference Include="FilterAPI" />
paket add FilterAPI --version 1.0.2
#r "nuget: FilterAPI, 1.0.2"
#:package FilterAPI@1.0.2
#addin nuget:?package=FilterAPI&version=1.0.2
#tool nuget:?package=FilterAPI&version=1.0.2
FilterAPI
FilterAPI brings the official AMCI (All-client Mod Client Identification) protocol introduced in Among Us 18.0 to BepInEx mods: modded lobbies get a real identity, modded hosting, and mod-filtered lobby search — with a single attribute and a single button.
Features
- Mod registration — register your mod with the official AMCI protocol by adding one attribute to your plugin class (
[AmciModGuid]). - "Mod" button — a dedicated button in the create-game screen (cloned from the vanilla mode buttons) toggles modded lobby filtering on and off.
- Modded hosting — while enabled, hosting uses the
HostModdedGametag (25) with your mod GUID appended, so the server can identify the lobby as modded. - Mod-filtered search — while enabled, the lobby search carries a
modfilter, so only lobbies running the same mod GUID are shown. - Zero vanilla-client pollution — vanilla clients never see modded lobbies in the public list (they are excluded from the normal matchmaking pool), and modded clients with the filter off behave exactly like vanilla clients.
Requirements
- Among Us 18.0 or newer (the AMCI client integration only exists in 18.0+)
- BepInEx 6 (IL2CPP), e.g.
BepInEx.Unity.IL2CPP 6.0.0-be.735 - A server that implements AMCI:
- the official Innersloth servers, or
- a custom server such as Impostor with AMCI support (HostModdedGame handling +
modfilter matching + modded-lobby exclusion from the normal list)
Installation (players)
- Drop
FilterAPI.dllintoBepInEx/plugins/. - Install at least one mod that registers an AMCI GUID (i.e. a mod built against FilterAPI with the
[AmciModGuid]attribute, e.g.FilterAPI.Example). Without it there is nothing to register and the button does nothing.
Usage (mod authors)
- Reference this project or the
FilterAPINuGet package. - Add the attribute to your plugin class:
using FilterAPI.Attributes;
[BepInPlugin("com.example.mymod", "My Mod", "1.0.0")]
[AmciModGuid("5b9e6f2a-1c4d-4a7e-9f3b-8d2c6e0a4f1d")] // your own self-assigned v4 GUID
public class MyModPlugin : BasePlugin
{
}
Get a GUID from any UUID generator, e.g. https://www.uuidgenerator.net/.
- (Optional) Reference
FilterAPI.Networking.AmciModsfrom your mod to query the registered GUIDs:
AmciMods.Primary // Guid? — the primary registered AMCI GUID
AmciMods.Registered // IReadOnlyDictionary<string, Guid> — all registered mod ids → GUIDs
AmciMods.IsEnabled // bool — whether modded filtering is currently active
Behavior
| Client state | Hosting | Lobby search |
|---|---|---|
| Mod button on | HostModdedGame tag + mod GUID → lobby is modded |
Only lobbies with the same mod GUID (modded lobbies of other mods and vanilla lobbies are hidden) |
| Mod button off | normal HostGame → vanilla lobby |
Only vanilla lobbies (modded lobbies are excluded, same as a vanilla client) |
| Vanilla client (no FilterAPI) | — | Never sees modded lobbies |
Note: the "off" state intentionally mirrors the vanilla client — modded lobbies are only visible through a
modfilter, matching the official AMCI design ("modded games are excluded from the normal matchmaking pool").
Configuration
BepInEx/config/ume.filter.api.cfg:
| Key | Default | Description |
|---|---|---|
AMCI.Enable |
true |
Whether the AMCI mod GUID is registered with the matchmaker (hosting + search). Equivalent to the in-game "Mod" button. |
How it works
- FilterAPI scans all loaded BepInEx plugins for the
[AmciModGuid]attribute and collects their GUIDs (AmciMods). AmciMods.Apply()writes the primary GUID into the vanillaCurrentModRegistration.ModRegistrationGuidString.- The vanilla 18.0 client does the rest:
InnerNetClient.HostGamechecksCurrentModRegistration.TryGetModRegistrationGuid()and switches to theHostModdedGametag (25) with the 16-byte GUID appended.HttpMatchmakerManager.CoRequestGameListFilteredcallsUpdateFilterSetWithModRegistrationSettings, which adds amodfilter to every matchmaking request.
- The server marks the lobby as modded, excludes it from the normal pool, and only returns it to searches carrying the matching
modfilter.
Server side (Impostor)
The server must support:
- the
HostModdedGamemessage (tag 25) with the trailing 16-byte mod GUID (marks the lobby as modded), - the
"mod"matchmaking filter (ModFilterwithAcceptedValues), - excluding modded lobbies from unfiltered searches.
Building
dotnet build FilterAPI/FilterAPI.csproj -c Release
dotnet pack FilterAPI/FilterAPI.csproj -c Release # produces the NuGet package
The project references AmongUs.GameLibs.Steam and BepInEx from the BepInEx NuGet feed (https://nuget.bepinex.dev/v3/index.json) — see nuget.config if restore fails.
Example
FilterAPI.Example is a minimal plugin that registers a sample AMCI GUID. Install it alongside FilterAPI to test the flow end to end (host a lobby with the Mod button on, then search for it from a second client with the Mod button on).
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net6.0 is compatible. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net6.0
- No dependencies.
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.