Skip to content

Instantly share code, notes, and snippets.

@NZSmartie
Created April 7, 2019 01:13
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save NZSmartie/a223086a31e49e4ce0883bf4a926ec46 to your computer and use it in GitHub Desktop.
Save NZSmartie/a223086a31e49e4ce0883bf4a926ec46 to your computer and use it in GitHub Desktop.
StarMade Modding proposal with StarMade Dock integration.

Mod Proposal

Goals

  • Lay foundation to protect players against malicious/unwanted mods that may degrade game experience.
    • By allowing 3rd party mods to run on player's PCs, we're literary offering Remote Code Execution As A Service.
  • Minimise effort for players to join servers using mods.
  • Provide clear documentation with simple processes for creating, developing, uploading and using mods.

Glossary

  • Mod Pack
    • A collection of mods, verion ranges and other supporting meta data.
  • Client Side only mod,
    • A mod that only enhances the game client i.e.
      • Creative mode enhancers
      • GUI elements (smarter scanner, galaxy navigator)

Launching Mods

Possible flows for a player to take

Game clients wanting to use client side mods only

  1. Player launches the game into the main menu.
  2. They select the mods and tools menu option.
  3. The presented dialog will allow users to select mods that only enhance client side only.
  4. the player may connect to a single or multiplayer game as usual.

Clients joining a multiplayer server

  1. Player launches StarMade
  2. they select a server to join that has mods enabled.
    • Each server listed must only be using approved mods. Unless client has opted to using pre-approved or enabled 3rd party mods.
  3. The client send the server a list of client side only mods.
    • This gives the server a chance to disallow client side mods from being used if they go against the server's rules.
    • If there are disallowed mods, give the player a friendly warning stating a mod has been disabled while they're connected to that server.
  4. The game client downloads mods and verifies them for integrity
    • The game server will send a list of the mods with versions used as well as their Maven repository to download them from.
  5. Game client connects to server.
    • The game client initalises each mod to be used.

Clients starting a local multiplayer server.

  1. Player launches star made.
  2. They create a multiplayer server or local server
    • In advanced settings they may choose a mod pack that is used for the server side.
  3. As the game server will download mods and verifies them for integrity
  4. Game client connects to server.
    • The game client initalises each mod to be used.

Game servers wanting to use mods

  1. A server administrator may curate their own mod pack or use an existing modpack from SMD.
    • A modpack simply lists mods used, their supported version ranges and where to download them from.
  2. They may also specify an allow-list or disallow-list of client-side only mods.
  3. As the server starts, it will use the selected modpack and continue as normal.

Distributing and Publishing Mods

  • Mods may be uploaded to StarMade Dock Community Content.
    • If uploaded to starmade dock, could they be net.starmadedock.<username>:<mod>:<version>?
    • Mods may be signed by SMD to verify it originates from SMD.
  • Uploads can happen via MavenPublish
    • Should mods be registered on SMD first, to prevent namespace classes or users spamming the server with mod placeholders?
  • Mod packs may be curated through SMD by citizens
    • They may also include an allow-list or disallow-list of client-side only mods.

Vetting/Approving Mods

  • Mods uploaded to SMD may be flagged by the community and/or removed by moderators if they are malicious of violate Terms of Service.
  • Mods may be approved by Schine, or appointed community members
    • Game clients may have a default option to download approved mods only.
      • Optionally players may enable unapproved mods and add 3rd party sources (i.e. private maven repos).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment