{"id":40724329,"url":"https://github.com/kittscloud/kittsmenusystem","last_synced_at":"2026-02-14T20:06:51.064Z","repository":{"id":332903410,"uuid":"1135447884","full_name":"Kittscloud/KittsMenuSystem","owner":"Kittscloud","description":"Kitts Menu System","archived":false,"fork":false,"pushed_at":"2026-01-16T05:54:16.000Z","size":67,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-01-16T21:26:20.754Z","etag":null,"topics":["labapi","labapi-plugin","plugin","scpsl","scpsl-plugin","sss"],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"lgpl-2.1","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Kittscloud.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-01-16T05:34:21.000Z","updated_at":"2026-01-16T05:57:46.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/Kittscloud/KittsMenuSystem","commit_stats":null,"previous_names":["kittscloud/kittsmenusystem"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/Kittscloud/KittsMenuSystem","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Kittscloud%2FKittsMenuSystem","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Kittscloud%2FKittsMenuSystem/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Kittscloud%2FKittsMenuSystem/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Kittscloud%2FKittsMenuSystem/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Kittscloud","download_url":"https://codeload.github.com/Kittscloud/KittsMenuSystem/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Kittscloud%2FKittsMenuSystem/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28634785,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-21T04:47:28.174Z","status":"ssl_error","status_checked_at":"2026-01-21T04:47:22.943Z","response_time":86,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["labapi","labapi-plugin","plugin","scpsl","scpsl-plugin","sss"],"created_at":"2026-01-21T14:01:05.349Z","updated_at":"2026-02-14T20:06:51.058Z","avatar_url":"https://github.com/Kittscloud.png","language":"C#","funding_links":["https://ko-fi.com/kittscloud"],"categories":[],"sub_categories":[],"readme":"# KittsMenuSystem\n*LabAPI Server-Specific Menu Framework*\n\n[![License](https://img.shields.io/badge/License-AGPL%20v3.0-blue?style=for-the-badge)](https://github.com/Kittscloud/KittsMenuSystem/blob/main/LICENSE)\n[![Downloads](https://img.shields.io/github/downloads/Kittscloud/KittsMenuSystem/total?style=for-the-badge)](https://github.com/Kittscloud/ServerSpecificsSyncer/releases/latest)\n[![GitHub release](https://img.shields.io/github/v/release/Kittscloud/KittsMenuSystem?style=for-the-badge)](https://github.com/Kittscloud/KittsMenuSystem/releases/latest)\n[![](https://img.shields.io/badge/.NET-4.8.1-512BD4?logo=dotnet\u0026logoColor=fff\u0026style=for-the-badge)](https://dotnet.microsoft.com/en-us/download/dotnet-framework/net481)\n[![GitHub stars](https://img.shields.io/github/stars/Kittscloud/KittsMenuSystem?style=for-the-badge)](https://github.com/Kittscloud/KittsMenuSystem/stargazers)\n[![GitHub issues](https://img.shields.io/github/issues/Kittscloud/KittsMenuSystem?style=for-the-badge)](https://github.com/Kittscloud/KittsMenuSystem/issues)\n\n`KittsMenuSystem` is a framework that adds a complete ServerSpecific menu system for `SCP Secret Laboratory` using `LabAPI`.\n\n## Important\n`KittsMenuSystem` is mostly based on another menu framework called [`SSMenuSystem`](https://github.com/skyfr0676/SSMenuSystem), which has been discontinued. Since the original framework was discontinued, I have taken it over, updating it to the latest versions and improving the plugin overall.\n\nThat being said, the original plugin developer, [`skyfr0676`](https://github.com/skyfr0676), created a fantastic plugin, and I am personally very grateful that this project existed in the first place.\n\n## Consider Supporting?\nIf you enjoy this project and would like to support future development, I would greatly appreciate it if you considered donating via my [`Ko-Fi`](https://ko-fi.com/kittscloud).\n\n## How to use KittsMenuSystem:\nTo install `KittsMenuSystem` on your server, you will need:\n- `Harmony` `v2.4.2` or later.\n- `KittsMenuSystem` latest version.\n\nAll of these files can be found in the [`latest release`](https://github.com/Kittscloud/KittsMenuSystem/releases/latest).\n\nOnce you have these:\n- Place `Harmony.dll` in the `dependencies` folder.\n- Place `KittsMenuSystem.dll` in the `plugins` folder.\n\nRun the server and you're set!\n\n### Configurations:\n| Parameter                    | Type          | Description                                                           | Default Value |\n|------------------------------|---------------|-----------------------------------------------------------------------|---------------|\n| `IsEnabled`                  | `bool`        | Is plugin enabled.                                                    | `true`        |\n| `Debug`                      | `bool`        | Sends debug logs to console.                                          | `false`       |\n| `ShowErrorToClient`          | `bool`        | Whether players can see errors or not.                                | `true`        |\n| `ShowFullErrorToClient`      | `bool`        | Whether players can see total errors (plugin content) or not.         | `false`       |\n| `ShowFullErrorToModerators`  | `bool`        | Whether moderators (RA access) can see total errors (plugin content). | `true`        |\n| `EnableExamples`             | `bool`        | Whether example menus in-built to the plugin are enabled.             | `true`        |\n| `Translation`                | `Translation` | Plugin translation labels and buttons (see below).                    | `Translation` |\n\n### Translation:\n| Parameter               | Type                | Description                                    | Default             |\n|-------------------------|---------------------|------------------------------------------------|---------------------|\n| `OpenMenu`              | `ButtonConfig`      | Open menu button. {0} = menu name.             | `ButtonConfig`      |\n| `ReturnTo`              | `ButtonConfig`      | Return to button. {0} = menu name.             | `ButtonConfig`      |\n| `ReloadButton`          | `ButtonConfig`      | Reload menu button.                            | `ButtonConfig`      |\n| `ServerError`           | `string`            | Text shown when an error is occurrs.           | `string`            |\n| `SubMenuTitle`          | `GroupHeaderConfig` | Sub-menus title.                               | `GroupHeaderConfig` |\n| `NoPermission`          | `string`            | Error text shown wehn insufficient permission. | `string`            |\n\n### Default YML Config File:\n```yml\n# Is plugin enabled\nis_enabled: true\n# Sends debug logs to console\ndebug: false\n# Whether players can see errors or not\nshow_error_to_client: true\n# Whether players can see total errors including plugin content or not\nshow_full_error_to_client: false\n# Whether moderators (RA access) can see total errors including plugin content or not\nshow_full_error_to_moderators: true\n# Whether example menus in-built to the plugin are enabled\nenable_examples: true\ntranslation:\n# Open menu button. {0} = menu name\n  open_menu:\n    label: Open {0}\n    button_text: Open\n    hint: \n  # Return to button. {0} = menu name\n  return_to:\n    label: Return to {0}\n    button_text: Return\n    hint: \n  # Reload menu button\n  reload_button:\n    label: Reload menus\n    button_text: Reload\n    hint: \n  # Text shown when an error is occurrs\n  server_error: Internal Server Error\n  # Sub-menus title\n  sub_menu_title:\n    label: Sub-Menus\n    hint: ''\n  # Error text shown wehn insufficient permission\n  no_permission: Insufficient permissions to view full error details\n```\n\n### Want to use in your own project?\nTo install in your project, simply reference the `KittsMenuSystem.dll` file, found in the [`latest release`](https://github.com/Kittscloud/KittsMenuSystem/releases/latest).\n\nCreate a new class inheriting the `Menu` class.\n\n### Example Menu\n```csharp\npublic class Test : Menu\n{\n    public override List\u003cBaseSetting\u003e Settings(ReferenceHub hub) =\u003e [\n        // Settings in here.\n    ];\n\n    public override string Name { get; set; } = \"Test\";\n    public override int Id { get; set; } = -1;\n}\n```\n\n### Menu Class\n| Parameter / Method          | Type / Return Type   | Description                                                              |\n|-----------------------------|----------------------|--------------------------------------------------------------------------|\n| `Name`                      | `string`             | Name of the menu, displayed as header and on buttons. Must be unique.    |\n| `Id`                        | `int`                | ID of the menu. Must be greater than 0.                                  |\n| `ParentMenu`                | `Type?`              | Optional parent menu type for sub-menus.                                 |\n| `Hash`                      | `int`                | Read-only hash derived from `Name` to separate settings.                 |\n| `CheckAccess(ReferenceHub)` | `bool`               | Determines whether a player can access the menu. Default returns `true`. |\n| `Settings(ReferenceHub)`    | `List\u003cBaseSettings\u003e` | Override to provide hub-specific basesettings.                           |\n| `OnOpen(ReferenceHub)`      | `void`               | Called when a player opens the menu.                                     |\n| `OnClose(ReferenceHub)`     | `void`               | Called when a player closes the menu.                                    |\n| `ReloadFor(ReferenceHub)`   | `void`               | Reloads this menu for a specific player.                                 |\n| `ReloadForAll()`            | `void`               | Reloads this menu for all players.                                       |\n| `OnRegistered()`            | `void`               | Called when the menu is registered.                                      |\n\n### MenuManager Class\n| Parameter / Method                                                | Type / Return Type                             | Description                                                              |\n|-------------------------------------------------------------------|------------------------------------------------|--------------------------------------------------------------------------|\n| `SyncedMenus`                                                     | `IReadOnlyDictionary\u003cReferenceHub, Menu\u003e`      | Currently loaded menu for each player.                                   |\n| `ResgisteredMenus`                                                | `IReadOnlyList\u003cMenu\u003e`                          | All menus registered in the system.                                      |\n| `Pinned`                                                          | `IReadOnlyDictionary\u003cAssembly, List\u003cTextArea\u003e` | All pinned content registered by assemblies.                             |\n| `RegisterAllMenus()`                                              | `void`                                         | Registers all menus in the calling assembly.                             |\n| `Register(Menu)`                                                  | `void`                                         | Registers a specific menu instance. Throws exception if invalid.         |\n| `Unregister(Menu)`                                                | `void`                                         | Unregisters a menu and removes it from all players.                      |\n| `UnregisterAllMenus()`                                            | `void`                                         | Unregisters all menus.                                                   |\n| `GetCurrentMenu(ReferenceHub)`                                    | `Menu`                                         | Returns the menu the player currently has open.                          |\n| `DeleteFromMenuSync(ReferenceHub)`                                | `void`                                         | Removes the player from `MenuSync` when leaving.                         |\n| `RegisterTopPinnedSettings(List\u003cBaseSetting\u003e)`                    | `void`                                         | Register list of `BaseSettings` displayed on the top of all `Menus`.     |\n| `UnregisterTopPinnedSettings()`                                   | `void`                                         | Remove top pinnedsettings  from `Assembly.GetCallingAssembly`.           |\n| `RegisterBottomPinnedSettings(List\u003cBaseSetting\u003e)`                 | `void`                                         | Register list of `BaseSettings` displayed on the bomttom of all `Menus`. |\n| `UnregisterBottomPinnedSettings()`                                | `void`                                         | Remove bottom pinned settings from  `Assembly.GetCallingAssembly`.       |\n| `GetSetting\u003cTMenu, TSetting\u003e(ReferenceHub, int)`                  | `TSetting`                                     | Gets a `BaseSetting` by Id for a `ReferenceHub` from `TMenu`.            |\n| `TryGetSetting\u003cTMenu, TSetting\u003e(ReferenceHub, int, out TSetting)` | `bool`                                         | Trys to get a `BaseSetting` by Id for a `ReferenceHub` from `TMenu`.     |\n| `GetCurrentMenu(ReferenceHub)`                                    | `Menu`                                         | Gets the `ReferenceHub's` loaded `Menu`.                                 |\n| `GetMenu(Type)`                                                   | `Menu`                                         | Returns a menu instance by type.                                         |\n| `ReloadCurrentMenu(ReferenceHub)`                                 | `void`                                         | Reloads the current menu for a player.                                   |\n| `ReloadAll()`                                                     | `void`                                         | Reloads current menu for all players.                                    |\n\nYou can look at the [`Examples`](https://github.com/Kittscloud/KittsMenuSystem/tree/main/KittsMenuSystem/Examples) folder to get a better idea of how `Menus` and `Settings` are implemented.\n\nWhen you enable your plugin, simply run:\n```csharp\nMenuManager.RegisterAllMenus();\n```\nThis will register all menus in your assembly. It is important to keep `KittsMenuSystem.dll` in the `plugins` folder, as it must run as a plugin in order to register menus from all assemblies with `KittsMenuSystem.dll`.\n\n## Found a bug or have feedback?\nIf you have found a bug please make an issue on GitHub or the quickest way is to message me on discord at `kittscloud`.\n\nAlso message me on discord if you have feedback for me, I'd appreciate it very much. Thank you!\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkittscloud%2Fkittsmenusystem","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkittscloud%2Fkittsmenusystem","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkittscloud%2Fkittsmenusystem/lists"}