Skip to content

Latest commit

 

History

History
155 lines (109 loc) · 7.23 KB

File metadata and controls

155 lines (109 loc) · 7.23 KB

BepInEx Template for PEAK

Tip

Looking to create a template like this? See FORKING.md

Installing

.NET templates must be installed before they can be used. This means that when you install the template, it doesn't create a new project for you, but now you have the ability to do that.

Note

You must use .NET SDK 10 or newer to use this template. You can check your .NET SDK version by running the following in a terminal: dotnet --version. To download .NET SDK, see: https://dotnet.microsoft.com/en-us/download

From NuGet (Recommended)

Run the following command:

dotnet new install PEAKModding.BepInExTemplate

Tip

You can run dotnet new update to update all your dotnet templates. You should do this get the latest versions of everything with the latest fixes and improvements!

Manually

If you're contributing to the template or prefer a manual installation:

  1. Clone or download this repository
  2. Open a terminal at the root of the repository
  3. Run:
dotnet new install .

To update:

dotnet new install . --force

To uninstall:

dotnet new uninstall .

Once installed, the template will be available as PEAK BepInEx Plugin with an alias peakmod.

Creating a Project

Before creating a project, take a look at the available options so you are aware of what can be customized:

Short Flag Long Flag Description Required Type Default
-g --guid The global identifier for your mod. Example: AuthorName.ModName true text
-tt --ts-team The thunderstore team to publish this package under. false text TODO_team_name_here
-nt --no-tutorial If true, tutorial comments will not be present. false bool false
-li --library If true, NuGet metadata is included in the project. false bool false
-ig --inverted-gitignore Gitignore ignores everything and specifies what to include. false bool false

You can run dotnet new peakmod --help to see all available options.

Now that you are ready to create a project, open a terminal in your PEAK modding directory, and run the following, including any options of your choice:

Note

You should set up a Thunderstore team first so you can use its name in the optional --ts-team argument so the template can give you a mostly correctly configured packaging setup.

dotnet new peakmod --output ModName --guid AuthorName.ModName --ts-team YourThunderstoreTeam

This will create a new directory with the mod name which contains the project.

You now have a (mostly) working setup. See Setting Up The Config File and Thunderstore Packaging & Publishing for more.

Project Structure

This example demonstrates what files should appear and where:

~/Workspace/PEAK$ dotnet new peakmod --output MyCoolMod --guid PEAKModding.MyCoolMod --ts-team PEAKModding
The template "PEAK BepInEx Plugin" was created successfully.

~/Workspace/PEAK$ cd MyCoolMod/
~/Workspace/PEAK/MyCoolMod$ tree
.
├── CHANGELOG.md
├── Config.Build.user.props.template
├── Directory.Build.props
├── Directory.Build.targets
├── global.json
├── icon.png
├── LICENSE
├── MyCoolMod.slnx
├── README.md
└── src
    └── MyCoolMod
        ├── MyCoolMod.csproj
        └── Plugin.cs

3 directories, 11 files
  • ./src/<project-name>/ contains the C# source files for your mod
    • <project-name>.csproj is the C# project configuration file, which builds a dll file
    • Plugin.cs is the C# source code file which defines your BepInEx plugin class
  • ./ contains project configuration files
    • Directory.Build.* files contain shared configuration for all projects in subdirectories
    • Config.Build.user.props.template is a template file for per-user configuration (see Setting Up The Config File)
    • <project-name>.slnx is file which defines which csproj files are included in your project
    • global.json informs your dev tools of the minimum supported .NET SDK version for the project
    • CHANGELOG.md, icon.png, LICENSE, and README.md are placeholder files which are to be modified by you
      • These are included in your Thunderstore package, which is configured in ./src/<project-name>/<project-name>.csproj

The project is configured so that it's easy to add new projects into your project solution. Even if you don't need that, it's a good idea to follow a standard project structure in case a need ever comes, or just so that everything is where you'd expect it to be. For example, does your project need automated tests? Copy your ./src/<project-name>/ plugin's csproj and Plugin.cs to ./tests/<project-name>.Tests/, add the new csproj to your slnx project, and start working on your test project.

Setting Up The Config File

At the root of your new project you should see Config.Build.user.props.template this is a special file that is the template for the project's user-specific config. Make a copy of this file and rename it Config.Build.user.props without the template part.

This file will copy your assembly files to a plugins directory and it can be used to configure your paths to the game files and BepInEx plugins directory if the defaults don't work for you.

Thunderstore Packaging & Publishing

This template comes with Thunderstore packaging built-in, using ThunderPipe. You should configure the src/<project-name>/<project-name>.csproj file with the Thunderstore metadata for your mod.

You can build Thunderstore packages by building with release configuration:

dotnet build -c Release -v d

Note

You can learn about different build options with dotnet build --help.
-c is short for --configuration and -v d is --verbosity detailed.

The built package will be found at ./artifacts/thunderstore/.

You can directly publish to Thunderstore by including -p:PublishTS=true in the command. See the Config.Build.user.props.template file for configuration instructions.

Publishing via GitHub Actions

This template doesn't support GitHub actions publishing due to a lack of GameLibs package for the game.