From 666bf76f896b427a98a9c51d353c05ab7d045452 Mon Sep 17 00:00:00 2001
From: D1GQ
Date: Fri, 9 Jan 2026 00:21:34 -0600
Subject: [PATCH 1/8] move to src
---
.gitignore | 15 +-
BetterAmongUs.csproj | 31 --
BetterAmongUs.sln | 25 --
BAUPlugin.cs => src/BAUPlugin.cs | 0
.../Commands}/AllCommandsCommand.cs | 0
.../Commands}/Arguments/BaseArgument.cs | 0
.../Commands}/Arguments/BoolArgument.cs | 0
.../Commands}/Arguments/PlayerArgument.cs | 0
.../Commands}/Arguments/StringArgument.cs | 0
{Commands => src/Commands}/BaseCommand.cs | 0
{Commands => src/Commands}/DumpCommand.cs | 0
{Commands => src/Commands}/EndGameCommand.cs | 0
{Commands => src/Commands}/ExileCommand.cs | 0
{Commands => src/Commands}/HelpCommand.cs | 0
{Commands => src/Commands}/KickCommand.cs | 0
{Commands => src/Commands}/MeCommand.cs | 0
.../Commands}/PlayerInfoCommand.cs | 0
.../Commands}/PlayersInfoCommand.cs | 0
.../Commands}/RemoveAllCommand.cs | 0
.../Commands}/RemovePlayerCommand.cs | 0
{Commands => src/Commands}/ReviveCommand.cs | 0
{Commands => src/Commands}/RoleCommand.cs | 0
.../Commands}/SetPrefixCommand.cs | 0
{Commands => src/Commands}/SetRoleCommand.cs | 0
{Commands => src/Commands}/SuicideCommand.cs | 0
{Commands => src/Commands}/TestCommand.cs | 0
{Data => src/Data}/BetterDataManager.cs | 0
{Data => src/Data}/Json/AbstractJsonFile.cs | 0
{Data => src/Data}/Json/BetterDataFile.cs | 0
.../Data}/Json/BetterGameSettingsFile.cs | 0
{Data => src/Data}/Json/OutfitData.cs | 0
.../Data}/Replay/Events/AppearReplayEvent.cs | 0
.../Data}/Replay/Events/IReplayEvent.cs | 0
.../Data}/Replay/Events/MurderReplayEvent.cs | 0
.../Data}/Replay/Events/ProtectReplayEvent.cs | 0
.../Replay/Events/ProtectedReplayEvent.cs | 0
.../Replay/Events/ShapeshiftReplayEvent.cs | 0
.../Replay/Events/StartMeetingReplayEvent.cs | 0
.../Replay/Events/UpdateSystemReplayEvent.cs | 0
.../Data}/Replay/Events/VanishReplayEvent.cs | 0
.../Data}/Replay/Events/VentReplayEvent.cs | 0
{Data => src/Data}/Replay/PlayerReplayData.cs | 0
{Data => src/Data}/Replay/Replay.cs | 0
.../Data}/Replay/ReplayEventConverter.cs | 0
{Data => src/Data}/SharedSecretExchange.cs | 0
{Helpers => src/Helpers}/CastHelper.cs | 0
{Helpers => src/Helpers}/Colors.cs | 0
{Helpers => src/Helpers}/Debugger.cs | 0
{Helpers => src/Helpers}/EnumHelper.cs | 0
{Helpers => src/Helpers}/GamePrefabHelper.cs | 0
{Helpers => src/Helpers}/IEnumerableHelper.cs | 0
{Helpers => src/Helpers}/Il2CppExtensions.cs | 0
.../Helpers}/InnerNetClientHelper.cs | 0
{Helpers => src/Helpers}/LateTask.cs | 0
{Helpers => src/Helpers}/ObjectHelper.cs | 0
.../Helpers}/PlayerControlHelper.cs | 0
{Helpers => src/Helpers}/RoleHelper.cs | 0
{Helpers => src/Helpers}/ShuffleHelper.cs | 0
{Helpers => src/Helpers}/Utils.cs | 0
.../Attributes/StaticClassesAttribute.cs | 0
{Items => src/Items}/Enums/NameSyncType.cs | 0
{Items => src/Items}/Enums/NewsTypes.cs | 0
{Items => src/Items}/ModNews.cs | 0
.../NoneOption/OptionDividerItem.cs | 0
.../NoneOption/OptionHeaderItem.cs | 0
.../OptionItems/NoneOption/OptionTitleItem.cs | 0
.../Items}/OptionItems/OptionCheckboxItem.cs | 0
.../Items}/OptionItems/OptionFloatItem.cs | 0
.../Items}/OptionItems/OptionIntItem.cs | 0
.../Items}/OptionItems/OptionItem.cs | 0
.../Items}/OptionItems/OptionPercentItem.cs | 0
.../Items}/OptionItems/OptionPlayerItem.cs | 0
.../Items}/OptionItems/OptionStringItem.cs | 0
{Items => src/Items}/OptionItems/OptionTab.cs | 0
{Items => src/Items}/Structs/RPCData.cs | 0
{Items => src/Items}/Structs/UserInfo.cs | 0
.../Managers}/BetterNotificationManager.cs | 0
.../Managers}/CustomLoadingBarManager.cs | 0
{Managers => src/Managers}/HostManager.cs | 0
{Managers => src/Managers}/NetworkManager.cs | 0
.../Managers}/PrivateOnlyLobbyManager.cs | 0
{Managers => src/Managers}/UpdateManager.cs | 0
ModInfo.cs => src/ModInfo.cs | 0
.../Modules}/AntiCheat/BetterAntiCheat.cs | 0
.../Modules}/AntiCheat/RPCHandler.cs | 0
.../AntiCheat/RPCHandlers/AUMChatHandler.cs | 0
.../AntiCheat/RPCHandlers/AUMHandler.cs | 0
.../AntiCheat/RPCHandlers/AddVoteHandler.cs | 0
.../RPCHandlers/BootFromVentHandler.cs | 0
.../AntiCheat/RPCHandlers/CancelPetHandler.cs | 0
.../AntiCheat/RPCHandlers/CastVoteHandler.cs | 0
.../RPCHandlers/CheckAppearHandler.cs | 0
.../RPCHandlers/CheckColorHandler.cs | 0
.../RPCHandlers/CheckMurderHandler.cs | 0
.../AntiCheat/RPCHandlers/CheckNameHandler.cs | 0
.../RPCHandlers/CheckProtectHandler.cs | 0
.../RPCHandlers/CheckShapeshiftHandler.cs | 0
.../RPCHandlers/CheckSporeHandler.cs | 0
.../RPCHandlers/CheckVanishHandler.cs | 0
.../RPCHandlers/CheckZiplineHandler.cs | 0
.../AntiCheat/RPCHandlers/ClearVoteHandler.cs | 0
.../RPCHandlers/ClimbLadderHandler.cs | 0
.../RPCHandlers/CloseDoorsOfTypeHandler.cs | 0
.../RPCHandlers/CloseMeetingHandler.cs | 0
.../RPCHandlers/CompleteTaskHandler.cs | 0
.../AntiCheat/RPCHandlers/EnterVentHandler.cs | 0
.../AntiCheat/RPCHandlers/ExiledHandler.cs | 0
.../AntiCheat/RPCHandlers/ExitVentHandler.cs | 0
.../RPCHandlers/ExtendLobbyTimerHandler.cs | 0
.../RPCHandlers/KillNetworkChatHandler.cs | 0
.../RPCHandlers/KillNetworkHandler.cs | 0
.../RPCHandlers/LobbyTimeExpiringHandler.cs | 0
.../RPCHandlers/MurderPlayerHandler.cs | 0
.../DeserializeNetObjectHandler.cs | 0
.../DespawnNetObjectHandler.cs | 0
.../AntiCheat/RPCHandlers/PetHandler.cs | 0
.../RPCHandlers/PlayAnimationHandler.cs | 0
.../RPCHandlers/ProtectPlayerHandler.cs | 0
.../RPCHandlers/RejectShapeshiftHandler.cs | 0
.../RPCHandlers/ReportDeadBodyHandler.cs | 0
.../AntiCheat/RPCHandlers/SendChatHandler.cs | 0
.../RPCHandlers/SendChatNoteHandler.cs | 0
.../RPCHandlers/SendQuickChatHandler.cs | 0
.../AntiCheat/RPCHandlers/SetColorHandler.cs | 0
.../AntiCheat/RPCHandlers/SetHatHandler.cs | 0
.../AntiCheat/RPCHandlers/SetHatStrHandler.cs | 0
.../RPCHandlers/SetInfectedHandler.cs | 0
.../AntiCheat/RPCHandlers/SetLevelHandler.cs | 0
.../AntiCheat/RPCHandlers/SetNameHandler.cs | 0
.../RPCHandlers/SetNamePlateHandler.cs | 0
.../RPCHandlers/SetNamePlateStrHandler.cs | 0
.../AntiCheat/RPCHandlers/SetPetHandler.cs | 0
.../AntiCheat/RPCHandlers/SetPetStrHandler.cs | 0
.../AntiCheat/RPCHandlers/SetRoleHandler.cs | 0
.../RPCHandlers/SetScannerHandler.cs | 0
.../AntiCheat/RPCHandlers/SetSkinHandler.cs | 0
.../RPCHandlers/SetSkinStrHandler.cs | 0
.../RPCHandlers/SetStartCounterHandler.cs | 0
.../AntiCheat/RPCHandlers/SetTasksHandler.cs | 0
.../AntiCheat/RPCHandlers/SetVisorHandler.cs | 0
.../RPCHandlers/SetVisorStrHandler.cs | 0
.../RPCHandlers/ShapeshiftHandler.cs | 0
.../AntiCheat/RPCHandlers/SickoHandler.cs | 0
.../AntiCheat/RPCHandlers/SnapToHandler.cs | 0
.../RPCHandlers/StartAppearHandler.cs | 0
.../RPCHandlers/StartMeetingHandler.cs | 0
.../RPCHandlers/StartVanishHandler.cs | 0
.../RPCHandlers/SyncSettingsHandler.cs | 0
.../RPCHandlers/TriggerSporesHandler.cs | 0
.../RPCHandlers/UpdateSystemHandler.cs | 0
.../RPCHandlers/UsePlatformHandler.cs | 0
.../RPCHandlers/UseZiplineHandler.cs | 0
.../RPCHandlers/VotingCompleteHandler.cs | 0
{Modules => src/Modules}/ClientOptionItem.cs | 98 +++---
{Modules => src/Modules}/Encryptor.cs | 78 ++---
{Modules => src/Modules}/FileChecker.cs | 322 +++++++++---------
{Modules => src/Modules}/GameState.cs | 140 ++++----
{Modules => src/Modules}/HandshakeHandler.cs | 0
{Modules => src/Modules}/MonoExtension.cs | 0
{Modules => src/Modules}/TextFileHandler.cs | 0
{Modules => src/Modules}/Translator.cs | 0
{Mono => src/Mono}/BetterPingTracker.cs | 0
{Mono => src/Mono}/ExtendedPlayerControl.cs | 0
{Mono => src/Mono}/ExtendedPlayerInfo.cs | 0
{Mono => src/Mono}/MeetingInfoDisplay.cs | 0
{Mono => src/Mono}/PlayerInfoDisplay.cs | 0
.../Network}/Configs/BannedUserData.cs | 0
{Network => src/Network}/Configs/NewsData.cs | 0
.../Network}/Configs/UpdateData.cs | 0
{Network => src/Network}/Configs/UserData.cs | 0
{Network => src/Network}/GitHubFile.cs | 0
{Network => src/Network}/GitPath.cs | 0
{Network => src/Network}/GithubAPI.cs | 0
.../Network}/Loaders/NewsLoader.cs | 0
.../Network}/Loaders/UpdateLoader.cs | 0
{Network => src/Network}/RPC.cs | 0
.../Patches}/Client/AnnouncementPanelPatch.cs | 0
.../Patches}/Client/ClientOptionsPatch.cs | 0
.../Patches}/Client/ClientPatch.cs | 0
.../Patches}/Client/DisconnectPenaltyPatch.cs | 0
.../Patches}/Client/DiscordPatch.cs | 0
{Patches => src/Patches}/Client/HttpPatch.cs | 0
.../Patches}/Client/MainMenuPatch.cs | 0
.../Patches}/Client/PrivateLobbyPatch.cs | 0
.../Patches}/Client/SplashIntroPatch.cs | 0
.../Patches}/Client/StandaloneSteamPatch.cs | 0
.../Patches}/Client/VersionShowerPatch.cs | 0
.../Patches}/Gameplay/GameManagersPatch.cs | 0
.../Patches}/Gameplay/LobbyPatch.cs | 0
.../Gameplay/Player/CosmeticsLayerPatch.cs | 0
.../Gameplay/Player/PlayerControlPatch.cs | 0
.../Gameplay/Player/PlayerJoinAndLeftPatch.cs | 0
.../Patches}/Gameplay/RolePatch.cs | 0
.../Gameplay/Systems/VoteBanSystemPatch.cs | 0
.../Gameplay/UI/Chat/ChatCommandsPatch.cs | 0
.../Gameplay/UI/Chat/ChatNotificationPatch.cs | 0
.../Patches}/Gameplay/UI/Chat/ChatPatch.cs | 0
.../Gameplay/UI/Chat/QuickChatPatch.cs | 0
.../Gameplay/UI/IntroCutscenePatch.cs | 0
.../Patches}/Gameplay/UI/KillOverlayPatch.cs | 0
.../Patches}/Gameplay/UI/MeetingHudPatch.cs | 0
.../Gameplay/UI/MiniMapBehaviourPatch.cs | 0
.../Patches}/Gameplay/UI/PingTrackerPatch.cs | 0
.../Patches}/Gameplay/UI/PlayerTabPatch.cs | 0
.../Patches}/Gameplay/UI/RegionMenuPatch.cs | 0
.../Gameplay/UI/ReportReasonScreenPatch.cs | 0
.../Patches}/Gameplay/UI/RoomTrackerPatch.cs | 0
.../Gameplay/UI/ServerDropdownPatch.cs | 0
.../UI/Settings/GameSettingMenuPatch.cs | 0
.../Gameplay/UI/Settings/NumberOptionPatch.cs | 0
.../Patches}/Gameplay/ZoomPatch.cs | 0
.../FindAGameManagerPatch.cs | 0
.../FindGameMoreInfoPopupPatch.cs | 0
.../Patches}/Managers/HudManagerPatch.cs | 0
.../Managers/LoadingBarManagerPatch.cs | 0
.../Patches}/Managers/ModManagerPatch.cs | 0
.../Patches}/Managers/RoleManagerPatch.cs | 0
.../Resources}/Images/BetterAmongUs-Icon.png | Bin
.../Resources}/Images/BetterAmongUs-Logo.png | Bin
.../Resources}/Images/BetterAmongUs-Mod.png | Bin
.../Resources}/Images/QuestionMark.png | Bin
{Resources => src/Resources}/Lang/de_DE.json | 0
{Resources => src/Resources}/Lang/en_US.json | 0
{Resources => src/Resources}/Lang/es_419.json | 0
{Resources => src/Resources}/Lang/es_ES.json | 0
{Resources => src/Resources}/Lang/fil_PH.json | 0
{Resources => src/Resources}/Lang/fr_FR.json | 0
{Resources => src/Resources}/Lang/ga_IE.json | 0
{Resources => src/Resources}/Lang/it_IT.json | 0
{Resources => src/Resources}/Lang/ja_JP.json | 0
{Resources => src/Resources}/Lang/ko_KR.json | 0
{Resources => src/Resources}/Lang/nl_NL.json | 0
{Resources => src/Resources}/Lang/pt_BR.json | 0
{Resources => src/Resources}/Lang/pt_PT.json | 0
{Resources => src/Resources}/Lang/ru_RU.json | 0
{Resources => src/Resources}/Lang/zh_CN.json | 0
{Resources => src/Resources}/Lang/zh_TW.json | 0
{Resources => src/Resources}/NewsTest | 0
src/build/mod_folder_path | 1 +
239 files changed, 327 insertions(+), 383 deletions(-)
delete mode 100644 BetterAmongUs.csproj
delete mode 100644 BetterAmongUs.sln
rename BAUPlugin.cs => src/BAUPlugin.cs (100%)
rename {Commands => src/Commands}/AllCommandsCommand.cs (100%)
rename {Commands => src/Commands}/Arguments/BaseArgument.cs (100%)
rename {Commands => src/Commands}/Arguments/BoolArgument.cs (100%)
rename {Commands => src/Commands}/Arguments/PlayerArgument.cs (100%)
rename {Commands => src/Commands}/Arguments/StringArgument.cs (100%)
rename {Commands => src/Commands}/BaseCommand.cs (100%)
rename {Commands => src/Commands}/DumpCommand.cs (100%)
rename {Commands => src/Commands}/EndGameCommand.cs (100%)
rename {Commands => src/Commands}/ExileCommand.cs (100%)
rename {Commands => src/Commands}/HelpCommand.cs (100%)
rename {Commands => src/Commands}/KickCommand.cs (100%)
rename {Commands => src/Commands}/MeCommand.cs (100%)
rename {Commands => src/Commands}/PlayerInfoCommand.cs (100%)
rename {Commands => src/Commands}/PlayersInfoCommand.cs (100%)
rename {Commands => src/Commands}/RemoveAllCommand.cs (100%)
rename {Commands => src/Commands}/RemovePlayerCommand.cs (100%)
rename {Commands => src/Commands}/ReviveCommand.cs (100%)
rename {Commands => src/Commands}/RoleCommand.cs (100%)
rename {Commands => src/Commands}/SetPrefixCommand.cs (100%)
rename {Commands => src/Commands}/SetRoleCommand.cs (100%)
rename {Commands => src/Commands}/SuicideCommand.cs (100%)
rename {Commands => src/Commands}/TestCommand.cs (100%)
rename {Data => src/Data}/BetterDataManager.cs (100%)
rename {Data => src/Data}/Json/AbstractJsonFile.cs (100%)
rename {Data => src/Data}/Json/BetterDataFile.cs (100%)
rename {Data => src/Data}/Json/BetterGameSettingsFile.cs (100%)
rename {Data => src/Data}/Json/OutfitData.cs (100%)
rename {Data => src/Data}/Replay/Events/AppearReplayEvent.cs (100%)
rename {Data => src/Data}/Replay/Events/IReplayEvent.cs (100%)
rename {Data => src/Data}/Replay/Events/MurderReplayEvent.cs (100%)
rename {Data => src/Data}/Replay/Events/ProtectReplayEvent.cs (100%)
rename {Data => src/Data}/Replay/Events/ProtectedReplayEvent.cs (100%)
rename {Data => src/Data}/Replay/Events/ShapeshiftReplayEvent.cs (100%)
rename {Data => src/Data}/Replay/Events/StartMeetingReplayEvent.cs (100%)
rename {Data => src/Data}/Replay/Events/UpdateSystemReplayEvent.cs (100%)
rename {Data => src/Data}/Replay/Events/VanishReplayEvent.cs (100%)
rename {Data => src/Data}/Replay/Events/VentReplayEvent.cs (100%)
rename {Data => src/Data}/Replay/PlayerReplayData.cs (100%)
rename {Data => src/Data}/Replay/Replay.cs (100%)
rename {Data => src/Data}/Replay/ReplayEventConverter.cs (100%)
rename {Data => src/Data}/SharedSecretExchange.cs (100%)
rename {Helpers => src/Helpers}/CastHelper.cs (100%)
rename {Helpers => src/Helpers}/Colors.cs (100%)
rename {Helpers => src/Helpers}/Debugger.cs (100%)
rename {Helpers => src/Helpers}/EnumHelper.cs (100%)
rename {Helpers => src/Helpers}/GamePrefabHelper.cs (100%)
rename {Helpers => src/Helpers}/IEnumerableHelper.cs (100%)
rename {Helpers => src/Helpers}/Il2CppExtensions.cs (100%)
rename {Helpers => src/Helpers}/InnerNetClientHelper.cs (100%)
rename {Helpers => src/Helpers}/LateTask.cs (100%)
rename {Helpers => src/Helpers}/ObjectHelper.cs (100%)
rename {Helpers => src/Helpers}/PlayerControlHelper.cs (100%)
rename {Helpers => src/Helpers}/RoleHelper.cs (100%)
rename {Helpers => src/Helpers}/ShuffleHelper.cs (100%)
rename {Helpers => src/Helpers}/Utils.cs (100%)
rename {Items => src/Items}/Attributes/StaticClassesAttribute.cs (100%)
rename {Items => src/Items}/Enums/NameSyncType.cs (100%)
rename {Items => src/Items}/Enums/NewsTypes.cs (100%)
rename {Items => src/Items}/ModNews.cs (100%)
rename {Items => src/Items}/OptionItems/NoneOption/OptionDividerItem.cs (100%)
rename {Items => src/Items}/OptionItems/NoneOption/OptionHeaderItem.cs (100%)
rename {Items => src/Items}/OptionItems/NoneOption/OptionTitleItem.cs (100%)
rename {Items => src/Items}/OptionItems/OptionCheckboxItem.cs (100%)
rename {Items => src/Items}/OptionItems/OptionFloatItem.cs (100%)
rename {Items => src/Items}/OptionItems/OptionIntItem.cs (100%)
rename {Items => src/Items}/OptionItems/OptionItem.cs (100%)
rename {Items => src/Items}/OptionItems/OptionPercentItem.cs (100%)
rename {Items => src/Items}/OptionItems/OptionPlayerItem.cs (100%)
rename {Items => src/Items}/OptionItems/OptionStringItem.cs (100%)
rename {Items => src/Items}/OptionItems/OptionTab.cs (100%)
rename {Items => src/Items}/Structs/RPCData.cs (100%)
rename {Items => src/Items}/Structs/UserInfo.cs (100%)
rename {Managers => src/Managers}/BetterNotificationManager.cs (100%)
rename {Managers => src/Managers}/CustomLoadingBarManager.cs (100%)
rename {Managers => src/Managers}/HostManager.cs (100%)
rename {Managers => src/Managers}/NetworkManager.cs (100%)
rename {Managers => src/Managers}/PrivateOnlyLobbyManager.cs (100%)
rename {Managers => src/Managers}/UpdateManager.cs (100%)
rename ModInfo.cs => src/ModInfo.cs (100%)
rename {Modules => src/Modules}/AntiCheat/BetterAntiCheat.cs (100%)
rename {Modules => src/Modules}/AntiCheat/RPCHandler.cs (100%)
rename {Modules => src/Modules}/AntiCheat/RPCHandlers/AUMChatHandler.cs (100%)
rename {Modules => src/Modules}/AntiCheat/RPCHandlers/AUMHandler.cs (100%)
rename {Modules => src/Modules}/AntiCheat/RPCHandlers/AddVoteHandler.cs (100%)
rename {Modules => src/Modules}/AntiCheat/RPCHandlers/BootFromVentHandler.cs (100%)
rename {Modules => src/Modules}/AntiCheat/RPCHandlers/CancelPetHandler.cs (100%)
rename {Modules => src/Modules}/AntiCheat/RPCHandlers/CastVoteHandler.cs (100%)
rename {Modules => src/Modules}/AntiCheat/RPCHandlers/CheckAppearHandler.cs (100%)
rename {Modules => src/Modules}/AntiCheat/RPCHandlers/CheckColorHandler.cs (100%)
rename {Modules => src/Modules}/AntiCheat/RPCHandlers/CheckMurderHandler.cs (100%)
rename {Modules => src/Modules}/AntiCheat/RPCHandlers/CheckNameHandler.cs (100%)
rename {Modules => src/Modules}/AntiCheat/RPCHandlers/CheckProtectHandler.cs (100%)
rename {Modules => src/Modules}/AntiCheat/RPCHandlers/CheckShapeshiftHandler.cs (100%)
rename {Modules => src/Modules}/AntiCheat/RPCHandlers/CheckSporeHandler.cs (100%)
rename {Modules => src/Modules}/AntiCheat/RPCHandlers/CheckVanishHandler.cs (100%)
rename {Modules => src/Modules}/AntiCheat/RPCHandlers/CheckZiplineHandler.cs (100%)
rename {Modules => src/Modules}/AntiCheat/RPCHandlers/ClearVoteHandler.cs (100%)
rename {Modules => src/Modules}/AntiCheat/RPCHandlers/ClimbLadderHandler.cs (100%)
rename {Modules => src/Modules}/AntiCheat/RPCHandlers/CloseDoorsOfTypeHandler.cs (100%)
rename {Modules => src/Modules}/AntiCheat/RPCHandlers/CloseMeetingHandler.cs (100%)
rename {Modules => src/Modules}/AntiCheat/RPCHandlers/CompleteTaskHandler.cs (100%)
rename {Modules => src/Modules}/AntiCheat/RPCHandlers/EnterVentHandler.cs (100%)
rename {Modules => src/Modules}/AntiCheat/RPCHandlers/ExiledHandler.cs (100%)
rename {Modules => src/Modules}/AntiCheat/RPCHandlers/ExitVentHandler.cs (100%)
rename {Modules => src/Modules}/AntiCheat/RPCHandlers/ExtendLobbyTimerHandler.cs (100%)
rename {Modules => src/Modules}/AntiCheat/RPCHandlers/KillNetworkChatHandler.cs (100%)
rename {Modules => src/Modules}/AntiCheat/RPCHandlers/KillNetworkHandler.cs (100%)
rename {Modules => src/Modules}/AntiCheat/RPCHandlers/LobbyTimeExpiringHandler.cs (100%)
rename {Modules => src/Modules}/AntiCheat/RPCHandlers/MurderPlayerHandler.cs (100%)
rename {Modules => src/Modules}/AntiCheat/RPCHandlers/NetObjectHandlers/DeserializeNetObjectHandler.cs (100%)
rename {Modules => src/Modules}/AntiCheat/RPCHandlers/NetObjectHandlers/DespawnNetObjectHandler.cs (100%)
rename {Modules => src/Modules}/AntiCheat/RPCHandlers/PetHandler.cs (100%)
rename {Modules => src/Modules}/AntiCheat/RPCHandlers/PlayAnimationHandler.cs (100%)
rename {Modules => src/Modules}/AntiCheat/RPCHandlers/ProtectPlayerHandler.cs (100%)
rename {Modules => src/Modules}/AntiCheat/RPCHandlers/RejectShapeshiftHandler.cs (100%)
rename {Modules => src/Modules}/AntiCheat/RPCHandlers/ReportDeadBodyHandler.cs (100%)
rename {Modules => src/Modules}/AntiCheat/RPCHandlers/SendChatHandler.cs (100%)
rename {Modules => src/Modules}/AntiCheat/RPCHandlers/SendChatNoteHandler.cs (100%)
rename {Modules => src/Modules}/AntiCheat/RPCHandlers/SendQuickChatHandler.cs (100%)
rename {Modules => src/Modules}/AntiCheat/RPCHandlers/SetColorHandler.cs (100%)
rename {Modules => src/Modules}/AntiCheat/RPCHandlers/SetHatHandler.cs (100%)
rename {Modules => src/Modules}/AntiCheat/RPCHandlers/SetHatStrHandler.cs (100%)
rename {Modules => src/Modules}/AntiCheat/RPCHandlers/SetInfectedHandler.cs (100%)
rename {Modules => src/Modules}/AntiCheat/RPCHandlers/SetLevelHandler.cs (100%)
rename {Modules => src/Modules}/AntiCheat/RPCHandlers/SetNameHandler.cs (100%)
rename {Modules => src/Modules}/AntiCheat/RPCHandlers/SetNamePlateHandler.cs (100%)
rename {Modules => src/Modules}/AntiCheat/RPCHandlers/SetNamePlateStrHandler.cs (100%)
rename {Modules => src/Modules}/AntiCheat/RPCHandlers/SetPetHandler.cs (100%)
rename {Modules => src/Modules}/AntiCheat/RPCHandlers/SetPetStrHandler.cs (100%)
rename {Modules => src/Modules}/AntiCheat/RPCHandlers/SetRoleHandler.cs (100%)
rename {Modules => src/Modules}/AntiCheat/RPCHandlers/SetScannerHandler.cs (100%)
rename {Modules => src/Modules}/AntiCheat/RPCHandlers/SetSkinHandler.cs (100%)
rename {Modules => src/Modules}/AntiCheat/RPCHandlers/SetSkinStrHandler.cs (100%)
rename {Modules => src/Modules}/AntiCheat/RPCHandlers/SetStartCounterHandler.cs (100%)
rename {Modules => src/Modules}/AntiCheat/RPCHandlers/SetTasksHandler.cs (100%)
rename {Modules => src/Modules}/AntiCheat/RPCHandlers/SetVisorHandler.cs (100%)
rename {Modules => src/Modules}/AntiCheat/RPCHandlers/SetVisorStrHandler.cs (100%)
rename {Modules => src/Modules}/AntiCheat/RPCHandlers/ShapeshiftHandler.cs (100%)
rename {Modules => src/Modules}/AntiCheat/RPCHandlers/SickoHandler.cs (100%)
rename {Modules => src/Modules}/AntiCheat/RPCHandlers/SnapToHandler.cs (100%)
rename {Modules => src/Modules}/AntiCheat/RPCHandlers/StartAppearHandler.cs (100%)
rename {Modules => src/Modules}/AntiCheat/RPCHandlers/StartMeetingHandler.cs (100%)
rename {Modules => src/Modules}/AntiCheat/RPCHandlers/StartVanishHandler.cs (100%)
rename {Modules => src/Modules}/AntiCheat/RPCHandlers/SyncSettingsHandler.cs (100%)
rename {Modules => src/Modules}/AntiCheat/RPCHandlers/TriggerSporesHandler.cs (100%)
rename {Modules => src/Modules}/AntiCheat/RPCHandlers/UpdateSystemHandler.cs (100%)
rename {Modules => src/Modules}/AntiCheat/RPCHandlers/UsePlatformHandler.cs (100%)
rename {Modules => src/Modules}/AntiCheat/RPCHandlers/UseZiplineHandler.cs (100%)
rename {Modules => src/Modules}/AntiCheat/RPCHandlers/VotingCompleteHandler.cs (100%)
rename {Modules => src/Modules}/ClientOptionItem.cs (99%)
rename {Modules => src/Modules}/Encryptor.cs (97%)
rename {Modules => src/Modules}/FileChecker.cs (97%)
rename {Modules => src/Modules}/GameState.cs (98%)
rename {Modules => src/Modules}/HandshakeHandler.cs (100%)
rename {Modules => src/Modules}/MonoExtension.cs (100%)
rename {Modules => src/Modules}/TextFileHandler.cs (100%)
rename {Modules => src/Modules}/Translator.cs (100%)
rename {Mono => src/Mono}/BetterPingTracker.cs (100%)
rename {Mono => src/Mono}/ExtendedPlayerControl.cs (100%)
rename {Mono => src/Mono}/ExtendedPlayerInfo.cs (100%)
rename {Mono => src/Mono}/MeetingInfoDisplay.cs (100%)
rename {Mono => src/Mono}/PlayerInfoDisplay.cs (100%)
rename {Network => src/Network}/Configs/BannedUserData.cs (100%)
rename {Network => src/Network}/Configs/NewsData.cs (100%)
rename {Network => src/Network}/Configs/UpdateData.cs (100%)
rename {Network => src/Network}/Configs/UserData.cs (100%)
rename {Network => src/Network}/GitHubFile.cs (100%)
rename {Network => src/Network}/GitPath.cs (100%)
rename {Network => src/Network}/GithubAPI.cs (100%)
rename {Network => src/Network}/Loaders/NewsLoader.cs (100%)
rename {Network => src/Network}/Loaders/UpdateLoader.cs (100%)
rename {Network => src/Network}/RPC.cs (100%)
rename {Patches => src/Patches}/Client/AnnouncementPanelPatch.cs (100%)
rename {Patches => src/Patches}/Client/ClientOptionsPatch.cs (100%)
rename {Patches => src/Patches}/Client/ClientPatch.cs (100%)
rename {Patches => src/Patches}/Client/DisconnectPenaltyPatch.cs (100%)
rename {Patches => src/Patches}/Client/DiscordPatch.cs (100%)
rename {Patches => src/Patches}/Client/HttpPatch.cs (100%)
rename {Patches => src/Patches}/Client/MainMenuPatch.cs (100%)
rename {Patches => src/Patches}/Client/PrivateLobbyPatch.cs (100%)
rename {Patches => src/Patches}/Client/SplashIntroPatch.cs (100%)
rename {Patches => src/Patches}/Client/StandaloneSteamPatch.cs (100%)
rename {Patches => src/Patches}/Client/VersionShowerPatch.cs (100%)
rename {Patches => src/Patches}/Gameplay/GameManagersPatch.cs (100%)
rename {Patches => src/Patches}/Gameplay/LobbyPatch.cs (100%)
rename {Patches => src/Patches}/Gameplay/Player/CosmeticsLayerPatch.cs (100%)
rename {Patches => src/Patches}/Gameplay/Player/PlayerControlPatch.cs (100%)
rename {Patches => src/Patches}/Gameplay/Player/PlayerJoinAndLeftPatch.cs (100%)
rename {Patches => src/Patches}/Gameplay/RolePatch.cs (100%)
rename {Patches => src/Patches}/Gameplay/Systems/VoteBanSystemPatch.cs (100%)
rename {Patches => src/Patches}/Gameplay/UI/Chat/ChatCommandsPatch.cs (100%)
rename {Patches => src/Patches}/Gameplay/UI/Chat/ChatNotificationPatch.cs (100%)
rename {Patches => src/Patches}/Gameplay/UI/Chat/ChatPatch.cs (100%)
rename {Patches => src/Patches}/Gameplay/UI/Chat/QuickChatPatch.cs (100%)
rename {Patches => src/Patches}/Gameplay/UI/IntroCutscenePatch.cs (100%)
rename {Patches => src/Patches}/Gameplay/UI/KillOverlayPatch.cs (100%)
rename {Patches => src/Patches}/Gameplay/UI/MeetingHudPatch.cs (100%)
rename {Patches => src/Patches}/Gameplay/UI/MiniMapBehaviourPatch.cs (100%)
rename {Patches => src/Patches}/Gameplay/UI/PingTrackerPatch.cs (100%)
rename {Patches => src/Patches}/Gameplay/UI/PlayerTabPatch.cs (100%)
rename {Patches => src/Patches}/Gameplay/UI/RegionMenuPatch.cs (100%)
rename {Patches => src/Patches}/Gameplay/UI/ReportReasonScreenPatch.cs (100%)
rename {Patches => src/Patches}/Gameplay/UI/RoomTrackerPatch.cs (100%)
rename {Patches => src/Patches}/Gameplay/UI/ServerDropdownPatch.cs (100%)
rename {Patches => src/Patches}/Gameplay/UI/Settings/GameSettingMenuPatch.cs (100%)
rename {Patches => src/Patches}/Gameplay/UI/Settings/NumberOptionPatch.cs (100%)
rename {Patches => src/Patches}/Gameplay/ZoomPatch.cs (100%)
rename {Patches => src/Patches}/Managers/FindAGameManagerClass/FindAGameManagerPatch.cs (100%)
rename {Patches => src/Patches}/Managers/FindAGameManagerClass/FindGameMoreInfoPopupPatch.cs (100%)
rename {Patches => src/Patches}/Managers/HudManagerPatch.cs (100%)
rename {Patches => src/Patches}/Managers/LoadingBarManagerPatch.cs (100%)
rename {Patches => src/Patches}/Managers/ModManagerPatch.cs (100%)
rename {Patches => src/Patches}/Managers/RoleManagerPatch.cs (100%)
rename {Resources => src/Resources}/Images/BetterAmongUs-Icon.png (100%)
rename {Resources => src/Resources}/Images/BetterAmongUs-Logo.png (100%)
rename {Resources => src/Resources}/Images/BetterAmongUs-Mod.png (100%)
rename {Resources => src/Resources}/Images/QuestionMark.png (100%)
rename {Resources => src/Resources}/Lang/de_DE.json (100%)
rename {Resources => src/Resources}/Lang/en_US.json (100%)
rename {Resources => src/Resources}/Lang/es_419.json (100%)
rename {Resources => src/Resources}/Lang/es_ES.json (100%)
rename {Resources => src/Resources}/Lang/fil_PH.json (100%)
rename {Resources => src/Resources}/Lang/fr_FR.json (100%)
rename {Resources => src/Resources}/Lang/ga_IE.json (100%)
rename {Resources => src/Resources}/Lang/it_IT.json (100%)
rename {Resources => src/Resources}/Lang/ja_JP.json (100%)
rename {Resources => src/Resources}/Lang/ko_KR.json (100%)
rename {Resources => src/Resources}/Lang/nl_NL.json (100%)
rename {Resources => src/Resources}/Lang/pt_BR.json (100%)
rename {Resources => src/Resources}/Lang/pt_PT.json (100%)
rename {Resources => src/Resources}/Lang/ru_RU.json (100%)
rename {Resources => src/Resources}/Lang/zh_CN.json (100%)
rename {Resources => src/Resources}/Lang/zh_TW.json (100%)
rename {Resources => src/Resources}/NewsTest (100%)
create mode 100644 src/build/mod_folder_path
diff --git a/.gitignore b/.gitignore
index be4321c..bcbb107 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,8 +1,7 @@
-/BetterAmongUs.sln
-/.vs
-/bin
-/obj
-/.editorconfig
-/.vscode
-/BetterAmongUs.csproj
-/token.env
\ No newline at end of file
+src/BetterAmongUs.sln
+src/.vs
+src/bin
+src/obj
+src/.editorconfig
+src/.vscode
+src/BetterAmongUs.csproj
\ No newline at end of file
diff --git a/BetterAmongUs.csproj b/BetterAmongUs.csproj
deleted file mode 100644
index f503ee8..0000000
--- a/BetterAmongUs.csproj
+++ /dev/null
@@ -1,31 +0,0 @@
-
-
- net6.0
- enable
- enable
- Library
- preview
-
-
-
-
-
-
-
-
-
- all
- runtime; build; native; contentfiles; analyzers; buildtransitive
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/BetterAmongUs.sln b/BetterAmongUs.sln
deleted file mode 100644
index 910995f..0000000
--- a/BetterAmongUs.sln
+++ /dev/null
@@ -1,25 +0,0 @@
-
-Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio Version 17
-VisualStudioVersion = 17.8.34511.84
-MinimumVisualStudioVersion = 10.0.40219.1
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BetterAmongUs", "BetterAmongUs.csproj", "{41193AE4-8181-49F8-9DA4-F4B7B275A0EA}"
-EndProject
-Global
- GlobalSection(SolutionConfigurationPlatforms) = preSolution
- Debug|Any CPU = Debug|Any CPU
- Release|Any CPU = Release|Any CPU
- EndGlobalSection
- GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {41193AE4-8181-49F8-9DA4-F4B7B275A0EA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {41193AE4-8181-49F8-9DA4-F4B7B275A0EA}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {41193AE4-8181-49F8-9DA4-F4B7B275A0EA}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {41193AE4-8181-49F8-9DA4-F4B7B275A0EA}.Release|Any CPU.Build.0 = Release|Any CPU
- EndGlobalSection
- GlobalSection(SolutionProperties) = preSolution
- HideSolutionNode = FALSE
- EndGlobalSection
- GlobalSection(ExtensibilityGlobals) = postSolution
- SolutionGuid = {D51C3994-D13F-43E5-9B5E-E029EC534208}
- EndGlobalSection
-EndGlobal
diff --git a/BAUPlugin.cs b/src/BAUPlugin.cs
similarity index 100%
rename from BAUPlugin.cs
rename to src/BAUPlugin.cs
diff --git a/Commands/AllCommandsCommand.cs b/src/Commands/AllCommandsCommand.cs
similarity index 100%
rename from Commands/AllCommandsCommand.cs
rename to src/Commands/AllCommandsCommand.cs
diff --git a/Commands/Arguments/BaseArgument.cs b/src/Commands/Arguments/BaseArgument.cs
similarity index 100%
rename from Commands/Arguments/BaseArgument.cs
rename to src/Commands/Arguments/BaseArgument.cs
diff --git a/Commands/Arguments/BoolArgument.cs b/src/Commands/Arguments/BoolArgument.cs
similarity index 100%
rename from Commands/Arguments/BoolArgument.cs
rename to src/Commands/Arguments/BoolArgument.cs
diff --git a/Commands/Arguments/PlayerArgument.cs b/src/Commands/Arguments/PlayerArgument.cs
similarity index 100%
rename from Commands/Arguments/PlayerArgument.cs
rename to src/Commands/Arguments/PlayerArgument.cs
diff --git a/Commands/Arguments/StringArgument.cs b/src/Commands/Arguments/StringArgument.cs
similarity index 100%
rename from Commands/Arguments/StringArgument.cs
rename to src/Commands/Arguments/StringArgument.cs
diff --git a/Commands/BaseCommand.cs b/src/Commands/BaseCommand.cs
similarity index 100%
rename from Commands/BaseCommand.cs
rename to src/Commands/BaseCommand.cs
diff --git a/Commands/DumpCommand.cs b/src/Commands/DumpCommand.cs
similarity index 100%
rename from Commands/DumpCommand.cs
rename to src/Commands/DumpCommand.cs
diff --git a/Commands/EndGameCommand.cs b/src/Commands/EndGameCommand.cs
similarity index 100%
rename from Commands/EndGameCommand.cs
rename to src/Commands/EndGameCommand.cs
diff --git a/Commands/ExileCommand.cs b/src/Commands/ExileCommand.cs
similarity index 100%
rename from Commands/ExileCommand.cs
rename to src/Commands/ExileCommand.cs
diff --git a/Commands/HelpCommand.cs b/src/Commands/HelpCommand.cs
similarity index 100%
rename from Commands/HelpCommand.cs
rename to src/Commands/HelpCommand.cs
diff --git a/Commands/KickCommand.cs b/src/Commands/KickCommand.cs
similarity index 100%
rename from Commands/KickCommand.cs
rename to src/Commands/KickCommand.cs
diff --git a/Commands/MeCommand.cs b/src/Commands/MeCommand.cs
similarity index 100%
rename from Commands/MeCommand.cs
rename to src/Commands/MeCommand.cs
diff --git a/Commands/PlayerInfoCommand.cs b/src/Commands/PlayerInfoCommand.cs
similarity index 100%
rename from Commands/PlayerInfoCommand.cs
rename to src/Commands/PlayerInfoCommand.cs
diff --git a/Commands/PlayersInfoCommand.cs b/src/Commands/PlayersInfoCommand.cs
similarity index 100%
rename from Commands/PlayersInfoCommand.cs
rename to src/Commands/PlayersInfoCommand.cs
diff --git a/Commands/RemoveAllCommand.cs b/src/Commands/RemoveAllCommand.cs
similarity index 100%
rename from Commands/RemoveAllCommand.cs
rename to src/Commands/RemoveAllCommand.cs
diff --git a/Commands/RemovePlayerCommand.cs b/src/Commands/RemovePlayerCommand.cs
similarity index 100%
rename from Commands/RemovePlayerCommand.cs
rename to src/Commands/RemovePlayerCommand.cs
diff --git a/Commands/ReviveCommand.cs b/src/Commands/ReviveCommand.cs
similarity index 100%
rename from Commands/ReviveCommand.cs
rename to src/Commands/ReviveCommand.cs
diff --git a/Commands/RoleCommand.cs b/src/Commands/RoleCommand.cs
similarity index 100%
rename from Commands/RoleCommand.cs
rename to src/Commands/RoleCommand.cs
diff --git a/Commands/SetPrefixCommand.cs b/src/Commands/SetPrefixCommand.cs
similarity index 100%
rename from Commands/SetPrefixCommand.cs
rename to src/Commands/SetPrefixCommand.cs
diff --git a/Commands/SetRoleCommand.cs b/src/Commands/SetRoleCommand.cs
similarity index 100%
rename from Commands/SetRoleCommand.cs
rename to src/Commands/SetRoleCommand.cs
diff --git a/Commands/SuicideCommand.cs b/src/Commands/SuicideCommand.cs
similarity index 100%
rename from Commands/SuicideCommand.cs
rename to src/Commands/SuicideCommand.cs
diff --git a/Commands/TestCommand.cs b/src/Commands/TestCommand.cs
similarity index 100%
rename from Commands/TestCommand.cs
rename to src/Commands/TestCommand.cs
diff --git a/Data/BetterDataManager.cs b/src/Data/BetterDataManager.cs
similarity index 100%
rename from Data/BetterDataManager.cs
rename to src/Data/BetterDataManager.cs
diff --git a/Data/Json/AbstractJsonFile.cs b/src/Data/Json/AbstractJsonFile.cs
similarity index 100%
rename from Data/Json/AbstractJsonFile.cs
rename to src/Data/Json/AbstractJsonFile.cs
diff --git a/Data/Json/BetterDataFile.cs b/src/Data/Json/BetterDataFile.cs
similarity index 100%
rename from Data/Json/BetterDataFile.cs
rename to src/Data/Json/BetterDataFile.cs
diff --git a/Data/Json/BetterGameSettingsFile.cs b/src/Data/Json/BetterGameSettingsFile.cs
similarity index 100%
rename from Data/Json/BetterGameSettingsFile.cs
rename to src/Data/Json/BetterGameSettingsFile.cs
diff --git a/Data/Json/OutfitData.cs b/src/Data/Json/OutfitData.cs
similarity index 100%
rename from Data/Json/OutfitData.cs
rename to src/Data/Json/OutfitData.cs
diff --git a/Data/Replay/Events/AppearReplayEvent.cs b/src/Data/Replay/Events/AppearReplayEvent.cs
similarity index 100%
rename from Data/Replay/Events/AppearReplayEvent.cs
rename to src/Data/Replay/Events/AppearReplayEvent.cs
diff --git a/Data/Replay/Events/IReplayEvent.cs b/src/Data/Replay/Events/IReplayEvent.cs
similarity index 100%
rename from Data/Replay/Events/IReplayEvent.cs
rename to src/Data/Replay/Events/IReplayEvent.cs
diff --git a/Data/Replay/Events/MurderReplayEvent.cs b/src/Data/Replay/Events/MurderReplayEvent.cs
similarity index 100%
rename from Data/Replay/Events/MurderReplayEvent.cs
rename to src/Data/Replay/Events/MurderReplayEvent.cs
diff --git a/Data/Replay/Events/ProtectReplayEvent.cs b/src/Data/Replay/Events/ProtectReplayEvent.cs
similarity index 100%
rename from Data/Replay/Events/ProtectReplayEvent.cs
rename to src/Data/Replay/Events/ProtectReplayEvent.cs
diff --git a/Data/Replay/Events/ProtectedReplayEvent.cs b/src/Data/Replay/Events/ProtectedReplayEvent.cs
similarity index 100%
rename from Data/Replay/Events/ProtectedReplayEvent.cs
rename to src/Data/Replay/Events/ProtectedReplayEvent.cs
diff --git a/Data/Replay/Events/ShapeshiftReplayEvent.cs b/src/Data/Replay/Events/ShapeshiftReplayEvent.cs
similarity index 100%
rename from Data/Replay/Events/ShapeshiftReplayEvent.cs
rename to src/Data/Replay/Events/ShapeshiftReplayEvent.cs
diff --git a/Data/Replay/Events/StartMeetingReplayEvent.cs b/src/Data/Replay/Events/StartMeetingReplayEvent.cs
similarity index 100%
rename from Data/Replay/Events/StartMeetingReplayEvent.cs
rename to src/Data/Replay/Events/StartMeetingReplayEvent.cs
diff --git a/Data/Replay/Events/UpdateSystemReplayEvent.cs b/src/Data/Replay/Events/UpdateSystemReplayEvent.cs
similarity index 100%
rename from Data/Replay/Events/UpdateSystemReplayEvent.cs
rename to src/Data/Replay/Events/UpdateSystemReplayEvent.cs
diff --git a/Data/Replay/Events/VanishReplayEvent.cs b/src/Data/Replay/Events/VanishReplayEvent.cs
similarity index 100%
rename from Data/Replay/Events/VanishReplayEvent.cs
rename to src/Data/Replay/Events/VanishReplayEvent.cs
diff --git a/Data/Replay/Events/VentReplayEvent.cs b/src/Data/Replay/Events/VentReplayEvent.cs
similarity index 100%
rename from Data/Replay/Events/VentReplayEvent.cs
rename to src/Data/Replay/Events/VentReplayEvent.cs
diff --git a/Data/Replay/PlayerReplayData.cs b/src/Data/Replay/PlayerReplayData.cs
similarity index 100%
rename from Data/Replay/PlayerReplayData.cs
rename to src/Data/Replay/PlayerReplayData.cs
diff --git a/Data/Replay/Replay.cs b/src/Data/Replay/Replay.cs
similarity index 100%
rename from Data/Replay/Replay.cs
rename to src/Data/Replay/Replay.cs
diff --git a/Data/Replay/ReplayEventConverter.cs b/src/Data/Replay/ReplayEventConverter.cs
similarity index 100%
rename from Data/Replay/ReplayEventConverter.cs
rename to src/Data/Replay/ReplayEventConverter.cs
diff --git a/Data/SharedSecretExchange.cs b/src/Data/SharedSecretExchange.cs
similarity index 100%
rename from Data/SharedSecretExchange.cs
rename to src/Data/SharedSecretExchange.cs
diff --git a/Helpers/CastHelper.cs b/src/Helpers/CastHelper.cs
similarity index 100%
rename from Helpers/CastHelper.cs
rename to src/Helpers/CastHelper.cs
diff --git a/Helpers/Colors.cs b/src/Helpers/Colors.cs
similarity index 100%
rename from Helpers/Colors.cs
rename to src/Helpers/Colors.cs
diff --git a/Helpers/Debugger.cs b/src/Helpers/Debugger.cs
similarity index 100%
rename from Helpers/Debugger.cs
rename to src/Helpers/Debugger.cs
diff --git a/Helpers/EnumHelper.cs b/src/Helpers/EnumHelper.cs
similarity index 100%
rename from Helpers/EnumHelper.cs
rename to src/Helpers/EnumHelper.cs
diff --git a/Helpers/GamePrefabHelper.cs b/src/Helpers/GamePrefabHelper.cs
similarity index 100%
rename from Helpers/GamePrefabHelper.cs
rename to src/Helpers/GamePrefabHelper.cs
diff --git a/Helpers/IEnumerableHelper.cs b/src/Helpers/IEnumerableHelper.cs
similarity index 100%
rename from Helpers/IEnumerableHelper.cs
rename to src/Helpers/IEnumerableHelper.cs
diff --git a/Helpers/Il2CppExtensions.cs b/src/Helpers/Il2CppExtensions.cs
similarity index 100%
rename from Helpers/Il2CppExtensions.cs
rename to src/Helpers/Il2CppExtensions.cs
diff --git a/Helpers/InnerNetClientHelper.cs b/src/Helpers/InnerNetClientHelper.cs
similarity index 100%
rename from Helpers/InnerNetClientHelper.cs
rename to src/Helpers/InnerNetClientHelper.cs
diff --git a/Helpers/LateTask.cs b/src/Helpers/LateTask.cs
similarity index 100%
rename from Helpers/LateTask.cs
rename to src/Helpers/LateTask.cs
diff --git a/Helpers/ObjectHelper.cs b/src/Helpers/ObjectHelper.cs
similarity index 100%
rename from Helpers/ObjectHelper.cs
rename to src/Helpers/ObjectHelper.cs
diff --git a/Helpers/PlayerControlHelper.cs b/src/Helpers/PlayerControlHelper.cs
similarity index 100%
rename from Helpers/PlayerControlHelper.cs
rename to src/Helpers/PlayerControlHelper.cs
diff --git a/Helpers/RoleHelper.cs b/src/Helpers/RoleHelper.cs
similarity index 100%
rename from Helpers/RoleHelper.cs
rename to src/Helpers/RoleHelper.cs
diff --git a/Helpers/ShuffleHelper.cs b/src/Helpers/ShuffleHelper.cs
similarity index 100%
rename from Helpers/ShuffleHelper.cs
rename to src/Helpers/ShuffleHelper.cs
diff --git a/Helpers/Utils.cs b/src/Helpers/Utils.cs
similarity index 100%
rename from Helpers/Utils.cs
rename to src/Helpers/Utils.cs
diff --git a/Items/Attributes/StaticClassesAttribute.cs b/src/Items/Attributes/StaticClassesAttribute.cs
similarity index 100%
rename from Items/Attributes/StaticClassesAttribute.cs
rename to src/Items/Attributes/StaticClassesAttribute.cs
diff --git a/Items/Enums/NameSyncType.cs b/src/Items/Enums/NameSyncType.cs
similarity index 100%
rename from Items/Enums/NameSyncType.cs
rename to src/Items/Enums/NameSyncType.cs
diff --git a/Items/Enums/NewsTypes.cs b/src/Items/Enums/NewsTypes.cs
similarity index 100%
rename from Items/Enums/NewsTypes.cs
rename to src/Items/Enums/NewsTypes.cs
diff --git a/Items/ModNews.cs b/src/Items/ModNews.cs
similarity index 100%
rename from Items/ModNews.cs
rename to src/Items/ModNews.cs
diff --git a/Items/OptionItems/NoneOption/OptionDividerItem.cs b/src/Items/OptionItems/NoneOption/OptionDividerItem.cs
similarity index 100%
rename from Items/OptionItems/NoneOption/OptionDividerItem.cs
rename to src/Items/OptionItems/NoneOption/OptionDividerItem.cs
diff --git a/Items/OptionItems/NoneOption/OptionHeaderItem.cs b/src/Items/OptionItems/NoneOption/OptionHeaderItem.cs
similarity index 100%
rename from Items/OptionItems/NoneOption/OptionHeaderItem.cs
rename to src/Items/OptionItems/NoneOption/OptionHeaderItem.cs
diff --git a/Items/OptionItems/NoneOption/OptionTitleItem.cs b/src/Items/OptionItems/NoneOption/OptionTitleItem.cs
similarity index 100%
rename from Items/OptionItems/NoneOption/OptionTitleItem.cs
rename to src/Items/OptionItems/NoneOption/OptionTitleItem.cs
diff --git a/Items/OptionItems/OptionCheckboxItem.cs b/src/Items/OptionItems/OptionCheckboxItem.cs
similarity index 100%
rename from Items/OptionItems/OptionCheckboxItem.cs
rename to src/Items/OptionItems/OptionCheckboxItem.cs
diff --git a/Items/OptionItems/OptionFloatItem.cs b/src/Items/OptionItems/OptionFloatItem.cs
similarity index 100%
rename from Items/OptionItems/OptionFloatItem.cs
rename to src/Items/OptionItems/OptionFloatItem.cs
diff --git a/Items/OptionItems/OptionIntItem.cs b/src/Items/OptionItems/OptionIntItem.cs
similarity index 100%
rename from Items/OptionItems/OptionIntItem.cs
rename to src/Items/OptionItems/OptionIntItem.cs
diff --git a/Items/OptionItems/OptionItem.cs b/src/Items/OptionItems/OptionItem.cs
similarity index 100%
rename from Items/OptionItems/OptionItem.cs
rename to src/Items/OptionItems/OptionItem.cs
diff --git a/Items/OptionItems/OptionPercentItem.cs b/src/Items/OptionItems/OptionPercentItem.cs
similarity index 100%
rename from Items/OptionItems/OptionPercentItem.cs
rename to src/Items/OptionItems/OptionPercentItem.cs
diff --git a/Items/OptionItems/OptionPlayerItem.cs b/src/Items/OptionItems/OptionPlayerItem.cs
similarity index 100%
rename from Items/OptionItems/OptionPlayerItem.cs
rename to src/Items/OptionItems/OptionPlayerItem.cs
diff --git a/Items/OptionItems/OptionStringItem.cs b/src/Items/OptionItems/OptionStringItem.cs
similarity index 100%
rename from Items/OptionItems/OptionStringItem.cs
rename to src/Items/OptionItems/OptionStringItem.cs
diff --git a/Items/OptionItems/OptionTab.cs b/src/Items/OptionItems/OptionTab.cs
similarity index 100%
rename from Items/OptionItems/OptionTab.cs
rename to src/Items/OptionItems/OptionTab.cs
diff --git a/Items/Structs/RPCData.cs b/src/Items/Structs/RPCData.cs
similarity index 100%
rename from Items/Structs/RPCData.cs
rename to src/Items/Structs/RPCData.cs
diff --git a/Items/Structs/UserInfo.cs b/src/Items/Structs/UserInfo.cs
similarity index 100%
rename from Items/Structs/UserInfo.cs
rename to src/Items/Structs/UserInfo.cs
diff --git a/Managers/BetterNotificationManager.cs b/src/Managers/BetterNotificationManager.cs
similarity index 100%
rename from Managers/BetterNotificationManager.cs
rename to src/Managers/BetterNotificationManager.cs
diff --git a/Managers/CustomLoadingBarManager.cs b/src/Managers/CustomLoadingBarManager.cs
similarity index 100%
rename from Managers/CustomLoadingBarManager.cs
rename to src/Managers/CustomLoadingBarManager.cs
diff --git a/Managers/HostManager.cs b/src/Managers/HostManager.cs
similarity index 100%
rename from Managers/HostManager.cs
rename to src/Managers/HostManager.cs
diff --git a/Managers/NetworkManager.cs b/src/Managers/NetworkManager.cs
similarity index 100%
rename from Managers/NetworkManager.cs
rename to src/Managers/NetworkManager.cs
diff --git a/Managers/PrivateOnlyLobbyManager.cs b/src/Managers/PrivateOnlyLobbyManager.cs
similarity index 100%
rename from Managers/PrivateOnlyLobbyManager.cs
rename to src/Managers/PrivateOnlyLobbyManager.cs
diff --git a/Managers/UpdateManager.cs b/src/Managers/UpdateManager.cs
similarity index 100%
rename from Managers/UpdateManager.cs
rename to src/Managers/UpdateManager.cs
diff --git a/ModInfo.cs b/src/ModInfo.cs
similarity index 100%
rename from ModInfo.cs
rename to src/ModInfo.cs
diff --git a/Modules/AntiCheat/BetterAntiCheat.cs b/src/Modules/AntiCheat/BetterAntiCheat.cs
similarity index 100%
rename from Modules/AntiCheat/BetterAntiCheat.cs
rename to src/Modules/AntiCheat/BetterAntiCheat.cs
diff --git a/Modules/AntiCheat/RPCHandler.cs b/src/Modules/AntiCheat/RPCHandler.cs
similarity index 100%
rename from Modules/AntiCheat/RPCHandler.cs
rename to src/Modules/AntiCheat/RPCHandler.cs
diff --git a/Modules/AntiCheat/RPCHandlers/AUMChatHandler.cs b/src/Modules/AntiCheat/RPCHandlers/AUMChatHandler.cs
similarity index 100%
rename from Modules/AntiCheat/RPCHandlers/AUMChatHandler.cs
rename to src/Modules/AntiCheat/RPCHandlers/AUMChatHandler.cs
diff --git a/Modules/AntiCheat/RPCHandlers/AUMHandler.cs b/src/Modules/AntiCheat/RPCHandlers/AUMHandler.cs
similarity index 100%
rename from Modules/AntiCheat/RPCHandlers/AUMHandler.cs
rename to src/Modules/AntiCheat/RPCHandlers/AUMHandler.cs
diff --git a/Modules/AntiCheat/RPCHandlers/AddVoteHandler.cs b/src/Modules/AntiCheat/RPCHandlers/AddVoteHandler.cs
similarity index 100%
rename from Modules/AntiCheat/RPCHandlers/AddVoteHandler.cs
rename to src/Modules/AntiCheat/RPCHandlers/AddVoteHandler.cs
diff --git a/Modules/AntiCheat/RPCHandlers/BootFromVentHandler.cs b/src/Modules/AntiCheat/RPCHandlers/BootFromVentHandler.cs
similarity index 100%
rename from Modules/AntiCheat/RPCHandlers/BootFromVentHandler.cs
rename to src/Modules/AntiCheat/RPCHandlers/BootFromVentHandler.cs
diff --git a/Modules/AntiCheat/RPCHandlers/CancelPetHandler.cs b/src/Modules/AntiCheat/RPCHandlers/CancelPetHandler.cs
similarity index 100%
rename from Modules/AntiCheat/RPCHandlers/CancelPetHandler.cs
rename to src/Modules/AntiCheat/RPCHandlers/CancelPetHandler.cs
diff --git a/Modules/AntiCheat/RPCHandlers/CastVoteHandler.cs b/src/Modules/AntiCheat/RPCHandlers/CastVoteHandler.cs
similarity index 100%
rename from Modules/AntiCheat/RPCHandlers/CastVoteHandler.cs
rename to src/Modules/AntiCheat/RPCHandlers/CastVoteHandler.cs
diff --git a/Modules/AntiCheat/RPCHandlers/CheckAppearHandler.cs b/src/Modules/AntiCheat/RPCHandlers/CheckAppearHandler.cs
similarity index 100%
rename from Modules/AntiCheat/RPCHandlers/CheckAppearHandler.cs
rename to src/Modules/AntiCheat/RPCHandlers/CheckAppearHandler.cs
diff --git a/Modules/AntiCheat/RPCHandlers/CheckColorHandler.cs b/src/Modules/AntiCheat/RPCHandlers/CheckColorHandler.cs
similarity index 100%
rename from Modules/AntiCheat/RPCHandlers/CheckColorHandler.cs
rename to src/Modules/AntiCheat/RPCHandlers/CheckColorHandler.cs
diff --git a/Modules/AntiCheat/RPCHandlers/CheckMurderHandler.cs b/src/Modules/AntiCheat/RPCHandlers/CheckMurderHandler.cs
similarity index 100%
rename from Modules/AntiCheat/RPCHandlers/CheckMurderHandler.cs
rename to src/Modules/AntiCheat/RPCHandlers/CheckMurderHandler.cs
diff --git a/Modules/AntiCheat/RPCHandlers/CheckNameHandler.cs b/src/Modules/AntiCheat/RPCHandlers/CheckNameHandler.cs
similarity index 100%
rename from Modules/AntiCheat/RPCHandlers/CheckNameHandler.cs
rename to src/Modules/AntiCheat/RPCHandlers/CheckNameHandler.cs
diff --git a/Modules/AntiCheat/RPCHandlers/CheckProtectHandler.cs b/src/Modules/AntiCheat/RPCHandlers/CheckProtectHandler.cs
similarity index 100%
rename from Modules/AntiCheat/RPCHandlers/CheckProtectHandler.cs
rename to src/Modules/AntiCheat/RPCHandlers/CheckProtectHandler.cs
diff --git a/Modules/AntiCheat/RPCHandlers/CheckShapeshiftHandler.cs b/src/Modules/AntiCheat/RPCHandlers/CheckShapeshiftHandler.cs
similarity index 100%
rename from Modules/AntiCheat/RPCHandlers/CheckShapeshiftHandler.cs
rename to src/Modules/AntiCheat/RPCHandlers/CheckShapeshiftHandler.cs
diff --git a/Modules/AntiCheat/RPCHandlers/CheckSporeHandler.cs b/src/Modules/AntiCheat/RPCHandlers/CheckSporeHandler.cs
similarity index 100%
rename from Modules/AntiCheat/RPCHandlers/CheckSporeHandler.cs
rename to src/Modules/AntiCheat/RPCHandlers/CheckSporeHandler.cs
diff --git a/Modules/AntiCheat/RPCHandlers/CheckVanishHandler.cs b/src/Modules/AntiCheat/RPCHandlers/CheckVanishHandler.cs
similarity index 100%
rename from Modules/AntiCheat/RPCHandlers/CheckVanishHandler.cs
rename to src/Modules/AntiCheat/RPCHandlers/CheckVanishHandler.cs
diff --git a/Modules/AntiCheat/RPCHandlers/CheckZiplineHandler.cs b/src/Modules/AntiCheat/RPCHandlers/CheckZiplineHandler.cs
similarity index 100%
rename from Modules/AntiCheat/RPCHandlers/CheckZiplineHandler.cs
rename to src/Modules/AntiCheat/RPCHandlers/CheckZiplineHandler.cs
diff --git a/Modules/AntiCheat/RPCHandlers/ClearVoteHandler.cs b/src/Modules/AntiCheat/RPCHandlers/ClearVoteHandler.cs
similarity index 100%
rename from Modules/AntiCheat/RPCHandlers/ClearVoteHandler.cs
rename to src/Modules/AntiCheat/RPCHandlers/ClearVoteHandler.cs
diff --git a/Modules/AntiCheat/RPCHandlers/ClimbLadderHandler.cs b/src/Modules/AntiCheat/RPCHandlers/ClimbLadderHandler.cs
similarity index 100%
rename from Modules/AntiCheat/RPCHandlers/ClimbLadderHandler.cs
rename to src/Modules/AntiCheat/RPCHandlers/ClimbLadderHandler.cs
diff --git a/Modules/AntiCheat/RPCHandlers/CloseDoorsOfTypeHandler.cs b/src/Modules/AntiCheat/RPCHandlers/CloseDoorsOfTypeHandler.cs
similarity index 100%
rename from Modules/AntiCheat/RPCHandlers/CloseDoorsOfTypeHandler.cs
rename to src/Modules/AntiCheat/RPCHandlers/CloseDoorsOfTypeHandler.cs
diff --git a/Modules/AntiCheat/RPCHandlers/CloseMeetingHandler.cs b/src/Modules/AntiCheat/RPCHandlers/CloseMeetingHandler.cs
similarity index 100%
rename from Modules/AntiCheat/RPCHandlers/CloseMeetingHandler.cs
rename to src/Modules/AntiCheat/RPCHandlers/CloseMeetingHandler.cs
diff --git a/Modules/AntiCheat/RPCHandlers/CompleteTaskHandler.cs b/src/Modules/AntiCheat/RPCHandlers/CompleteTaskHandler.cs
similarity index 100%
rename from Modules/AntiCheat/RPCHandlers/CompleteTaskHandler.cs
rename to src/Modules/AntiCheat/RPCHandlers/CompleteTaskHandler.cs
diff --git a/Modules/AntiCheat/RPCHandlers/EnterVentHandler.cs b/src/Modules/AntiCheat/RPCHandlers/EnterVentHandler.cs
similarity index 100%
rename from Modules/AntiCheat/RPCHandlers/EnterVentHandler.cs
rename to src/Modules/AntiCheat/RPCHandlers/EnterVentHandler.cs
diff --git a/Modules/AntiCheat/RPCHandlers/ExiledHandler.cs b/src/Modules/AntiCheat/RPCHandlers/ExiledHandler.cs
similarity index 100%
rename from Modules/AntiCheat/RPCHandlers/ExiledHandler.cs
rename to src/Modules/AntiCheat/RPCHandlers/ExiledHandler.cs
diff --git a/Modules/AntiCheat/RPCHandlers/ExitVentHandler.cs b/src/Modules/AntiCheat/RPCHandlers/ExitVentHandler.cs
similarity index 100%
rename from Modules/AntiCheat/RPCHandlers/ExitVentHandler.cs
rename to src/Modules/AntiCheat/RPCHandlers/ExitVentHandler.cs
diff --git a/Modules/AntiCheat/RPCHandlers/ExtendLobbyTimerHandler.cs b/src/Modules/AntiCheat/RPCHandlers/ExtendLobbyTimerHandler.cs
similarity index 100%
rename from Modules/AntiCheat/RPCHandlers/ExtendLobbyTimerHandler.cs
rename to src/Modules/AntiCheat/RPCHandlers/ExtendLobbyTimerHandler.cs
diff --git a/Modules/AntiCheat/RPCHandlers/KillNetworkChatHandler.cs b/src/Modules/AntiCheat/RPCHandlers/KillNetworkChatHandler.cs
similarity index 100%
rename from Modules/AntiCheat/RPCHandlers/KillNetworkChatHandler.cs
rename to src/Modules/AntiCheat/RPCHandlers/KillNetworkChatHandler.cs
diff --git a/Modules/AntiCheat/RPCHandlers/KillNetworkHandler.cs b/src/Modules/AntiCheat/RPCHandlers/KillNetworkHandler.cs
similarity index 100%
rename from Modules/AntiCheat/RPCHandlers/KillNetworkHandler.cs
rename to src/Modules/AntiCheat/RPCHandlers/KillNetworkHandler.cs
diff --git a/Modules/AntiCheat/RPCHandlers/LobbyTimeExpiringHandler.cs b/src/Modules/AntiCheat/RPCHandlers/LobbyTimeExpiringHandler.cs
similarity index 100%
rename from Modules/AntiCheat/RPCHandlers/LobbyTimeExpiringHandler.cs
rename to src/Modules/AntiCheat/RPCHandlers/LobbyTimeExpiringHandler.cs
diff --git a/Modules/AntiCheat/RPCHandlers/MurderPlayerHandler.cs b/src/Modules/AntiCheat/RPCHandlers/MurderPlayerHandler.cs
similarity index 100%
rename from Modules/AntiCheat/RPCHandlers/MurderPlayerHandler.cs
rename to src/Modules/AntiCheat/RPCHandlers/MurderPlayerHandler.cs
diff --git a/Modules/AntiCheat/RPCHandlers/NetObjectHandlers/DeserializeNetObjectHandler.cs b/src/Modules/AntiCheat/RPCHandlers/NetObjectHandlers/DeserializeNetObjectHandler.cs
similarity index 100%
rename from Modules/AntiCheat/RPCHandlers/NetObjectHandlers/DeserializeNetObjectHandler.cs
rename to src/Modules/AntiCheat/RPCHandlers/NetObjectHandlers/DeserializeNetObjectHandler.cs
diff --git a/Modules/AntiCheat/RPCHandlers/NetObjectHandlers/DespawnNetObjectHandler.cs b/src/Modules/AntiCheat/RPCHandlers/NetObjectHandlers/DespawnNetObjectHandler.cs
similarity index 100%
rename from Modules/AntiCheat/RPCHandlers/NetObjectHandlers/DespawnNetObjectHandler.cs
rename to src/Modules/AntiCheat/RPCHandlers/NetObjectHandlers/DespawnNetObjectHandler.cs
diff --git a/Modules/AntiCheat/RPCHandlers/PetHandler.cs b/src/Modules/AntiCheat/RPCHandlers/PetHandler.cs
similarity index 100%
rename from Modules/AntiCheat/RPCHandlers/PetHandler.cs
rename to src/Modules/AntiCheat/RPCHandlers/PetHandler.cs
diff --git a/Modules/AntiCheat/RPCHandlers/PlayAnimationHandler.cs b/src/Modules/AntiCheat/RPCHandlers/PlayAnimationHandler.cs
similarity index 100%
rename from Modules/AntiCheat/RPCHandlers/PlayAnimationHandler.cs
rename to src/Modules/AntiCheat/RPCHandlers/PlayAnimationHandler.cs
diff --git a/Modules/AntiCheat/RPCHandlers/ProtectPlayerHandler.cs b/src/Modules/AntiCheat/RPCHandlers/ProtectPlayerHandler.cs
similarity index 100%
rename from Modules/AntiCheat/RPCHandlers/ProtectPlayerHandler.cs
rename to src/Modules/AntiCheat/RPCHandlers/ProtectPlayerHandler.cs
diff --git a/Modules/AntiCheat/RPCHandlers/RejectShapeshiftHandler.cs b/src/Modules/AntiCheat/RPCHandlers/RejectShapeshiftHandler.cs
similarity index 100%
rename from Modules/AntiCheat/RPCHandlers/RejectShapeshiftHandler.cs
rename to src/Modules/AntiCheat/RPCHandlers/RejectShapeshiftHandler.cs
diff --git a/Modules/AntiCheat/RPCHandlers/ReportDeadBodyHandler.cs b/src/Modules/AntiCheat/RPCHandlers/ReportDeadBodyHandler.cs
similarity index 100%
rename from Modules/AntiCheat/RPCHandlers/ReportDeadBodyHandler.cs
rename to src/Modules/AntiCheat/RPCHandlers/ReportDeadBodyHandler.cs
diff --git a/Modules/AntiCheat/RPCHandlers/SendChatHandler.cs b/src/Modules/AntiCheat/RPCHandlers/SendChatHandler.cs
similarity index 100%
rename from Modules/AntiCheat/RPCHandlers/SendChatHandler.cs
rename to src/Modules/AntiCheat/RPCHandlers/SendChatHandler.cs
diff --git a/Modules/AntiCheat/RPCHandlers/SendChatNoteHandler.cs b/src/Modules/AntiCheat/RPCHandlers/SendChatNoteHandler.cs
similarity index 100%
rename from Modules/AntiCheat/RPCHandlers/SendChatNoteHandler.cs
rename to src/Modules/AntiCheat/RPCHandlers/SendChatNoteHandler.cs
diff --git a/Modules/AntiCheat/RPCHandlers/SendQuickChatHandler.cs b/src/Modules/AntiCheat/RPCHandlers/SendQuickChatHandler.cs
similarity index 100%
rename from Modules/AntiCheat/RPCHandlers/SendQuickChatHandler.cs
rename to src/Modules/AntiCheat/RPCHandlers/SendQuickChatHandler.cs
diff --git a/Modules/AntiCheat/RPCHandlers/SetColorHandler.cs b/src/Modules/AntiCheat/RPCHandlers/SetColorHandler.cs
similarity index 100%
rename from Modules/AntiCheat/RPCHandlers/SetColorHandler.cs
rename to src/Modules/AntiCheat/RPCHandlers/SetColorHandler.cs
diff --git a/Modules/AntiCheat/RPCHandlers/SetHatHandler.cs b/src/Modules/AntiCheat/RPCHandlers/SetHatHandler.cs
similarity index 100%
rename from Modules/AntiCheat/RPCHandlers/SetHatHandler.cs
rename to src/Modules/AntiCheat/RPCHandlers/SetHatHandler.cs
diff --git a/Modules/AntiCheat/RPCHandlers/SetHatStrHandler.cs b/src/Modules/AntiCheat/RPCHandlers/SetHatStrHandler.cs
similarity index 100%
rename from Modules/AntiCheat/RPCHandlers/SetHatStrHandler.cs
rename to src/Modules/AntiCheat/RPCHandlers/SetHatStrHandler.cs
diff --git a/Modules/AntiCheat/RPCHandlers/SetInfectedHandler.cs b/src/Modules/AntiCheat/RPCHandlers/SetInfectedHandler.cs
similarity index 100%
rename from Modules/AntiCheat/RPCHandlers/SetInfectedHandler.cs
rename to src/Modules/AntiCheat/RPCHandlers/SetInfectedHandler.cs
diff --git a/Modules/AntiCheat/RPCHandlers/SetLevelHandler.cs b/src/Modules/AntiCheat/RPCHandlers/SetLevelHandler.cs
similarity index 100%
rename from Modules/AntiCheat/RPCHandlers/SetLevelHandler.cs
rename to src/Modules/AntiCheat/RPCHandlers/SetLevelHandler.cs
diff --git a/Modules/AntiCheat/RPCHandlers/SetNameHandler.cs b/src/Modules/AntiCheat/RPCHandlers/SetNameHandler.cs
similarity index 100%
rename from Modules/AntiCheat/RPCHandlers/SetNameHandler.cs
rename to src/Modules/AntiCheat/RPCHandlers/SetNameHandler.cs
diff --git a/Modules/AntiCheat/RPCHandlers/SetNamePlateHandler.cs b/src/Modules/AntiCheat/RPCHandlers/SetNamePlateHandler.cs
similarity index 100%
rename from Modules/AntiCheat/RPCHandlers/SetNamePlateHandler.cs
rename to src/Modules/AntiCheat/RPCHandlers/SetNamePlateHandler.cs
diff --git a/Modules/AntiCheat/RPCHandlers/SetNamePlateStrHandler.cs b/src/Modules/AntiCheat/RPCHandlers/SetNamePlateStrHandler.cs
similarity index 100%
rename from Modules/AntiCheat/RPCHandlers/SetNamePlateStrHandler.cs
rename to src/Modules/AntiCheat/RPCHandlers/SetNamePlateStrHandler.cs
diff --git a/Modules/AntiCheat/RPCHandlers/SetPetHandler.cs b/src/Modules/AntiCheat/RPCHandlers/SetPetHandler.cs
similarity index 100%
rename from Modules/AntiCheat/RPCHandlers/SetPetHandler.cs
rename to src/Modules/AntiCheat/RPCHandlers/SetPetHandler.cs
diff --git a/Modules/AntiCheat/RPCHandlers/SetPetStrHandler.cs b/src/Modules/AntiCheat/RPCHandlers/SetPetStrHandler.cs
similarity index 100%
rename from Modules/AntiCheat/RPCHandlers/SetPetStrHandler.cs
rename to src/Modules/AntiCheat/RPCHandlers/SetPetStrHandler.cs
diff --git a/Modules/AntiCheat/RPCHandlers/SetRoleHandler.cs b/src/Modules/AntiCheat/RPCHandlers/SetRoleHandler.cs
similarity index 100%
rename from Modules/AntiCheat/RPCHandlers/SetRoleHandler.cs
rename to src/Modules/AntiCheat/RPCHandlers/SetRoleHandler.cs
diff --git a/Modules/AntiCheat/RPCHandlers/SetScannerHandler.cs b/src/Modules/AntiCheat/RPCHandlers/SetScannerHandler.cs
similarity index 100%
rename from Modules/AntiCheat/RPCHandlers/SetScannerHandler.cs
rename to src/Modules/AntiCheat/RPCHandlers/SetScannerHandler.cs
diff --git a/Modules/AntiCheat/RPCHandlers/SetSkinHandler.cs b/src/Modules/AntiCheat/RPCHandlers/SetSkinHandler.cs
similarity index 100%
rename from Modules/AntiCheat/RPCHandlers/SetSkinHandler.cs
rename to src/Modules/AntiCheat/RPCHandlers/SetSkinHandler.cs
diff --git a/Modules/AntiCheat/RPCHandlers/SetSkinStrHandler.cs b/src/Modules/AntiCheat/RPCHandlers/SetSkinStrHandler.cs
similarity index 100%
rename from Modules/AntiCheat/RPCHandlers/SetSkinStrHandler.cs
rename to src/Modules/AntiCheat/RPCHandlers/SetSkinStrHandler.cs
diff --git a/Modules/AntiCheat/RPCHandlers/SetStartCounterHandler.cs b/src/Modules/AntiCheat/RPCHandlers/SetStartCounterHandler.cs
similarity index 100%
rename from Modules/AntiCheat/RPCHandlers/SetStartCounterHandler.cs
rename to src/Modules/AntiCheat/RPCHandlers/SetStartCounterHandler.cs
diff --git a/Modules/AntiCheat/RPCHandlers/SetTasksHandler.cs b/src/Modules/AntiCheat/RPCHandlers/SetTasksHandler.cs
similarity index 100%
rename from Modules/AntiCheat/RPCHandlers/SetTasksHandler.cs
rename to src/Modules/AntiCheat/RPCHandlers/SetTasksHandler.cs
diff --git a/Modules/AntiCheat/RPCHandlers/SetVisorHandler.cs b/src/Modules/AntiCheat/RPCHandlers/SetVisorHandler.cs
similarity index 100%
rename from Modules/AntiCheat/RPCHandlers/SetVisorHandler.cs
rename to src/Modules/AntiCheat/RPCHandlers/SetVisorHandler.cs
diff --git a/Modules/AntiCheat/RPCHandlers/SetVisorStrHandler.cs b/src/Modules/AntiCheat/RPCHandlers/SetVisorStrHandler.cs
similarity index 100%
rename from Modules/AntiCheat/RPCHandlers/SetVisorStrHandler.cs
rename to src/Modules/AntiCheat/RPCHandlers/SetVisorStrHandler.cs
diff --git a/Modules/AntiCheat/RPCHandlers/ShapeshiftHandler.cs b/src/Modules/AntiCheat/RPCHandlers/ShapeshiftHandler.cs
similarity index 100%
rename from Modules/AntiCheat/RPCHandlers/ShapeshiftHandler.cs
rename to src/Modules/AntiCheat/RPCHandlers/ShapeshiftHandler.cs
diff --git a/Modules/AntiCheat/RPCHandlers/SickoHandler.cs b/src/Modules/AntiCheat/RPCHandlers/SickoHandler.cs
similarity index 100%
rename from Modules/AntiCheat/RPCHandlers/SickoHandler.cs
rename to src/Modules/AntiCheat/RPCHandlers/SickoHandler.cs
diff --git a/Modules/AntiCheat/RPCHandlers/SnapToHandler.cs b/src/Modules/AntiCheat/RPCHandlers/SnapToHandler.cs
similarity index 100%
rename from Modules/AntiCheat/RPCHandlers/SnapToHandler.cs
rename to src/Modules/AntiCheat/RPCHandlers/SnapToHandler.cs
diff --git a/Modules/AntiCheat/RPCHandlers/StartAppearHandler.cs b/src/Modules/AntiCheat/RPCHandlers/StartAppearHandler.cs
similarity index 100%
rename from Modules/AntiCheat/RPCHandlers/StartAppearHandler.cs
rename to src/Modules/AntiCheat/RPCHandlers/StartAppearHandler.cs
diff --git a/Modules/AntiCheat/RPCHandlers/StartMeetingHandler.cs b/src/Modules/AntiCheat/RPCHandlers/StartMeetingHandler.cs
similarity index 100%
rename from Modules/AntiCheat/RPCHandlers/StartMeetingHandler.cs
rename to src/Modules/AntiCheat/RPCHandlers/StartMeetingHandler.cs
diff --git a/Modules/AntiCheat/RPCHandlers/StartVanishHandler.cs b/src/Modules/AntiCheat/RPCHandlers/StartVanishHandler.cs
similarity index 100%
rename from Modules/AntiCheat/RPCHandlers/StartVanishHandler.cs
rename to src/Modules/AntiCheat/RPCHandlers/StartVanishHandler.cs
diff --git a/Modules/AntiCheat/RPCHandlers/SyncSettingsHandler.cs b/src/Modules/AntiCheat/RPCHandlers/SyncSettingsHandler.cs
similarity index 100%
rename from Modules/AntiCheat/RPCHandlers/SyncSettingsHandler.cs
rename to src/Modules/AntiCheat/RPCHandlers/SyncSettingsHandler.cs
diff --git a/Modules/AntiCheat/RPCHandlers/TriggerSporesHandler.cs b/src/Modules/AntiCheat/RPCHandlers/TriggerSporesHandler.cs
similarity index 100%
rename from Modules/AntiCheat/RPCHandlers/TriggerSporesHandler.cs
rename to src/Modules/AntiCheat/RPCHandlers/TriggerSporesHandler.cs
diff --git a/Modules/AntiCheat/RPCHandlers/UpdateSystemHandler.cs b/src/Modules/AntiCheat/RPCHandlers/UpdateSystemHandler.cs
similarity index 100%
rename from Modules/AntiCheat/RPCHandlers/UpdateSystemHandler.cs
rename to src/Modules/AntiCheat/RPCHandlers/UpdateSystemHandler.cs
diff --git a/Modules/AntiCheat/RPCHandlers/UsePlatformHandler.cs b/src/Modules/AntiCheat/RPCHandlers/UsePlatformHandler.cs
similarity index 100%
rename from Modules/AntiCheat/RPCHandlers/UsePlatformHandler.cs
rename to src/Modules/AntiCheat/RPCHandlers/UsePlatformHandler.cs
diff --git a/Modules/AntiCheat/RPCHandlers/UseZiplineHandler.cs b/src/Modules/AntiCheat/RPCHandlers/UseZiplineHandler.cs
similarity index 100%
rename from Modules/AntiCheat/RPCHandlers/UseZiplineHandler.cs
rename to src/Modules/AntiCheat/RPCHandlers/UseZiplineHandler.cs
diff --git a/Modules/AntiCheat/RPCHandlers/VotingCompleteHandler.cs b/src/Modules/AntiCheat/RPCHandlers/VotingCompleteHandler.cs
similarity index 100%
rename from Modules/AntiCheat/RPCHandlers/VotingCompleteHandler.cs
rename to src/Modules/AntiCheat/RPCHandlers/VotingCompleteHandler.cs
diff --git a/Modules/ClientOptionItem.cs b/src/Modules/ClientOptionItem.cs
similarity index 99%
rename from Modules/ClientOptionItem.cs
rename to src/Modules/ClientOptionItem.cs
index 8d5b043..1aec08e 100644
--- a/Modules/ClientOptionItem.cs
+++ b/src/Modules/ClientOptionItem.cs
@@ -16,8 +16,8 @@ internal class ClientOptionItem
string name,
ConfigEntry config,
OptionsMenuBehaviour optionsMenuBehaviour,
- Action additionalOnClickAction = null,
- Func toggleCheck = null,
+ Action additionalOnClickAction = null,
+ Func toggleCheck = null,
bool IsToggle = true)
{
try
@@ -82,43 +82,43 @@ internal class ClientOptionItem
// ボタン生成
ToggleButton = Object.Instantiate(mouseMoveToggle, CustomBackground.transform);
- ToggleButton.transform.localPosition = new Vector3(
- // 現在のオプション数を基に位置を計算
+ ToggleButton.transform.localPosition = new Vector3(
+ // 現在のオプション数を基に位置を計算
numOptions % 2 == 0 ? -1.3f : 1.3f,
2.2f - 0.5f * (numOptions / 2),
-6f);
ToggleButton.name = name;
- ToggleButton.Text.text = name;
- ToggleButton.Text.text += Config != null && Config.Value ? ": On" : ": Off";
+ ToggleButton.Text.text = name;
+ ToggleButton.Text.text += Config != null && Config.Value ? ": On" : ": Off";
var passiveButton = ToggleButton.GetComponent();
- passiveButton.OnClick = new();
-
- if (IsToggle == false)
- {
- ToggleButton.Text.text = name;
- ToggleButton.Rollover?.ChangeOutColor(new(0, 150, 0, byte.MaxValue));
- ToggleButton.Text.color = new(1f, 1f, 1f, 1f);
-
- passiveButton.OnClick.AddListener(new Action(() =>
- {
- if (toggleCheck() == false)
- {
- return;
- }
-
- additionalOnClickAction?.Invoke();
- }));
-
- return;
- }
+ passiveButton.OnClick = new();
+
+ if (IsToggle == false)
+ {
+ ToggleButton.Text.text = name;
+ ToggleButton.Rollover?.ChangeOutColor(new(0, 150, 0, byte.MaxValue));
+ ToggleButton.Text.color = new(1f, 1f, 1f, 1f);
+
+ passiveButton.OnClick.AddListener(new Action(() =>
+ {
+ if (toggleCheck() == false)
+ {
+ return;
+ }
+
+ additionalOnClickAction?.Invoke();
+ }));
+
+ return;
+ }
passiveButton.OnClick.AddListener(new Action(() =>
- {
- if (toggleCheck() == false)
- {
- return;
- }
+ {
+ if (toggleCheck() == false)
+ {
+ return;
+ }
if (config != null) config.Value = !config.Value;
UpdateToggle();
@@ -127,31 +127,31 @@ internal class ClientOptionItem
UpdateToggle();
}
finally { numOptions++; }
- }
-
- internal static ClientOptionItem Create(
- string name,
- ConfigEntry config,
- OptionsMenuBehaviour optionsMenuBehaviour,
- Action additionalOnClickAction = null,
- Func toggleCheck = null,
- bool IsToggle = true)
- {
- toggleCheck ??= () => true;
-
- return new ClientOptionItem(name, config, optionsMenuBehaviour, additionalOnClickAction, toggleCheck, IsToggle);
+ }
+
+ internal static ClientOptionItem Create(
+ string name,
+ ConfigEntry config,
+ OptionsMenuBehaviour optionsMenuBehaviour,
+ Action additionalOnClickAction = null,
+ Func toggleCheck = null,
+ bool IsToggle = true)
+ {
+ toggleCheck ??= () => true;
+
+ return new ClientOptionItem(name, config, optionsMenuBehaviour, additionalOnClickAction, toggleCheck, IsToggle);
}
internal void UpdateToggle()
{
- if (ToggleButton == null) return;
+ if (ToggleButton == null) return;
- var color = Config != null && Config.Value ? new Color32(0, 150, 0, byte.MaxValue) : new Color32(77, 77, 77, byte.MaxValue);
+ var color = Config != null && Config.Value ? new Color32(0, 150, 0, byte.MaxValue) : new Color32(77, 77, 77, byte.MaxValue);
var textColor = Config != null && Config.Value ? new Color(1f, 1f, 1f, 1f) : new Color(1f, 1f, 1f, 0.5f);
ToggleButton.Background.color = color;
- ToggleButton.Rollover?.ChangeOutColor(color);
- ToggleButton.Text.color = textColor;
- ToggleButton.Text.text = ToggleButton.name;
+ ToggleButton.Rollover?.ChangeOutColor(color);
+ ToggleButton.Text.color = textColor;
+ ToggleButton.Text.text = ToggleButton.name;
ToggleButton.Text.text += Config != null && Config.Value ? ": On" : ": Off";
}
}
\ No newline at end of file
diff --git a/Modules/Encryptor.cs b/src/Modules/Encryptor.cs
similarity index 97%
rename from Modules/Encryptor.cs
rename to src/Modules/Encryptor.cs
index eee854d..f6fbe1a 100644
--- a/Modules/Encryptor.cs
+++ b/src/Modules/Encryptor.cs
@@ -1,39 +1,39 @@
-using System.Security.Cryptography;
-using System.Text;
-
-namespace BetterAmongUs.Modules;
-
-class Encryptor
-{
- private static readonly byte[] Key = Encoding.UTF8.GetBytes("0123456789ABCDEF0123456789ABCDEF");
- private static readonly byte[] IV = Encoding.UTF8.GetBytes("ABCDEF0123456789");
-
- internal static string Encrypt(string input)
- {
- using (Aes aes = Aes.Create())
- {
- aes.Key = Key;
- aes.IV = IV;
-
- using MemoryStream memoryStream = new();
- using CryptoStream cryptoStream = new(memoryStream, aes.CreateEncryptor(), CryptoStreamMode.Write);
- using (StreamWriter streamWriter = new(cryptoStream))
- {
- streamWriter.Write(input);
- }
- return Convert.ToBase64String(memoryStream.ToArray());
- }
- }
-
- internal static string Decrypt(string input)
- {
- using Aes aes = Aes.Create();
- aes.Key = Key;
- aes.IV = IV;
-
- using MemoryStream memoryStream = new(Convert.FromBase64String(input));
- using CryptoStream cryptoStream = new(memoryStream, aes.CreateDecryptor(), CryptoStreamMode.Read);
- using StreamReader streamReader = new(cryptoStream);
- return streamReader.ReadToEnd();
- }
-}
+using System.Security.Cryptography;
+using System.Text;
+
+namespace BetterAmongUs.Modules;
+
+class Encryptor
+{
+ private static readonly byte[] Key = Encoding.UTF8.GetBytes("0123456789ABCDEF0123456789ABCDEF");
+ private static readonly byte[] IV = Encoding.UTF8.GetBytes("ABCDEF0123456789");
+
+ internal static string Encrypt(string input)
+ {
+ using (Aes aes = Aes.Create())
+ {
+ aes.Key = Key;
+ aes.IV = IV;
+
+ using MemoryStream memoryStream = new();
+ using CryptoStream cryptoStream = new(memoryStream, aes.CreateEncryptor(), CryptoStreamMode.Write);
+ using (StreamWriter streamWriter = new(cryptoStream))
+ {
+ streamWriter.Write(input);
+ }
+ return Convert.ToBase64String(memoryStream.ToArray());
+ }
+ }
+
+ internal static string Decrypt(string input)
+ {
+ using Aes aes = Aes.Create();
+ aes.Key = Key;
+ aes.IV = IV;
+
+ using MemoryStream memoryStream = new(Convert.FromBase64String(input));
+ using CryptoStream cryptoStream = new(memoryStream, aes.CreateDecryptor(), CryptoStreamMode.Read);
+ using StreamReader streamReader = new(cryptoStream);
+ return streamReader.ReadToEnd();
+ }
+}
diff --git a/Modules/FileChecker.cs b/src/Modules/FileChecker.cs
similarity index 97%
rename from Modules/FileChecker.cs
rename to src/Modules/FileChecker.cs
index 94b5946..4b5dad8 100644
--- a/Modules/FileChecker.cs
+++ b/src/Modules/FileChecker.cs
@@ -1,161 +1,161 @@
-using System.Collections.ObjectModel;
-using System.Reflection;
-
-namespace BetterAmongUs.Modules;
-
-class FileChecker
-{
- private static bool enabled = false;
- private static FileSystemWatcher? fileWatcher;
- private static bool hasUnauthorizedFileOrMod = false;
- internal static string WarningMsg { get; private set; } = string.Empty;
- internal static bool HasShownWarning { get; set; } = false;
- internal static bool HasUnauthorizedFileOrMod => hasUnauthorizedFileOrMod && (!BAUPlugin.MyData.IsDev() || !BAUPlugin.MyData.IsVerified());
-
- private static readonly ReadOnlyCollection TrustedNamespaces = new(new List
- {
- "System", "Unity", "Harmony", "BepInEx", "Microsoft", "Il2Cpp", "Hazel", "AppleAuth", "QRCoder",
- "MonoMod", "netstandard", "mscorlib", "AssetRipper", "Cpp2IL", "AsmResolver", "Iced", "CsvHelper",
- "SemanticVersioning", "Mono.Cecil", "Assembly-CSharp", "StableNameDotNet", "AmongUsCaching",
- "Disarm", "Gee.External.Capstone", "Rewired_Core", "AddressablesPlayAssetDelivery", "Newtonsoft.Json", "Purchasing.Common",
- "Assembly-CSharp-firstpass", "Sentry", "Rewired_Windows", "__Generated", "XGamingRuntime",
- "BetterAmongUs", "MCI", "CrowdedMod", "Mini.RegionInstall", "Unlock", "Skin"
- });
-
- private static readonly ReadOnlyCollection UntrustedNamespaces = new(new List
- {
- "Sicko", "AmongUsMenu", "Malum", "GoatNetClient", "SM", "AUM", "GNC", "MM", "Cheat", "Menu", "Hack", "Exploit", "Bypass", "Crack", "Spoof"
- });
-
- private static readonly string[] TrustedPaths =
- {
- Environment.CurrentDirectory,
- Path.Combine(Environment.CurrentDirectory, "BepInEx"),
- };
-
- private static readonly string[] UnauthorizedFiles = [
- "version.dll",
- "sicko-settings.json",
- "sicko-log.txt",
- "sicko-prev-log.txt",
- "sicko-config",
- "settings.json",
- "aum-log.txt",
- "aum-prev-log.txt"
- ];
-
- internal static void Initialize()
- {
-#if DEBUG
- return;
-#endif
- if (enabled) return;
- enabled = true;
-
- AppDomain.CurrentDomain.AssemblyLoad += (sender, args) =>
- {
- CheckUnauthorizedAssemblies();
- CheckUnauthorizedFiles();
- };
-
- fileWatcher = new FileSystemWatcher(Environment.CurrentDirectory)
- {
- NotifyFilter = NotifyFilters.FileName | NotifyFilters.LastWrite | NotifyFilters.DirectoryName,
- IncludeSubdirectories = true
- };
-
- fileWatcher.Created += (sender, args) => CheckUnauthorizedFiles();
- fileWatcher.Deleted += (sender, args) => CheckUnauthorizedFiles();
-
- fileWatcher.EnableRaisingEvents = true;
-
- CheckUnauthorizedFiles();
- CheckUnauthorizedAssemblies();
- }
-
- private static void CheckUnauthorizedFiles()
- {
- if (hasUnauthorizedFileOrMod) return;
-
- foreach (var fileName in UnauthorizedFiles)
- {
- if (File.Exists(Path.Combine(Environment.CurrentDirectory, fileName)))
- {
- WarningMsg = "<#D20200>Unauthorized File Detected\n<#9D9D9D>Look in logs for further information!";
- Logger.Warning($"Unauthorized File: {Path.Combine(Environment.CurrentDirectory, fileName)}");
- if (GameState.IsInGame)
- {
- SceneChanger.ChangeScene("MainMenu");
- }
- hasUnauthorizedFileOrMod = true;
- return;
- }
- }
- }
-
- private static readonly HashSet _processedAssemblies = [];
-
- private static void CheckUnauthorizedAssemblies()
- {
- foreach (var assembly in AppDomain.CurrentDomain.GetAssemblies())
- {
- if (_processedAssemblies.Contains(assembly) || assembly.IsDynamic)
- {
- continue;
- }
- _processedAssemblies.Add(assembly);
-
- if (UntrustedNamespaces.Any(ns => assembly.FullName.Contains(ns, StringComparison.OrdinalIgnoreCase)))
- {
- if (TrustedNamespaces.Any(ns => assembly.FullName.Contains(ns, StringComparison.OrdinalIgnoreCase)))
- {
- continue;
- }
-
- WarningMsg = "<#D20200>Untrusted Assembly Detected\n<#9D9D9D>Look in logs for further information!";
- Logger.Warning($"Unauthorized Assembly: {assembly.FullName} (Untrusted Namespace)");
- hasUnauthorizedFileOrMod = true;
- continue;
- }
-
- if (!TrustedNamespaces.Any(ns => assembly.FullName.Contains(ns, StringComparison.OrdinalIgnoreCase)))
- {
- WarningMsg = "<#D20200>Unregistered Assembly Detected\n<#9D9D9D>Look in logs for further information!";
- Logger.Warning($"Unauthorized Assembly: {assembly.FullName} (Unregistered Namespace)");
- hasUnauthorizedFileOrMod = true;
- continue;
- }
-
- if (!IsSafeLocation(assembly))
- {
- WarningMsg = "<#D20200>Unregistered Assembly Location Detected\n<#9D9D9D>Look in logs for further information!";
- Logger.Warning($"Unauthorized Assembly: {assembly.FullName} (Unregistered Location: {assembly.Location})");
- hasUnauthorizedFileOrMod = true;
- continue;
- }
- }
- }
-
- internal static void SetHasUnauthorizedFileOrMod()
- {
- hasUnauthorizedFileOrMod = true;
- }
-
- internal static void SetWarningMsg(string msg)
- {
- if (string.IsNullOrEmpty(WarningMsg))
- {
- WarningMsg = msg;
- }
- }
-
- private static bool IsSafeLocation(Assembly assembly)
- {
- if (string.IsNullOrEmpty(assembly.Location))
- {
- return true;
- }
-
- return TrustedPaths.Any(path => assembly.Location.StartsWith(path, StringComparison.OrdinalIgnoreCase));
- }
-}
+using System.Collections.ObjectModel;
+using System.Reflection;
+
+namespace BetterAmongUs.Modules;
+
+class FileChecker
+{
+ private static bool enabled = false;
+ private static FileSystemWatcher? fileWatcher;
+ private static bool hasUnauthorizedFileOrMod = false;
+ internal static string WarningMsg { get; private set; } = string.Empty;
+ internal static bool HasShownWarning { get; set; } = false;
+ internal static bool HasUnauthorizedFileOrMod => hasUnauthorizedFileOrMod && (!BAUPlugin.MyData.IsDev() || !BAUPlugin.MyData.IsVerified());
+
+ private static readonly ReadOnlyCollection TrustedNamespaces = new(new List
+ {
+ "System", "Unity", "Harmony", "BepInEx", "Microsoft", "Il2Cpp", "Hazel", "AppleAuth", "QRCoder",
+ "MonoMod", "netstandard", "mscorlib", "AssetRipper", "Cpp2IL", "AsmResolver", "Iced", "CsvHelper",
+ "SemanticVersioning", "Mono.Cecil", "Assembly-CSharp", "StableNameDotNet", "AmongUsCaching",
+ "Disarm", "Gee.External.Capstone", "Rewired_Core", "AddressablesPlayAssetDelivery", "Newtonsoft.Json", "Purchasing.Common",
+ "Assembly-CSharp-firstpass", "Sentry", "Rewired_Windows", "__Generated", "XGamingRuntime",
+ "BetterAmongUs", "MCI", "CrowdedMod", "Mini.RegionInstall", "Unlock", "Skin"
+ });
+
+ private static readonly ReadOnlyCollection UntrustedNamespaces = new(new List
+ {
+ "Sicko", "AmongUsMenu", "Malum", "GoatNetClient", "SM", "AUM", "GNC", "MM", "Cheat", "Menu", "Hack", "Exploit", "Bypass", "Crack", "Spoof"
+ });
+
+ private static readonly string[] TrustedPaths =
+ {
+ Environment.CurrentDirectory,
+ Path.Combine(Environment.CurrentDirectory, "BepInEx"),
+ };
+
+ private static readonly string[] UnauthorizedFiles = [
+ "version.dll",
+ "sicko-settings.json",
+ "sicko-log.txt",
+ "sicko-prev-log.txt",
+ "sicko-config",
+ "settings.json",
+ "aum-log.txt",
+ "aum-prev-log.txt"
+ ];
+
+ internal static void Initialize()
+ {
+#if DEBUG
+ return;
+#endif
+ if (enabled) return;
+ enabled = true;
+
+ AppDomain.CurrentDomain.AssemblyLoad += (sender, args) =>
+ {
+ CheckUnauthorizedAssemblies();
+ CheckUnauthorizedFiles();
+ };
+
+ fileWatcher = new FileSystemWatcher(Environment.CurrentDirectory)
+ {
+ NotifyFilter = NotifyFilters.FileName | NotifyFilters.LastWrite | NotifyFilters.DirectoryName,
+ IncludeSubdirectories = true
+ };
+
+ fileWatcher.Created += (sender, args) => CheckUnauthorizedFiles();
+ fileWatcher.Deleted += (sender, args) => CheckUnauthorizedFiles();
+
+ fileWatcher.EnableRaisingEvents = true;
+
+ CheckUnauthorizedFiles();
+ CheckUnauthorizedAssemblies();
+ }
+
+ private static void CheckUnauthorizedFiles()
+ {
+ if (hasUnauthorizedFileOrMod) return;
+
+ foreach (var fileName in UnauthorizedFiles)
+ {
+ if (File.Exists(Path.Combine(Environment.CurrentDirectory, fileName)))
+ {
+ WarningMsg = "<#D20200>Unauthorized File Detected\n<#9D9D9D>Look in logs for further information!";
+ Logger.Warning($"Unauthorized File: {Path.Combine(Environment.CurrentDirectory, fileName)}");
+ if (GameState.IsInGame)
+ {
+ SceneChanger.ChangeScene("MainMenu");
+ }
+ hasUnauthorizedFileOrMod = true;
+ return;
+ }
+ }
+ }
+
+ private static readonly HashSet _processedAssemblies = [];
+
+ private static void CheckUnauthorizedAssemblies()
+ {
+ foreach (var assembly in AppDomain.CurrentDomain.GetAssemblies())
+ {
+ if (_processedAssemblies.Contains(assembly) || assembly.IsDynamic)
+ {
+ continue;
+ }
+ _processedAssemblies.Add(assembly);
+
+ if (UntrustedNamespaces.Any(ns => assembly.FullName.Contains(ns, StringComparison.OrdinalIgnoreCase)))
+ {
+ if (TrustedNamespaces.Any(ns => assembly.FullName.Contains(ns, StringComparison.OrdinalIgnoreCase)))
+ {
+ continue;
+ }
+
+ WarningMsg = "<#D20200>Untrusted Assembly Detected\n<#9D9D9D>Look in logs for further information!";
+ Logger.Warning($"Unauthorized Assembly: {assembly.FullName} (Untrusted Namespace)");
+ hasUnauthorizedFileOrMod = true;
+ continue;
+ }
+
+ if (!TrustedNamespaces.Any(ns => assembly.FullName.Contains(ns, StringComparison.OrdinalIgnoreCase)))
+ {
+ WarningMsg = "<#D20200>Unregistered Assembly Detected\n<#9D9D9D>Look in logs for further information!";
+ Logger.Warning($"Unauthorized Assembly: {assembly.FullName} (Unregistered Namespace)");
+ hasUnauthorizedFileOrMod = true;
+ continue;
+ }
+
+ if (!IsSafeLocation(assembly))
+ {
+ WarningMsg = "<#D20200>Unregistered Assembly Location Detected\n<#9D9D9D>Look in logs for further information!";
+ Logger.Warning($"Unauthorized Assembly: {assembly.FullName} (Unregistered Location: {assembly.Location})");
+ hasUnauthorizedFileOrMod = true;
+ continue;
+ }
+ }
+ }
+
+ internal static void SetHasUnauthorizedFileOrMod()
+ {
+ hasUnauthorizedFileOrMod = true;
+ }
+
+ internal static void SetWarningMsg(string msg)
+ {
+ if (string.IsNullOrEmpty(WarningMsg))
+ {
+ WarningMsg = msg;
+ }
+ }
+
+ private static bool IsSafeLocation(Assembly assembly)
+ {
+ if (string.IsNullOrEmpty(assembly.Location))
+ {
+ return true;
+ }
+
+ return TrustedPaths.Any(path => assembly.Location.StartsWith(path, StringComparison.OrdinalIgnoreCase));
+ }
+}
diff --git a/Modules/GameState.cs b/src/Modules/GameState.cs
similarity index 98%
rename from Modules/GameState.cs
rename to src/Modules/GameState.cs
index fecea9f..080048c 100644
--- a/Modules/GameState.cs
+++ b/src/Modules/GameState.cs
@@ -5,9 +5,9 @@ using BetterAmongUs.Mono;
namespace BetterAmongUs.Modules;
internal static class GameState
-{
- /**********Check Game Status***********/
- internal static bool IsDev => BAUPlugin.MyData.IsDev();
+{
+ /**********Check Game Status***********/
+ internal static bool IsDev => BAUPlugin.MyData.IsDev();
internal static bool InGame => BAUPlugin.AllPlayerControls.Any();
internal static bool IsNormalGame => GameOptionsManager.Instance.CurrentGameOptions.GameMode is GameModes.Normal or GameModes.NormalFools;
internal static bool IsHideNSeek => GameOptionsManager.Instance != null && GameOptionsManager.Instance.CurrentGameOptions.GameMode is GameModes.HideNSeek or GameModes.SeekFools;
@@ -16,71 +16,71 @@ internal static class GameState
internal static bool PolusIsActive => (MapNames)GameOptionsManager.Instance.CurrentGameOptions.MapId == MapNames.Polus;
internal static bool DleksIsActive => (MapNames)GameOptionsManager.Instance.CurrentGameOptions.MapId == MapNames.Dleks;
internal static bool AirshipIsActive => (MapNames)GameOptionsManager.Instance.CurrentGameOptions.MapId == MapNames.Airship;
- internal static bool FungleIsActive => (MapNames)GameOptionsManager.Instance.CurrentGameOptions.MapId == MapNames.Fungle;
- internal static byte GetActiveMapId => GameOptionsManager.Instance.CurrentGameOptions.MapId;
- internal static bool IsSystemActive(SystemTypes type)
- {
- if (IsHideNSeek || !ShipStatus.Instance.Systems.TryGetValue(type, out var system))
- {
- return false;
- }
-
- int mapId = GetActiveMapId;
-
- return type switch
- {
- SystemTypes.Electrical when mapId != 5 => !system.Cast()?.IsActive == false,
- SystemTypes.Reactor when mapId != 2 => system.Cast()?.IsActive ?? false,
- SystemTypes.Laboratory when mapId == 2 => system.Cast()?.IsActive ?? false,
- SystemTypes.LifeSupp when mapId is 0 or 3 => system.Cast()?.IsActive ?? false,
- SystemTypes.HeliSabotage when mapId == 4 => system.Cast()?.IsActive ?? false,
- SystemTypes.Comms when mapId is 1 or 5 => system.Cast()?.IsActive ?? false,
- SystemTypes.Comms => system.Cast()?.IsActive ?? false,
- SystemTypes.MushroomMixupSabotage when mapId == 5 => system.Cast()?.IsActive ?? false,
- _ => false
- };
- }
- internal static bool IsCriticalSabotageActive()
- {
- var deathSabotages = new[]
- {
- SystemTypes.Reactor,
- SystemTypes.Laboratory,
- SystemTypes.LifeSupp,
- SystemTypes.HeliSabotage,
- };
-
- return deathSabotages.Any(IsSystemActive);
- }
- internal static bool IsNoneCriticalSabotageActive()
- {
- var noneDeathSabotages = new[]
- {
- SystemTypes.Electrical,
- SystemTypes.Comms,
- SystemTypes.MushroomMixupSabotage
- };
-
- return noneDeathSabotages.Any(IsSystemActive);
- }
- internal static bool IsAnySabotageActive()
- {
- var allSabotages = new[]
- {
- SystemTypes.Electrical,
- SystemTypes.Reactor,
- SystemTypes.Laboratory,
- SystemTypes.LifeSupp,
- SystemTypes.HeliSabotage,
- SystemTypes.Comms,
- SystemTypes.MushroomMixupSabotage
- };
-
- return allSabotages.Any(IsSystemActive);
- }
+ internal static bool FungleIsActive => (MapNames)GameOptionsManager.Instance.CurrentGameOptions.MapId == MapNames.Fungle;
+ internal static byte GetActiveMapId => GameOptionsManager.Instance.CurrentGameOptions.MapId;
+ internal static bool IsSystemActive(SystemTypes type)
+ {
+ if (IsHideNSeek || !ShipStatus.Instance.Systems.TryGetValue(type, out var system))
+ {
+ return false;
+ }
+
+ int mapId = GetActiveMapId;
+
+ return type switch
+ {
+ SystemTypes.Electrical when mapId != 5 => !system.Cast()?.IsActive == false,
+ SystemTypes.Reactor when mapId != 2 => system.Cast()?.IsActive ?? false,
+ SystemTypes.Laboratory when mapId == 2 => system.Cast()?.IsActive ?? false,
+ SystemTypes.LifeSupp when mapId is 0 or 3 => system.Cast()?.IsActive ?? false,
+ SystemTypes.HeliSabotage when mapId == 4 => system.Cast()?.IsActive ?? false,
+ SystemTypes.Comms when mapId is 1 or 5 => system.Cast()?.IsActive ?? false,
+ SystemTypes.Comms => system.Cast()?.IsActive ?? false,
+ SystemTypes.MushroomMixupSabotage when mapId == 5 => system.Cast()?.IsActive ?? false,
+ _ => false
+ };
+ }
+ internal static bool IsCriticalSabotageActive()
+ {
+ var deathSabotages = new[]
+ {
+ SystemTypes.Reactor,
+ SystemTypes.Laboratory,
+ SystemTypes.LifeSupp,
+ SystemTypes.HeliSabotage,
+ };
+
+ return deathSabotages.Any(IsSystemActive);
+ }
+ internal static bool IsNoneCriticalSabotageActive()
+ {
+ var noneDeathSabotages = new[]
+ {
+ SystemTypes.Electrical,
+ SystemTypes.Comms,
+ SystemTypes.MushroomMixupSabotage
+ };
+
+ return noneDeathSabotages.Any(IsSystemActive);
+ }
+ internal static bool IsAnySabotageActive()
+ {
+ var allSabotages = new[]
+ {
+ SystemTypes.Electrical,
+ SystemTypes.Reactor,
+ SystemTypes.Laboratory,
+ SystemTypes.LifeSupp,
+ SystemTypes.HeliSabotage,
+ SystemTypes.Comms,
+ SystemTypes.MushroomMixupSabotage
+ };
+
+ return allSabotages.Any(IsSystemActive);
+ }
internal static bool IsInGame => InGame;
- internal static bool IsLobby => AmongUsClient.Instance?.GameState == InnerNet.InnerNetClient.GameStates.Joined;
- internal static bool IsInIntro => IntroCutscene.Instance != null;
+ internal static bool IsLobby => AmongUsClient.Instance?.GameState == InnerNet.InnerNetClient.GameStates.Joined;
+ internal static bool IsInIntro => IntroCutscene.Instance != null;
internal static bool IsInGamePlay => InGame && IsShip && !IsLobby && !IsInIntro || IsFreePlay;
internal static bool IsEnded => AmongUsClient.Instance?.GameState == InnerNet.InnerNetClient.GameStates.Ended;
internal static bool IsNotJoined => AmongUsClient.Instance?.GameState == InnerNet.InnerNetClient.GameStates.NotJoined;
@@ -103,9 +103,9 @@ internal static class GameState
internal static bool IsProceeding => IsMeeting && MeetingHud.Instance?.state is MeetingHud.VoteStates.Proceeding;
internal static bool IsExilling => ExileController.Instance != null && !(AirshipIsActive && Minigame.Instance != null && Minigame.Instance.isActiveAndEnabled);
internal static bool IsCountDown => GameStartManager.InstanceExists && GameStartManager.Instance.startState == GameStartManager.StartingStates.Countdown;
- internal static bool IsShip => ShipStatus.Instance != null;
- internal static bool IsHost => AmongUsClient.Instance != null && AmongUsClient.Instance.AmHost;
- internal static bool IsPrivateOnlyLobby => (BAUPlugin.PrivateOnlyLobby.Value || AmongUsClient.Instance.AmLocalHost) && IsHost;
+ internal static bool IsShip => ShipStatus.Instance != null;
+ internal static bool IsHost => AmongUsClient.Instance != null && AmongUsClient.Instance.AmHost;
+ internal static bool IsPrivateOnlyLobby => (BAUPlugin.PrivateOnlyLobby.Value || AmongUsClient.Instance.AmLocalHost) && IsHost;
internal static bool IsBetterHostLobby => PlayerControl.LocalPlayer?.IsHost() == true || BAUPlugin.AllPlayerControls.Any(pc => pc?.BetterData() != null && pc.IsHost() && pc.BetterData().IsBetterUser && pc.BetterData().IsVerifiedBetterUser);
internal static bool IsCanMove => PlayerControl.LocalPlayer?.CanMove is true;
internal static bool IsDead => PlayerControl.LocalPlayer?.Data?.IsDead is true;
diff --git a/Modules/HandshakeHandler.cs b/src/Modules/HandshakeHandler.cs
similarity index 100%
rename from Modules/HandshakeHandler.cs
rename to src/Modules/HandshakeHandler.cs
diff --git a/Modules/MonoExtension.cs b/src/Modules/MonoExtension.cs
similarity index 100%
rename from Modules/MonoExtension.cs
rename to src/Modules/MonoExtension.cs
diff --git a/Modules/TextFileHandler.cs b/src/Modules/TextFileHandler.cs
similarity index 100%
rename from Modules/TextFileHandler.cs
rename to src/Modules/TextFileHandler.cs
diff --git a/Modules/Translator.cs b/src/Modules/Translator.cs
similarity index 100%
rename from Modules/Translator.cs
rename to src/Modules/Translator.cs
diff --git a/Mono/BetterPingTracker.cs b/src/Mono/BetterPingTracker.cs
similarity index 100%
rename from Mono/BetterPingTracker.cs
rename to src/Mono/BetterPingTracker.cs
diff --git a/Mono/ExtendedPlayerControl.cs b/src/Mono/ExtendedPlayerControl.cs
similarity index 100%
rename from Mono/ExtendedPlayerControl.cs
rename to src/Mono/ExtendedPlayerControl.cs
diff --git a/Mono/ExtendedPlayerInfo.cs b/src/Mono/ExtendedPlayerInfo.cs
similarity index 100%
rename from Mono/ExtendedPlayerInfo.cs
rename to src/Mono/ExtendedPlayerInfo.cs
diff --git a/Mono/MeetingInfoDisplay.cs b/src/Mono/MeetingInfoDisplay.cs
similarity index 100%
rename from Mono/MeetingInfoDisplay.cs
rename to src/Mono/MeetingInfoDisplay.cs
diff --git a/Mono/PlayerInfoDisplay.cs b/src/Mono/PlayerInfoDisplay.cs
similarity index 100%
rename from Mono/PlayerInfoDisplay.cs
rename to src/Mono/PlayerInfoDisplay.cs
diff --git a/Network/Configs/BannedUserData.cs b/src/Network/Configs/BannedUserData.cs
similarity index 100%
rename from Network/Configs/BannedUserData.cs
rename to src/Network/Configs/BannedUserData.cs
diff --git a/Network/Configs/NewsData.cs b/src/Network/Configs/NewsData.cs
similarity index 100%
rename from Network/Configs/NewsData.cs
rename to src/Network/Configs/NewsData.cs
diff --git a/Network/Configs/UpdateData.cs b/src/Network/Configs/UpdateData.cs
similarity index 100%
rename from Network/Configs/UpdateData.cs
rename to src/Network/Configs/UpdateData.cs
diff --git a/Network/Configs/UserData.cs b/src/Network/Configs/UserData.cs
similarity index 100%
rename from Network/Configs/UserData.cs
rename to src/Network/Configs/UserData.cs
diff --git a/Network/GitHubFile.cs b/src/Network/GitHubFile.cs
similarity index 100%
rename from Network/GitHubFile.cs
rename to src/Network/GitHubFile.cs
diff --git a/Network/GitPath.cs b/src/Network/GitPath.cs
similarity index 100%
rename from Network/GitPath.cs
rename to src/Network/GitPath.cs
diff --git a/Network/GithubAPI.cs b/src/Network/GithubAPI.cs
similarity index 100%
rename from Network/GithubAPI.cs
rename to src/Network/GithubAPI.cs
diff --git a/Network/Loaders/NewsLoader.cs b/src/Network/Loaders/NewsLoader.cs
similarity index 100%
rename from Network/Loaders/NewsLoader.cs
rename to src/Network/Loaders/NewsLoader.cs
diff --git a/Network/Loaders/UpdateLoader.cs b/src/Network/Loaders/UpdateLoader.cs
similarity index 100%
rename from Network/Loaders/UpdateLoader.cs
rename to src/Network/Loaders/UpdateLoader.cs
diff --git a/Network/RPC.cs b/src/Network/RPC.cs
similarity index 100%
rename from Network/RPC.cs
rename to src/Network/RPC.cs
diff --git a/Patches/Client/AnnouncementPanelPatch.cs b/src/Patches/Client/AnnouncementPanelPatch.cs
similarity index 100%
rename from Patches/Client/AnnouncementPanelPatch.cs
rename to src/Patches/Client/AnnouncementPanelPatch.cs
diff --git a/Patches/Client/ClientOptionsPatch.cs b/src/Patches/Client/ClientOptionsPatch.cs
similarity index 100%
rename from Patches/Client/ClientOptionsPatch.cs
rename to src/Patches/Client/ClientOptionsPatch.cs
diff --git a/Patches/Client/ClientPatch.cs b/src/Patches/Client/ClientPatch.cs
similarity index 100%
rename from Patches/Client/ClientPatch.cs
rename to src/Patches/Client/ClientPatch.cs
diff --git a/Patches/Client/DisconnectPenaltyPatch.cs b/src/Patches/Client/DisconnectPenaltyPatch.cs
similarity index 100%
rename from Patches/Client/DisconnectPenaltyPatch.cs
rename to src/Patches/Client/DisconnectPenaltyPatch.cs
diff --git a/Patches/Client/DiscordPatch.cs b/src/Patches/Client/DiscordPatch.cs
similarity index 100%
rename from Patches/Client/DiscordPatch.cs
rename to src/Patches/Client/DiscordPatch.cs
diff --git a/Patches/Client/HttpPatch.cs b/src/Patches/Client/HttpPatch.cs
similarity index 100%
rename from Patches/Client/HttpPatch.cs
rename to src/Patches/Client/HttpPatch.cs
diff --git a/Patches/Client/MainMenuPatch.cs b/src/Patches/Client/MainMenuPatch.cs
similarity index 100%
rename from Patches/Client/MainMenuPatch.cs
rename to src/Patches/Client/MainMenuPatch.cs
diff --git a/Patches/Client/PrivateLobbyPatch.cs b/src/Patches/Client/PrivateLobbyPatch.cs
similarity index 100%
rename from Patches/Client/PrivateLobbyPatch.cs
rename to src/Patches/Client/PrivateLobbyPatch.cs
diff --git a/Patches/Client/SplashIntroPatch.cs b/src/Patches/Client/SplashIntroPatch.cs
similarity index 100%
rename from Patches/Client/SplashIntroPatch.cs
rename to src/Patches/Client/SplashIntroPatch.cs
diff --git a/Patches/Client/StandaloneSteamPatch.cs b/src/Patches/Client/StandaloneSteamPatch.cs
similarity index 100%
rename from Patches/Client/StandaloneSteamPatch.cs
rename to src/Patches/Client/StandaloneSteamPatch.cs
diff --git a/Patches/Client/VersionShowerPatch.cs b/src/Patches/Client/VersionShowerPatch.cs
similarity index 100%
rename from Patches/Client/VersionShowerPatch.cs
rename to src/Patches/Client/VersionShowerPatch.cs
diff --git a/Patches/Gameplay/GameManagersPatch.cs b/src/Patches/Gameplay/GameManagersPatch.cs
similarity index 100%
rename from Patches/Gameplay/GameManagersPatch.cs
rename to src/Patches/Gameplay/GameManagersPatch.cs
diff --git a/Patches/Gameplay/LobbyPatch.cs b/src/Patches/Gameplay/LobbyPatch.cs
similarity index 100%
rename from Patches/Gameplay/LobbyPatch.cs
rename to src/Patches/Gameplay/LobbyPatch.cs
diff --git a/Patches/Gameplay/Player/CosmeticsLayerPatch.cs b/src/Patches/Gameplay/Player/CosmeticsLayerPatch.cs
similarity index 100%
rename from Patches/Gameplay/Player/CosmeticsLayerPatch.cs
rename to src/Patches/Gameplay/Player/CosmeticsLayerPatch.cs
diff --git a/Patches/Gameplay/Player/PlayerControlPatch.cs b/src/Patches/Gameplay/Player/PlayerControlPatch.cs
similarity index 100%
rename from Patches/Gameplay/Player/PlayerControlPatch.cs
rename to src/Patches/Gameplay/Player/PlayerControlPatch.cs
diff --git a/Patches/Gameplay/Player/PlayerJoinAndLeftPatch.cs b/src/Patches/Gameplay/Player/PlayerJoinAndLeftPatch.cs
similarity index 100%
rename from Patches/Gameplay/Player/PlayerJoinAndLeftPatch.cs
rename to src/Patches/Gameplay/Player/PlayerJoinAndLeftPatch.cs
diff --git a/Patches/Gameplay/RolePatch.cs b/src/Patches/Gameplay/RolePatch.cs
similarity index 100%
rename from Patches/Gameplay/RolePatch.cs
rename to src/Patches/Gameplay/RolePatch.cs
diff --git a/Patches/Gameplay/Systems/VoteBanSystemPatch.cs b/src/Patches/Gameplay/Systems/VoteBanSystemPatch.cs
similarity index 100%
rename from Patches/Gameplay/Systems/VoteBanSystemPatch.cs
rename to src/Patches/Gameplay/Systems/VoteBanSystemPatch.cs
diff --git a/Patches/Gameplay/UI/Chat/ChatCommandsPatch.cs b/src/Patches/Gameplay/UI/Chat/ChatCommandsPatch.cs
similarity index 100%
rename from Patches/Gameplay/UI/Chat/ChatCommandsPatch.cs
rename to src/Patches/Gameplay/UI/Chat/ChatCommandsPatch.cs
diff --git a/Patches/Gameplay/UI/Chat/ChatNotificationPatch.cs b/src/Patches/Gameplay/UI/Chat/ChatNotificationPatch.cs
similarity index 100%
rename from Patches/Gameplay/UI/Chat/ChatNotificationPatch.cs
rename to src/Patches/Gameplay/UI/Chat/ChatNotificationPatch.cs
diff --git a/Patches/Gameplay/UI/Chat/ChatPatch.cs b/src/Patches/Gameplay/UI/Chat/ChatPatch.cs
similarity index 100%
rename from Patches/Gameplay/UI/Chat/ChatPatch.cs
rename to src/Patches/Gameplay/UI/Chat/ChatPatch.cs
diff --git a/Patches/Gameplay/UI/Chat/QuickChatPatch.cs b/src/Patches/Gameplay/UI/Chat/QuickChatPatch.cs
similarity index 100%
rename from Patches/Gameplay/UI/Chat/QuickChatPatch.cs
rename to src/Patches/Gameplay/UI/Chat/QuickChatPatch.cs
diff --git a/Patches/Gameplay/UI/IntroCutscenePatch.cs b/src/Patches/Gameplay/UI/IntroCutscenePatch.cs
similarity index 100%
rename from Patches/Gameplay/UI/IntroCutscenePatch.cs
rename to src/Patches/Gameplay/UI/IntroCutscenePatch.cs
diff --git a/Patches/Gameplay/UI/KillOverlayPatch.cs b/src/Patches/Gameplay/UI/KillOverlayPatch.cs
similarity index 100%
rename from Patches/Gameplay/UI/KillOverlayPatch.cs
rename to src/Patches/Gameplay/UI/KillOverlayPatch.cs
diff --git a/Patches/Gameplay/UI/MeetingHudPatch.cs b/src/Patches/Gameplay/UI/MeetingHudPatch.cs
similarity index 100%
rename from Patches/Gameplay/UI/MeetingHudPatch.cs
rename to src/Patches/Gameplay/UI/MeetingHudPatch.cs
diff --git a/Patches/Gameplay/UI/MiniMapBehaviourPatch.cs b/src/Patches/Gameplay/UI/MiniMapBehaviourPatch.cs
similarity index 100%
rename from Patches/Gameplay/UI/MiniMapBehaviourPatch.cs
rename to src/Patches/Gameplay/UI/MiniMapBehaviourPatch.cs
diff --git a/Patches/Gameplay/UI/PingTrackerPatch.cs b/src/Patches/Gameplay/UI/PingTrackerPatch.cs
similarity index 100%
rename from Patches/Gameplay/UI/PingTrackerPatch.cs
rename to src/Patches/Gameplay/UI/PingTrackerPatch.cs
diff --git a/Patches/Gameplay/UI/PlayerTabPatch.cs b/src/Patches/Gameplay/UI/PlayerTabPatch.cs
similarity index 100%
rename from Patches/Gameplay/UI/PlayerTabPatch.cs
rename to src/Patches/Gameplay/UI/PlayerTabPatch.cs
diff --git a/Patches/Gameplay/UI/RegionMenuPatch.cs b/src/Patches/Gameplay/UI/RegionMenuPatch.cs
similarity index 100%
rename from Patches/Gameplay/UI/RegionMenuPatch.cs
rename to src/Patches/Gameplay/UI/RegionMenuPatch.cs
diff --git a/Patches/Gameplay/UI/ReportReasonScreenPatch.cs b/src/Patches/Gameplay/UI/ReportReasonScreenPatch.cs
similarity index 100%
rename from Patches/Gameplay/UI/ReportReasonScreenPatch.cs
rename to src/Patches/Gameplay/UI/ReportReasonScreenPatch.cs
diff --git a/Patches/Gameplay/UI/RoomTrackerPatch.cs b/src/Patches/Gameplay/UI/RoomTrackerPatch.cs
similarity index 100%
rename from Patches/Gameplay/UI/RoomTrackerPatch.cs
rename to src/Patches/Gameplay/UI/RoomTrackerPatch.cs
diff --git a/Patches/Gameplay/UI/ServerDropdownPatch.cs b/src/Patches/Gameplay/UI/ServerDropdownPatch.cs
similarity index 100%
rename from Patches/Gameplay/UI/ServerDropdownPatch.cs
rename to src/Patches/Gameplay/UI/ServerDropdownPatch.cs
diff --git a/Patches/Gameplay/UI/Settings/GameSettingMenuPatch.cs b/src/Patches/Gameplay/UI/Settings/GameSettingMenuPatch.cs
similarity index 100%
rename from Patches/Gameplay/UI/Settings/GameSettingMenuPatch.cs
rename to src/Patches/Gameplay/UI/Settings/GameSettingMenuPatch.cs
diff --git a/Patches/Gameplay/UI/Settings/NumberOptionPatch.cs b/src/Patches/Gameplay/UI/Settings/NumberOptionPatch.cs
similarity index 100%
rename from Patches/Gameplay/UI/Settings/NumberOptionPatch.cs
rename to src/Patches/Gameplay/UI/Settings/NumberOptionPatch.cs
diff --git a/Patches/Gameplay/ZoomPatch.cs b/src/Patches/Gameplay/ZoomPatch.cs
similarity index 100%
rename from Patches/Gameplay/ZoomPatch.cs
rename to src/Patches/Gameplay/ZoomPatch.cs
diff --git a/Patches/Managers/FindAGameManagerClass/FindAGameManagerPatch.cs b/src/Patches/Managers/FindAGameManagerClass/FindAGameManagerPatch.cs
similarity index 100%
rename from Patches/Managers/FindAGameManagerClass/FindAGameManagerPatch.cs
rename to src/Patches/Managers/FindAGameManagerClass/FindAGameManagerPatch.cs
diff --git a/Patches/Managers/FindAGameManagerClass/FindGameMoreInfoPopupPatch.cs b/src/Patches/Managers/FindAGameManagerClass/FindGameMoreInfoPopupPatch.cs
similarity index 100%
rename from Patches/Managers/FindAGameManagerClass/FindGameMoreInfoPopupPatch.cs
rename to src/Patches/Managers/FindAGameManagerClass/FindGameMoreInfoPopupPatch.cs
diff --git a/Patches/Managers/HudManagerPatch.cs b/src/Patches/Managers/HudManagerPatch.cs
similarity index 100%
rename from Patches/Managers/HudManagerPatch.cs
rename to src/Patches/Managers/HudManagerPatch.cs
diff --git a/Patches/Managers/LoadingBarManagerPatch.cs b/src/Patches/Managers/LoadingBarManagerPatch.cs
similarity index 100%
rename from Patches/Managers/LoadingBarManagerPatch.cs
rename to src/Patches/Managers/LoadingBarManagerPatch.cs
diff --git a/Patches/Managers/ModManagerPatch.cs b/src/Patches/Managers/ModManagerPatch.cs
similarity index 100%
rename from Patches/Managers/ModManagerPatch.cs
rename to src/Patches/Managers/ModManagerPatch.cs
diff --git a/Patches/Managers/RoleManagerPatch.cs b/src/Patches/Managers/RoleManagerPatch.cs
similarity index 100%
rename from Patches/Managers/RoleManagerPatch.cs
rename to src/Patches/Managers/RoleManagerPatch.cs
diff --git a/Resources/Images/BetterAmongUs-Icon.png b/src/Resources/Images/BetterAmongUs-Icon.png
similarity index 100%
rename from Resources/Images/BetterAmongUs-Icon.png
rename to src/Resources/Images/BetterAmongUs-Icon.png
diff --git a/Resources/Images/BetterAmongUs-Logo.png b/src/Resources/Images/BetterAmongUs-Logo.png
similarity index 100%
rename from Resources/Images/BetterAmongUs-Logo.png
rename to src/Resources/Images/BetterAmongUs-Logo.png
diff --git a/Resources/Images/BetterAmongUs-Mod.png b/src/Resources/Images/BetterAmongUs-Mod.png
similarity index 100%
rename from Resources/Images/BetterAmongUs-Mod.png
rename to src/Resources/Images/BetterAmongUs-Mod.png
diff --git a/Resources/Images/QuestionMark.png b/src/Resources/Images/QuestionMark.png
similarity index 100%
rename from Resources/Images/QuestionMark.png
rename to src/Resources/Images/QuestionMark.png
diff --git a/Resources/Lang/de_DE.json b/src/Resources/Lang/de_DE.json
similarity index 100%
rename from Resources/Lang/de_DE.json
rename to src/Resources/Lang/de_DE.json
diff --git a/Resources/Lang/en_US.json b/src/Resources/Lang/en_US.json
similarity index 100%
rename from Resources/Lang/en_US.json
rename to src/Resources/Lang/en_US.json
diff --git a/Resources/Lang/es_419.json b/src/Resources/Lang/es_419.json
similarity index 100%
rename from Resources/Lang/es_419.json
rename to src/Resources/Lang/es_419.json
diff --git a/Resources/Lang/es_ES.json b/src/Resources/Lang/es_ES.json
similarity index 100%
rename from Resources/Lang/es_ES.json
rename to src/Resources/Lang/es_ES.json
diff --git a/Resources/Lang/fil_PH.json b/src/Resources/Lang/fil_PH.json
similarity index 100%
rename from Resources/Lang/fil_PH.json
rename to src/Resources/Lang/fil_PH.json
diff --git a/Resources/Lang/fr_FR.json b/src/Resources/Lang/fr_FR.json
similarity index 100%
rename from Resources/Lang/fr_FR.json
rename to src/Resources/Lang/fr_FR.json
diff --git a/Resources/Lang/ga_IE.json b/src/Resources/Lang/ga_IE.json
similarity index 100%
rename from Resources/Lang/ga_IE.json
rename to src/Resources/Lang/ga_IE.json
diff --git a/Resources/Lang/it_IT.json b/src/Resources/Lang/it_IT.json
similarity index 100%
rename from Resources/Lang/it_IT.json
rename to src/Resources/Lang/it_IT.json
diff --git a/Resources/Lang/ja_JP.json b/src/Resources/Lang/ja_JP.json
similarity index 100%
rename from Resources/Lang/ja_JP.json
rename to src/Resources/Lang/ja_JP.json
diff --git a/Resources/Lang/ko_KR.json b/src/Resources/Lang/ko_KR.json
similarity index 100%
rename from Resources/Lang/ko_KR.json
rename to src/Resources/Lang/ko_KR.json
diff --git a/Resources/Lang/nl_NL.json b/src/Resources/Lang/nl_NL.json
similarity index 100%
rename from Resources/Lang/nl_NL.json
rename to src/Resources/Lang/nl_NL.json
diff --git a/Resources/Lang/pt_BR.json b/src/Resources/Lang/pt_BR.json
similarity index 100%
rename from Resources/Lang/pt_BR.json
rename to src/Resources/Lang/pt_BR.json
diff --git a/Resources/Lang/pt_PT.json b/src/Resources/Lang/pt_PT.json
similarity index 100%
rename from Resources/Lang/pt_PT.json
rename to src/Resources/Lang/pt_PT.json
diff --git a/Resources/Lang/ru_RU.json b/src/Resources/Lang/ru_RU.json
similarity index 100%
rename from Resources/Lang/ru_RU.json
rename to src/Resources/Lang/ru_RU.json
diff --git a/Resources/Lang/zh_CN.json b/src/Resources/Lang/zh_CN.json
similarity index 100%
rename from Resources/Lang/zh_CN.json
rename to src/Resources/Lang/zh_CN.json
diff --git a/Resources/Lang/zh_TW.json b/src/Resources/Lang/zh_TW.json
similarity index 100%
rename from Resources/Lang/zh_TW.json
rename to src/Resources/Lang/zh_TW.json
diff --git a/Resources/NewsTest b/src/Resources/NewsTest
similarity index 100%
rename from Resources/NewsTest
rename to src/Resources/NewsTest
diff --git a/src/build/mod_folder_path b/src/build/mod_folder_path
new file mode 100644
index 0000000..40d933e
--- /dev/null
+++ b/src/build/mod_folder_path
@@ -0,0 +1 @@
+C:\Program Files (x86)\Steam\steamapps\common\Among Us\Among Us - Mods\Among Us - BetterAmongUs\BepInEx\plugins
\ No newline at end of file
From 6aa85263efc88b1b29e9e566e1ac197445ddbc00 Mon Sep 17 00:00:00 2001
From: D1GQ <83262852+D1GQ@users.noreply.github.com>
Date: Fri, 9 Jan 2026 00:26:56 -0600
Subject: [PATCH 2/8] Add License
---
LICENSE | 674 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 674 insertions(+)
create mode 100644 LICENSE
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..f288702
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,674 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc.
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
+
+ The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works. By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users. We, the Free Software Foundation, use the
+GNU General Public License for most of our software; it applies also to
+any other work released this way by its authors. You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+ To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights. Therefore, you have
+certain responsibilities if you distribute copies of the software, or if
+you modify it: responsibilities to respect the freedom of others.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received. You must make sure that they, too, receive
+or can get the source code. And you must show them these terms so they
+know their rights.
+
+ Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+
+ For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software. For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+
+ Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the manufacturer
+can do so. This is fundamentally incompatible with the aim of
+protecting users' freedom to change the software. The systematic
+pattern of such abuse occurs in the area of products for individuals to
+use, which is precisely where it is most unacceptable. Therefore, we
+have designed this version of the GPL to prohibit the practice for those
+products. If such problems arise substantially in other domains, we
+stand ready to extend this provision to those domains in future versions
+of the GPL, as needed to protect the freedom of users.
+
+ Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary. To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ TERMS AND CONDITIONS
+
+ 0. Definitions.
+
+ "This License" refers to version 3 of the GNU General Public License.
+
+ "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+ "The Program" refers to any copyrightable work licensed under this
+License. Each licensee is addressed as "you". "Licensees" and
+"recipients" may be individuals or organizations.
+
+ To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy. The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+ A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+ To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy. Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+ To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies. Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+ An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License. If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+ 1. Source Code.
+
+ The "source code" for a work means the preferred form of the work
+for making modifications to it. "Object code" means any non-source
+form of a work.
+
+ A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+ The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form. A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+ The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities. However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work. For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+ The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+ The Corresponding Source for a work in source code form is that
+same work.
+
+ 2. Basic Permissions.
+
+ All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met. This License explicitly affirms your unlimited
+permission to run the unmodified Program. The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work. This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+ You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force. You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright. Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+ Conveying under any other circumstances is permitted solely under
+the conditions stated below. Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+ 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+ No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+ When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+ 4. Conveying Verbatim Copies.
+
+ You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+ You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+ 5. Conveying Modified Source Versions.
+
+ You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+ a) The work must carry prominent notices stating that you modified
+ it, and giving a relevant date.
+
+ b) The work must carry prominent notices stating that it is
+ released under this License and any conditions added under section
+ 7. This requirement modifies the requirement in section 4 to
+ "keep intact all notices".
+
+ c) You must license the entire work, as a whole, under this
+ License to anyone who comes into possession of a copy. This
+ License will therefore apply, along with any applicable section 7
+ additional terms, to the whole of the work, and all its parts,
+ regardless of how they are packaged. This License gives no
+ permission to license the work in any other way, but it does not
+ invalidate such permission if you have separately received it.
+
+ d) If the work has interactive user interfaces, each must display
+ Appropriate Legal Notices; however, if the Program has interactive
+ interfaces that do not display Appropriate Legal Notices, your
+ work need not make them do so.
+
+ A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit. Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+ 6. Conveying Non-Source Forms.
+
+ You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+ a) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by the
+ Corresponding Source fixed on a durable physical medium
+ customarily used for software interchange.
+
+ b) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by a
+ written offer, valid for at least three years and valid for as
+ long as you offer spare parts or customer support for that product
+ model, to give anyone who possesses the object code either (1) a
+ copy of the Corresponding Source for all the software in the
+ product that is covered by this License, on a durable physical
+ medium customarily used for software interchange, for a price no
+ more than your reasonable cost of physically performing this
+ conveying of source, or (2) access to copy the
+ Corresponding Source from a network server at no charge.
+
+ c) Convey individual copies of the object code with a copy of the
+ written offer to provide the Corresponding Source. This
+ alternative is allowed only occasionally and noncommercially, and
+ only if you received the object code with such an offer, in accord
+ with subsection 6b.
+
+ d) Convey the object code by offering access from a designated
+ place (gratis or for a charge), and offer equivalent access to the
+ Corresponding Source in the same way through the same place at no
+ further charge. You need not require recipients to copy the
+ Corresponding Source along with the object code. If the place to
+ copy the object code is a network server, the Corresponding Source
+ may be on a different server (operated by you or a third party)
+ that supports equivalent copying facilities, provided you maintain
+ clear directions next to the object code saying where to find the
+ Corresponding Source. Regardless of what server hosts the
+ Corresponding Source, you remain obligated to ensure that it is
+ available for as long as needed to satisfy these requirements.
+
+ e) Convey the object code using peer-to-peer transmission, provided
+ you inform other peers where the object code and Corresponding
+ Source of the work are being offered to the general public at no
+ charge under subsection 6d.
+
+ A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+ A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling. In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage. For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product. A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+ "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source. The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+ If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information. But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+ The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed. Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+ Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+ 7. Additional Terms.
+
+ "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law. If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+ When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it. (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.) You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+ Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+ a) Disclaiming warranty or limiting liability differently from the
+ terms of sections 15 and 16 of this License; or
+
+ b) Requiring preservation of specified reasonable legal notices or
+ author attributions in that material or in the Appropriate Legal
+ Notices displayed by works containing it; or
+
+ c) Prohibiting misrepresentation of the origin of that material, or
+ requiring that modified versions of such material be marked in
+ reasonable ways as different from the original version; or
+
+ d) Limiting the use for publicity purposes of names of licensors or
+ authors of the material; or
+
+ e) Declining to grant rights under trademark law for use of some
+ trade names, trademarks, or service marks; or
+
+ f) Requiring indemnification of licensors and authors of that
+ material by anyone who conveys the material (or modified versions of
+ it) with contractual assumptions of liability to the recipient, for
+ any liability that these contractual assumptions directly impose on
+ those licensors and authors.
+
+ All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10. If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term. If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+ If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+ Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+ 8. Termination.
+
+ You may not propagate or modify a covered work except as expressly
+provided under this License. Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+ However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+ Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+ Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License. If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+ 9. Acceptance Not Required for Having Copies.
+
+ You are not required to accept this License in order to receive or
+run a copy of the Program. Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance. However,
+nothing other than this License grants you permission to propagate or
+modify any covered work. These actions infringe copyright if you do
+not accept this License. Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+ 10. Automatic Licensing of Downstream Recipients.
+
+ Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License. You are not responsible
+for enforcing compliance by third parties with this License.
+
+ An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations. If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+ You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License. For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+ 11. Patents.
+
+ A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based. The
+work thus licensed is called the contributor's "contributor version".
+
+ A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version. For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+ Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+ In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement). To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+ If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients. "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+ If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+ A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License. You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+ Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+ 12. No Surrender of Others' Freedom.
+
+ If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all. For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+ 13. Use with the GNU Affero General Public License.
+
+ Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work. The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
+
+ 14. Revised Versions of this License.
+
+ The Free Software Foundation may publish revised and/or new versions of
+the GNU General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+ Each version is given a distinguishing version number. If the
+Program specifies that a certain numbered version of the GNU General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation. If the Program does not specify a version number of the
+GNU General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+ If the Program specifies that a proxy can decide which future
+versions of the GNU General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+ Later license versions may give you additional or different
+permissions. However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+ 15. Disclaimer of Warranty.
+
+ THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+ 16. Limitation of Liability.
+
+ IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+ 17. Interpretation of Sections 15 and 16.
+
+ If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+
+ Copyright (C)
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see .
+
+Also add information on how to contact you by electronic and paper mail.
+
+ If the program does terminal interaction, make it output a short
+notice like this when it starts in an interactive mode:
+
+ Copyright (C)
+ This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, your program's commands
+might be different; for a GUI interface, you would use an "about box".
+
+ You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU GPL, see
+.
+
+ The GNU General Public License does not permit incorporating your program
+into proprietary programs. If your program is a subroutine library, you
+may consider it more useful to permit linking proprietary applications with
+the library. If this is what you want to do, use the GNU Lesser General
+Public License instead of this License. But first, please read
+.
From 0f83817cb2685ead60be37d7c5475a06cecc18ad Mon Sep 17 00:00:00 2001
From: D1GQ <83262852+D1GQ@users.noreply.github.com>
Date: Fri, 9 Jan 2026 00:28:02 -0600
Subject: [PATCH 3/8] Add README
---
README.md | 94 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 94 insertions(+)
create mode 100644 README.md
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..c2d9756
--- /dev/null
+++ b/README.md
@@ -0,0 +1,94 @@
+# ♻ BetterAmongUs ♻
+
+A client-sided mod that enhances the experience for the popular game Among Us!
+
+
+
+
+
+
+
+
+## Getting Started
+
+1. **Install the Mod**: Download the latest version from [Releases](https://github.com/EnhancedNetwork/BetterAmongUs-Public/releases) and follow the installation instructions in the [BepInEx Installation Guide](https://docs.bepinex.dev/articles/user_guide/installation/index.html) to get BetterAmongUs up and running.
+2. **Explore the Features**: Use the pause menu to discover new options and settings.
+3. **Check the Commands**: Type `/commands` in the chat to view a list of all available commands.
+4. **Stay Updated**: Keep an eye on this page for future updates and new features.
+
+## Supported Platforms
+- ✅ Steam
+- ✅ Epic Games
+- ✅ Microsoft Store
+- ✅ itch.io
+- ⚠️ Android (Unknown)
+- ❌ iOS
+- ❌ Xbox/Playstation/Switch
+
+## Supported Game Versions
+- ✅ AU **v17.0.1** / **v2025.10.14**: (BAU v1.3.0) >
+- ✅ AU **v16.1.0** / **v2025.6.10**: (BAU v1.2.0 Beta 1) >
+- ✅ AU **v16.0.0** / **v2025.3.25**: (BAU v1.1.6 Beta 1) >
+- ✅ AU **v2024.11.26**: >
+- ✅ AU **v2024.10.29**: >
+- ✅ AU **v2024.9.4**: >
+- ✅ AU **v2024.8.13**: >
+- ✅ AU **v2024.6.18**: (BAU v1.0.0) >
+- ❌ AU **v2024.3.5**: or Below <
+
+## Features
+
+BetterAmongUs comes packed with a variety of features designed to improve your gameplay experience:
+
+- **Built-in Client-Sided Anti-Cheat**: Enjoy a fair game by preventing cheaters from ruining your fun.
+- **Host Enhancements**: Gain more control as a host with additional options and settings.
+- **Better Options**: Customize your game with a range of new and improved options.
+- **Commands**: Utilize a set of commands to manage and enhance gameplay.
+- **Client Improvements**: Experience smoother gameplay with various client-side improvements.
+- **And More!**: Stay tuned for more exciting features coming your way!
+
+
+
+## Anti-Cheat
+
+Are you annoyed with pesky cheaters? Well, fear no more! BetterAmongUs has a built-in anti-cheat for both host and non-host players.
+
+### The Anti-Cheat Can:
+- **Check for Invalid Actions/RPCS**: Detect and prevent unauthorized actions and RPC calls.
+- **Cancel Out Invalid Actions/RPCS**: Automatically cancel any suspicious activities detected.
+- **Detect Specific Cheat Clients**: Identify known cheat clients to keep your game fair.
+- **Save Data About Cheaters**: Keep track of detected cheaters for future reference.
+- **And More**: Additional anti-cheat measures to ensure a secure gameplay environment.
+
+## Commands
+
+BetterAmongUs offers a variety of commands to enhance your control over the game:
+
+- `/help` Get help with commands.
+- `/commands` Get a list of all available commands.
+- `/dump` Dump the entire log to the user's desktop.
+- `/player {id}` Get a player's information.
+- `/players` Get all player information.
+- `/setprefix {prefix}` Set the command prefix.
+- `/kick {id}` Kick a player from the game (Host Only!).
+- `/ban {id}` Ban a player from the game (Host Only!).
+- `/endgame` Force end the game (Host Only!).
+- `/removeplayer {identifier}` Remove player from local Anti-Cheat data by (FriendCode, HashPuid).
+- `/removeall` Remove all players from local Anti-Cheat data.
+
+## Credits
+
+A huge thank you to everyone who contributed to making BetterAmongUs a reality!
+
+- **Head Developer**: [D1GQ](https://github.com/D1GQ)
+
+## Contacts
+betterauofficial@gmail.com
+
+## Disclaimer
+
+**BetterAmongUs** is an unofficial, fan-made mod for **Among Us**. It is not affiliated with, endorsed by, or associated with **InnerSloth LLC** or the official **Among Us** game. All trademarks and copyrights related to **Among Us** are the property of **InnerSloth LLC**. This mod is created purely for entertainment purposes and to enhance the gaming experience. Use of this mod is at your own risk.
From 6cdd195455f4f7aae984cd932fdee5033e15a91e Mon Sep 17 00:00:00 2001
From: D1GQ <83262852+D1GQ@users.noreply.github.com>
Date: Fri, 9 Jan 2026 00:29:22 -0600
Subject: [PATCH 4/8] add assets
---
assets/BetterAmongUs-Logo.png | Bin 0 -> 106343 bytes
assets/BetterAmongUs.png | Bin 0 -> 35047 bytes
assets/BetterAmongUsMod.png | Bin 0 -> 37268 bytes
assets/freeplay-promo.png | Bin 0 -> 1338886 bytes
assets/meeting-promo.png | Bin 0 -> 591654 bytes
5 files changed, 0 insertions(+), 0 deletions(-)
create mode 100644 assets/BetterAmongUs-Logo.png
create mode 100644 assets/BetterAmongUs.png
create mode 100644 assets/BetterAmongUsMod.png
create mode 100644 assets/freeplay-promo.png
create mode 100644 assets/meeting-promo.png
diff --git a/assets/BetterAmongUs-Logo.png b/assets/BetterAmongUs-Logo.png
new file mode 100644
index 0000000000000000000000000000000000000000..878c67bfd14f155625c062fe82bc67b8026199b1
GIT binary patch
literal 106343
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