MiX MenuKit

What it does
  Lets you build button menus in game. Each menu has a name, an optional chat trigger (for
  example /main) and up to 24 plates. Each plate has a label and a command. When a player presses
  a plate, the command runs as that player: a command starting with / is sent as chat (so it runs
  another plugin's chat command), anything else is sent as a console command.
  Menu types: compact, normal and wide boards that cover the screen and have a CLOSE button, and
  an inventory menu: it appears beside the player's own inventory screen and goes away when the
  inventory closes. It is drawn on the game's Inventory layer, so Rust itself shows and hides it:
  there is no key to bind, nothing to toggle and nothing that can get out of step (Escape, looting a
  box, dying and the map all behave like the inventory they belong to). It has no CLOSE button.
  The default look is "vanilla": no border or art, a header word (SERVER) and a grid of grey tiles
  with a game icon, the plate name and a hover tooltip, in the empty column above Quick Craft. It
  steps aside while a loot panel is open and scrolls when the tiles do not fit. The other look,
  "sidebar", is the leather menu in the strip left of the character. Switch with the config key
  "Inventory menu style" or the console command mixmenukit.style vanilla|sidebar. Each plate may
  carry an Icon (a name from the game's assets/icons, a full assets/ path, or none) and a
  Description for the tooltip; without them the icon is chosen from the plate's label and command.
  Each menu can be public or private (private needs mixmenukit.use), and has 2 to 4 columns, a
  button style, a frame style or none, a click sound, a close sound and one of four fonts.
  The builder (/mixmenu edit) does all of this with buttons; there is nothing to hand-edit.
  The painted buttons and frames are PNG files in data/MixMenuKit. Without them the plugin logs a
  warning and draws plain grey plates.
  The starter menus only use this plugin's own commands (/quick, /main, /mixmenu edit) plus empty
  NEW plates for you to fill in the builder.

Install
  Drop plugins/MixMenuKit.cs into carbon/plugins (Carbon) or oxide/plugins (Oxide).
  Copy the data/MixMenuKit folder into carbon/data (or oxide/data).

Commands
  /mixmenu                     Opens the default menu on its own, over the game (an inventory menu
                               opens as a normal board). Anyone the menu allows.
  /mixmenu <name>              Opens that menu by name or trigger, the same way.
  /mixmenu edit [name]         Opens the builder: the menu list, or straight into the named menu
                               (name or trigger). Server admins or mixmenukit.edit.
  /mixmenu close               Closes any open menu.
  /<trigger>                   Each normal menu's own trigger opens it, and closes it if it is
                               already open. The starter config has /main. An inventory menu's
                               trigger does nothing when typed: older installs bound it to Tab, so
                               it stays silent and tells the player once that no bind is needed.
  The console commands below are what the menu and builder buttons press. They need a connected
  player; the builder ones also need edit rights.
  mixmenukit.run               Runs a plate's command.
  mixmenukit.close             Closes the open menu (saves first for editors).
  mixmenukit.style             Shows or sets the inventory menu style (vanilla or sidebar). Edit rights.
  mixmenukit.noop              Does nothing (used by the copy-only text box on the info popup).
  mixmenukit.showbindinfo      Shows the info popup on the inventory menu.
  mixmenukit.hidebindinfo      Hides it.
  mixmenukit.showhelp          Shows the builder help.
  mixmenukit.hidehelp          Hides it.
  mixmenukit.edit              Opens the builder on a menu.
  mixmenukit.save              Saves and applies trigger changes.
  mixmenukit.menulist          Back to the menu list.
  mixmenukit.menupage          Next or previous page of the menu list.
  mixmenukit.newmenu           Creates a normal menu.
  mixmenukit.newinvmenu        Creates an inventory (sidebar) menu.
  mixmenukit.delmenu           Deletes a menu (never the last one).
  mixmenukit.setdefault        Makes a menu the one /mixmenu opens.
  mixmenukit.public            Switches a menu between public and private.
  mixmenukit.name              Sets the menu name.
  mixmenukit.trigger           Sets the menu's chat trigger.
  mixmenukit.add               Adds a plate.
  mixmenukit.remove            Removes the selected plate.
  mixmenukit.plates            Jumps the plate count to 2, 4, 8, 12 or 24.
  mixmenukit.pick              Selects a plate to edit.
  mixmenukit.cols              Cycles 2 to 4 columns.
  mixmenukit.size              Cycles compact, normal and wide.
  mixmenukit.buttonstyle       Next or previous button style.
  mixmenukit.framestyle        Next or previous frame style.
  mixmenukit.clicksound        Cycles the plate click sound.
  mixmenukit.closesound        Cycles the close sound.
  mixmenukit.font              Cycles the font.
  mixmenukit.label             Sets a plate's label.
  mixmenukit.cmd               Sets a plate's command.

Permissions
  mixmenukit.use    Opens private menus. Grant it to your staff groups. It is never given to the
                    default group: the plugin removes it from default on load, so a private menu
                    stays private. Server admins and mixmenukit.edit holders can always open them.
  mixmenukit.edit   Uses the builder. Server admins can always edit.

Config highlights  (carbon/configs/MixMenuKit.json)
  Menus are stored in this file and written by the builder, on every server save and on unload.
  The starter file has two menus:
  MAIN MENU         Public, the default, trigger /main, plates QUICK ACCESS, EDIT MENUS, NEW, NEW.
  QUICK ACCESS      Sidebar type, public, trigger /quick, plates MAIN MENU and NEW.
  Inventory menu keys (top of the file): Inventory menu style = vanilla or sidebar, Inventory menu
  header = the word above the tiles (default SERVER), Inventory menu tile size = 48 to 120 pixels
  (default 90), Inventory menu columns = 2 to 8 (default 6, reduced if they would not fit).
  Per-menu defaults for a new menu:
  Size = normal     compact, normal, wide (sidebar for inventory menus).
  Columns = 2       2 to 4.
  Button = copper   Button style.
  Frame = rivet     Frame style.
  ClickSound = select, CloseSound = confirm, Font = regular.
  Plate text is capped at 48 characters.

Tested
  {{TESTED_LINE}}

Feedback
  Questions, bugs and ideas: MixMods Discord, discord.gg/MZCdmvFrQ, message B1.

Licence
  Free to run and change on your own servers. See LICENCE.txt.
