Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 23 additions & 8 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@ it's advisable to add a `global.json` with the following content instead:

Of course, the proper version number must be specified.
Simply check for the version of the latest release here or on the NuGet feed you're using.
The package is available on [nuget.org](https://www.nuget.org/packages/Remora.Resonite.Sdk) as well.


## Feature Breakdown
Expand All @@ -77,7 +78,7 @@ The following properties are defined by the SDK.
| ResoniteProjectType | mod | Yes |
| ResoniteTargetModLoader | MonkeyLoader | Yes |
| TargetFramework* | net10.0 / net472 | Yes |
| ResoniteUseMonkeyLoaderCore | `'$(ResoniteProjectType)' == 'mod' AND '$(ResoniteTarget)' != 'renderite'` | Yes |
| ResoniteUseMonkeyLoaderCore | false | Yes |

`ResoniteTarget` can be set to `client`, `headless`, or `renderite`.
`headless` is for the server version of Resonite which does not have any graphics,
Expand Down Expand Up @@ -112,10 +113,11 @@ For a `ResoniteTarget` of `client` or `headless`, this must be `net10.0`,
while for `renderite`, `net472` is generally required.
`standalone` projects may target a higher version though.

`ResoniteUseMonkeyLoaderCore` decides whether the `MonkeyLoader.Resonite.Core`
`ResoniteUseMonkeyLoaderCore` controls whether the `MonkeyLoader.Resonite.Core`
NuGet package will be referenced when creating a mod not targeting MonkeyLoader.
This package offers convenient extension methods and other features for mods,
but doesn't rely on MonkeyLoader being present.
Since the default is `false`, you have to manually set it to `true` for your project.


### Building
Expand Down Expand Up @@ -168,11 +170,12 @@ You can control the location where these assemblies are loaded from with
When using `MonkeyLoader` as the `ResoniteTargetModLoader`,
there is additional properties defined by the SDK.

| Property | Value | Overridable |
|-------------------------|----------------|-------------|
| IsMonkeyLoaderGamePack | false | Yes |
| MonkeyLoaderPackageType | Mod / GamePack | No |
| GeneratePackageOnBuild* | true | No |
| Property | Value | Overridable |
|-------------------------------------|----------------|-------------|
| IsMonkeyLoaderGamePack | false | Yes |
| MonkeyLoaderPackageType | Mod / GamePack | No |
| GeneratePackageOnBuild* | true | No |
| MonkeyLoaderHideResoniteIntegration | false | Yes |

Most importantly, `IsMonkeyLoaderGamePack` controls whether the packed project
is placed into the `MonkeyLoader/Mods/` or `MonkeyLoader/GamePacks/` directory,
Expand All @@ -181,6 +184,12 @@ if `ResoniteInstallOnBuild` is set to `true`.
To ensure that a NuGet package is created, the `MSBuild` property
`GeneratePackageOnBuild` is always set to `true`.

The property `MonkeyLoaderHideResoniteIntegration` can be used to hide the
`MonkeyLoader.GamePacks.Resonite` reference from the resulting package.
In particular, this is useful for integrations that can load mods
from other loaders, so that they can be used to build those mods too,
without pulling in all of MonkeyLoader.


### Compilation

Expand Down Expand Up @@ -287,7 +296,13 @@ No matter your project type, the following attributes are always defined.
Additionally, for each `ResoniteReference` with `UsePublicized` set to `true`,
a corresponding `IgnoreAccessChecksTo` attribute is added.
This ensures that there will be no issues when accessing non-public types or
members of those assemblies at runtime.
members of those assemblies at runtime.
As this attribute is supported by the runtime but not available by default,
it has to be supplied directly or from another library.
To do this, a definition for the attribute is automatically included
for mod projects that do not already get access to it
through a library included by the SDK.
To prevent this, set the property `ResoniteHasIgnoreAccessChecksAttribute` to `true`.


### Publishing
Expand Down
118 changes: 91 additions & 27 deletions Remora.Resonite.Sdk.slnx
Original file line number Diff line number Diff line change
Expand Up @@ -16,85 +16,149 @@
<Project Path="Tests/DualSdkProject/DualSdkProject.csproj">
<BuildDependency Project="Remora.Resonite.Sdk/Remora.Resonite.Sdk.msbuildproj" />
</Project>
<Project Path="Tests/Library/Library.csproj">
<Project Path="Tests/Library/Library.csproj" />
</Folder>
<Folder Name="/Tests/Executables/">
<File Path="Tests/Executables/Directory.Build.props" />
<Project Path="Tests/Executables/ModernResoniteExecutable/ModernResoniteExecutable.csproj">
<BuildDependency Project="Remora.Resonite.Sdk/Remora.Resonite.Sdk.msbuildproj" />
</Project>
<Project Path="Tests/Executables/ModernResoniteExecutableWithResoniteReference/ModernResoniteExecutableWithResoniteReference.csproj">
<BuildDependency Project="Remora.Resonite.Sdk/Remora.Resonite.Sdk.msbuildproj" />
</Project>
</Folder>
<Folder Name="/Tests/Libraries/">
<File Path="Tests/Libraries/Directory.Build.props" />
<Project Path="Tests/Libraries/ResoniteHeadlessLibrary/ResoniteHeadlessLibrary.csproj">
<BuildDependency Project="Remora.Resonite.Sdk/Remora.Resonite.Sdk.msbuildproj" />
</Project>
<Project Path="Tests/Libraries/ResoniteHeadlessLibraryWithPackageReference/ResoniteHeadlessLibraryWithPackageReference.csproj">
<BuildDependency Project="Remora.Resonite.Sdk/Remora.Resonite.Sdk.msbuildproj" />
</Project>
<Project Path="Tests/ModernResoniteExecutable/ModernResoniteExecutable.csproj">
<Project Path="Tests/Libraries/ResoniteHeadlessLibraryWithProjectReference/ResoniteHeadlessLibraryWithProjectReference.csproj">
<BuildDependency Project="Remora.Resonite.Sdk/Remora.Resonite.Sdk.msbuildproj" />
</Project>
<Project Path="Tests/ModernResoniteExecutableWithResoniteReference/ModernResoniteExecutableWithResoniteReference.csproj">
<Project Path="Tests/Libraries/ResoniteHeadlessLibraryWithResoniteReference/ResoniteHeadlessLibraryWithResoniteReference.csproj">
<BuildDependency Project="Remora.Resonite.Sdk/Remora.Resonite.Sdk.msbuildproj" />
</Project>
<Project Path="Tests/ResoniteHeadlessLibrary/ResoniteHeadlessLibrary.csproj">
<Project Path="Tests/Libraries/ResoniteLibrary/ResoniteLibrary.csproj">
<BuildDependency Project="Remora.Resonite.Sdk/Remora.Resonite.Sdk.msbuildproj" />
</Project>
<Project Path="Tests/ResoniteHeadlessLibraryWithPackageReference/ResoniteHeadlessLibraryWithPackageReference.csproj">
<Project Path="Tests/Libraries/ResoniteLibraryWithPackageReference/ResoniteLibraryWithPackageReference.csproj">
<BuildDependency Project="Remora.Resonite.Sdk/Remora.Resonite.Sdk.msbuildproj" />
</Project>
<Project Path="Tests/ResoniteHeadlessLibraryWithProjectReference/ResoniteHeadlessLibraryWithProjectReference.csproj">
<Project Path="Tests/Libraries/ResoniteLibraryWithProjectReference/ResoniteLibraryWithProjectReference.csproj">
<BuildDependency Project="Remora.Resonite.Sdk/Remora.Resonite.Sdk.msbuildproj" />
</Project>
<Project Path="Tests/ResoniteHeadlessLibraryWithResoniteReference/ResoniteHeadlessLibraryWithResoniteReference.csproj">
<Project Path="Tests/Libraries/ResoniteLibraryWithResoniteReference/ResoniteLibraryWithResoniteReference.csproj">
<BuildDependency Project="Remora.Resonite.Sdk/Remora.Resonite.Sdk.msbuildproj" />
</Project>
<Project Path="Tests/ResoniteHeadlessMod/ResoniteHeadlessMod.csproj">
</Folder>
<Folder Name="/Tests/Mods/">
<File Path="Tests/Mods/Directory.Build.props" />
</Folder>
<Folder Name="/Tests/Mods/BepisLoader/">
<Project Path="Tests/Mods/BepisLoader/ResoniteHeadlessBepisMod/ResoniteHeadlessBepisMod.csproj">
<BuildDependency Project="Remora.Resonite.Sdk/Remora.Resonite.Sdk.msbuildproj" />
</Project>
<Project Path="Tests/ResoniteHeadlessModWithPackageDependency/ResoniteHeadlessModWithPackageDependency.csproj">
<Project Path="Tests/Mods/BepisLoader/ResoniteHeadlessBepisModWithPackageDependency/ResoniteHeadlessBepisModWithPackageDependency.csproj">
<BuildDependency Project="Remora.Resonite.Sdk/Remora.Resonite.Sdk.msbuildproj" />
</Project>
<Project Path="Tests/ResoniteHeadlessModWithProjectDependency/ResoniteHeadlessModWithProjectDependency.csproj">
<Project Path="Tests/Mods/BepisLoader/ResoniteHeadlessBepisModWithProjectDependency/ResoniteHeadlessBepisModWithProjectDependency.csproj">
<BuildDependency Project="Remora.Resonite.Sdk/Remora.Resonite.Sdk.msbuildproj" />
</Project>
<Project Path="Tests/ResoniteHeadlessModWithResoniteReference/ResoniteHeadlessModWithResoniteReference.csproj">
<Project Path="Tests/Mods/BepisLoader/ResoniteHeadlessBepisModWithResoniteReference/ResoniteHeadlessBepisModWithResoniteReference.csproj">
<BuildDependency Project="Remora.Resonite.Sdk/Remora.Resonite.Sdk.msbuildproj" />
</Project>
<Project Path="Tests/ResoniteHeadlessPlugin/ResoniteHeadlessPlugin.csproj">
<Project Path="Tests/Mods/BepisLoader/ResoniteBepisMod/ResoniteBepisMod.csproj">
<BuildDependency Project="Remora.Resonite.Sdk/Remora.Resonite.Sdk.msbuildproj" />
</Project>
<Project Path="Tests/Mods/BepisLoader/ResoniteBepisModWithPackageDependency/ResoniteBepisModWithPackageDependency.csproj">
<BuildDependency Project="Remora.Resonite.Sdk/Remora.Resonite.Sdk.msbuildproj" />
</Project>
<Project Path="Tests/Mods/BepisLoader/ResoniteBepisModWithProjectDependency/ResoniteBepisModWithProjectDependency.csproj">
<BuildDependency Project="Remora.Resonite.Sdk/Remora.Resonite.Sdk.msbuildproj" />
</Project>
<Project Path="Tests/Mods/BepisLoader/ResoniteBepisModWithResoniteReference/ResoniteBepisModWithResoniteReference.csproj">
<BuildDependency Project="Remora.Resonite.Sdk/Remora.Resonite.Sdk.msbuildproj" />
</Project>
</Folder>
<Folder Name="/Tests/Mods/MonkeyLoader/">
<Project Path="Tests/Mods/MonkeyLoader/ResoniteHeadlessMLMod/ResoniteHeadlessMLMod.csproj">
<BuildDependency Project="Remora.Resonite.Sdk/Remora.Resonite.Sdk.msbuildproj" />
</Project>
<Project Path="Tests/ResoniteHeadlessPluginWithPackageDependency/ResoniteHeadlessPluginWithPackageDependency.csproj">
<Project Path="Tests/Mods/MonkeyLoader/ResoniteHeadlessMLModWithPackageDependency/ResoniteHeadlessMLModWithPackageDependency.csproj">
<BuildDependency Project="Remora.Resonite.Sdk/Remora.Resonite.Sdk.msbuildproj" />
</Project>
<Project Path="Tests/ResoniteHeadlessPluginWithProjectDependency/ResoniteHeadlessPluginWithProjectDependency.csproj">
<Project Path="Tests/Mods/MonkeyLoader/ResoniteHeadlessMLModWithProjectDependency/ResoniteHeadlessMLModWithProjectDependency.csproj">
<BuildDependency Project="Remora.Resonite.Sdk/Remora.Resonite.Sdk.msbuildproj" />
</Project>
<Project Path="Tests/ResoniteHeadlessPluginWithResoniteReference/ResoniteHeadlessPluginWithResoniteReference.csproj">
<Project Path="Tests/Mods/MonkeyLoader/ResoniteHeadlessMLModWithResoniteReference/ResoniteHeadlessMLModWithResoniteReference.csproj">
<BuildDependency Project="Remora.Resonite.Sdk/Remora.Resonite.Sdk.msbuildproj" />
</Project>
<Project Path="Tests/ResoniteLibrary/ResoniteLibrary.csproj">
<Project Path="Tests/Mods/MonkeyLoader/ResoniteMLMod/ResoniteMLMod.csproj">
<BuildDependency Project="Remora.Resonite.Sdk/Remora.Resonite.Sdk.msbuildproj" />
</Project>
<Project Path="Tests/ResoniteLibraryWithPackageReference/ResoniteLibraryWithPackageReference.csproj">
<Project Path="Tests/Mods/MonkeyLoader/ResoniteMLModWithPackageDependency/ResoniteMLModWithPackageDependency.csproj">
<BuildDependency Project="Remora.Resonite.Sdk/Remora.Resonite.Sdk.msbuildproj" />
</Project>
<Project Path="Tests/ResoniteLibraryWithProjectReference/ResoniteLibraryWithProjectReference.csproj">
<Project Path="Tests/Mods/MonkeyLoader/ResoniteMLModWithProjectDependency/ResoniteMLModWithProjectDependency.csproj">
<BuildDependency Project="Remora.Resonite.Sdk/Remora.Resonite.Sdk.msbuildproj" />
</Project>
<Project Path="Tests/ResoniteLibraryWithResoniteReference/ResoniteLibraryWithResoniteReference.csproj">
<Project Path="Tests/Mods/MonkeyLoader/ResoniteMLModWithResoniteReference/ResoniteMLModWithResoniteReference.csproj">
<BuildDependency Project="Remora.Resonite.Sdk/Remora.Resonite.Sdk.msbuildproj" />
</Project>
<Project Path="Tests/ResoniteMod/ResoniteMod.csproj">
</Folder>
<Folder Name="/Tests/Mods/ResoniteModLoader/">
<Project Path="Tests/Mods/ResoniteModLoader/ResoniteHeadlessRMLMod/ResoniteHeadlessRMLMod.csproj">
<BuildDependency Project="Remora.Resonite.Sdk/Remora.Resonite.Sdk.msbuildproj" />
</Project>
<Project Path="Tests/Mods/ResoniteModLoader/ResoniteHeadlessRMLModWithPackageDependency/ResoniteHeadlessRMLModWithPackageDependency.csproj">
<BuildDependency Project="Remora.Resonite.Sdk/Remora.Resonite.Sdk.msbuildproj" />
</Project>
<Project Path="Tests/Mods/ResoniteModLoader/ResoniteHeadlessRMLModWithProjectDependency/ResoniteHeadlessRMLModWithProjectDependency.csproj">
<BuildDependency Project="Remora.Resonite.Sdk/Remora.Resonite.Sdk.msbuildproj" />
</Project>
<Project Path="Tests/Mods/ResoniteModLoader/ResoniteHeadlessRMLModWithResoniteReference/ResoniteHeadlessRMLModWithResoniteReference.csproj">
<BuildDependency Project="Remora.Resonite.Sdk/Remora.Resonite.Sdk.msbuildproj" />
</Project>
<Project Path="Tests/Mods/ResoniteModLoader/ResoniteRMLMod/ResoniteRMLMod.csproj">
<BuildDependency Project="Remora.Resonite.Sdk/Remora.Resonite.Sdk.msbuildproj" />
</Project>
<Project Path="Tests/Mods/ResoniteModLoader/ResoniteRMLModWithPackageDependency/ResoniteRMLModWithPackageDependency.csproj">
<BuildDependency Project="Remora.Resonite.Sdk/Remora.Resonite.Sdk.msbuildproj" />
</Project>
<Project Path="Tests/Mods/ResoniteModLoader/ResoniteRMLModWithProjectDependency/ResoniteRMLModWithProjectDependency.csproj">
<BuildDependency Project="Remora.Resonite.Sdk/Remora.Resonite.Sdk.msbuildproj" />
</Project>
<Project Path="Tests/Mods/ResoniteModLoader/ResoniteRMLModWithResoniteReference/ResoniteRMLModWithResoniteReference.csproj">
<BuildDependency Project="Remora.Resonite.Sdk/Remora.Resonite.Sdk.msbuildproj" />
</Project>
</Folder>
<Folder Name="/Tests/Plugins/">
<File Path="Tests/Plugins/Directory.Build.props" />
<Project Path="Tests/Plugins/ResoniteHeadlessPlugin/ResoniteHeadlessPlugin.csproj">
<BuildDependency Project="Remora.Resonite.Sdk/Remora.Resonite.Sdk.msbuildproj" />
</Project>
<Project Path="Tests/ResoniteModWithPackageDependency/ResoniteModWithPackageDependency.csproj">
<Project Path="Tests/Plugins/ResoniteHeadlessPluginWithPackageDependency/ResoniteHeadlessPluginWithPackageDependency.csproj">
<BuildDependency Project="Remora.Resonite.Sdk/Remora.Resonite.Sdk.msbuildproj" />
</Project>
<Project Path="Tests/ResoniteModWithProjectDependency/ResoniteModWithProjectDependency.csproj">
<Project Path="Tests/Plugins/ResoniteHeadlessPluginWithProjectDependency/ResoniteHeadlessPluginWithProjectDependency.csproj">
<BuildDependency Project="Remora.Resonite.Sdk/Remora.Resonite.Sdk.msbuildproj" />
</Project>
<Project Path="Tests/ResoniteModWithResoniteReference/ResoniteModWithResoniteReference.csproj">
<Project Path="Tests/Plugins/ResoniteHeadlessPluginWithResoniteReference/ResoniteHeadlessPluginWithResoniteReference.csproj">
<BuildDependency Project="Remora.Resonite.Sdk/Remora.Resonite.Sdk.msbuildproj" />
</Project>
<Project Path="Tests/ResonitePlugin/ResonitePlugin.csproj">
<Project Path="Tests/Plugins/ResonitePlugin/ResonitePlugin.csproj">
<BuildDependency Project="Remora.Resonite.Sdk/Remora.Resonite.Sdk.msbuildproj" />
</Project>
<Project Path="Tests/ResonitePluginWithPackageDependency/ResonitePluginWithPackageDependency.csproj">
<Project Path="Tests/Plugins/ResonitePluginWithPackageDependency/ResonitePluginWithPackageDependency.csproj">
<BuildDependency Project="Remora.Resonite.Sdk/Remora.Resonite.Sdk.msbuildproj" />
</Project>
<Project Path="Tests/ResonitePluginWithProjectDependency/ResonitePluginWithProjectDependency.csproj">
<Project Path="Tests/Plugins/ResonitePluginWithProjectDependency/ResonitePluginWithProjectDependency.csproj">
<BuildDependency Project="Remora.Resonite.Sdk/Remora.Resonite.Sdk.msbuildproj" />
</Project>
<Project Path="Tests/ResonitePluginWithResoniteReference/ResonitePluginWithResoniteReference.csproj">
<Project Path="Tests/Plugins/ResonitePluginWithResoniteReference/ResonitePluginWithResoniteReference.csproj">
<BuildDependency Project="Remora.Resonite.Sdk/Remora.Resonite.Sdk.msbuildproj" />
</Project>
</Folder>
Expand Down
3 changes: 2 additions & 1 deletion Remora.Resonite.Sdk/ReferenceGeneration/Shared.json
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,8 @@
"ProtoFlux.*?\\.dll$",
"Renderite\\.Shared\\.dll$",
"SkyFrost.*?\\.dll$",
"YellowDogMan.*?\\.dll$"
"YellowDogMan.*?\\.dll$",
"ResoniteLink\\.dll$"
],
"ExcludePatterns": []
}
4 changes: 2 additions & 2 deletions Remora.Resonite.Sdk/Remora.Resonite.Sdk.msbuildproj
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@
<PropertyGroup>
<Title>Remora.Resonite.Sdk</Title>
<Description>A .NET SDK for developing Resonite mods and plugins.</Description>
<VersionPrefix>2.0.10</VersionPrefix>
<PackageReleaseNotes>Update reference assemblies to Resonite 22026.1.16.273.</PackageReleaseNotes>
<VersionPrefix>2.1.0</VersionPrefix>
<PackageReleaseNotes>Update reference assemblies to Resonite 2026.3.11.1400.</PackageReleaseNotes>
<IsPackable>true</IsPackable>
<PackageTags>MSBuild;MSBuildSdk;Remora;Resonite;Renderite;RML;MonkeyLoader;Mod;Mods;BepisLoader;BepInEx;Plugin;Plugins</PackageTags>
<PackageType>MSBuildSdk</PackageType>
Expand Down
3 changes: 3 additions & 0 deletions Remora.Resonite.Sdk/Sdk/ProjectTypes/Mod.BepisLoader.targets
Original file line number Diff line number Diff line change
@@ -1,7 +1,10 @@
<Project>
<PropertyGroup>
<DefineConstants>$(DefineConstants);RESONITE_BEPISLOADER</DefineConstants>

<_MainOutputDirectory>BepInEx/plugins/$(AssemblyName)/</_MainOutputDirectory>

<ResoniteHasIgnoreAccessChecksAttribute>true</ResoniteHasIgnoreAccessChecksAttribute>
</PropertyGroup>

<PropertyGroup Condition="'$(ResoniteTarget)' != 'renderite'">
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,6 @@
<Import Project="Shared.ResoniteModLoader.targets" />

<ItemGroup>
<PackageReference Include="MonkeyLoader.GamePacks.ResoniteModLoader" Version="4.2.0.1" />
<PackageReference Include="MonkeyLoader.GamePacks.ResoniteModLoader" Version="5.0.1" />
</ItemGroup>
</Project>
Loading
Loading