Skip to content
Closed
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
25 changes: 21 additions & 4 deletions BepInEx.Core/Contract/Attributes.cs
Original file line number Diff line number Diff line change
Expand Up @@ -21,11 +21,15 @@ public class BepInPlugin : Attribute
/// <param name="GUID">The unique identifier of the plugin. Should not change between plugin versions.</param>
/// <param name="Name">The user friendly name of the plugin. Is able to be changed between versions.</param>
/// <param name="Version">The specific version of the plugin.</param>
public BepInPlugin(string GUID, string Name, string Version)
/// <param name="Author">The author of the plugin.</param>
/// <param name="Link">The link to the plugin's website or repository.</param>
public BepInPlugin(string GUID, string Name, string Version, string Author = null, string Link = null)

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

breaks binary compatibility, also makes no sense to do this since we already have a lot of mods which use ResonitePlugin from the shim, and you can't just delete the attribute from the shim without breaking all already released mods.

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

theoretically we if all current plugins reference the shim's ResonitePlugin, we would just need to push an update to that and they would work

{
this.GUID = GUID;
this.Name = Name;
this.Version = TryParseLongVersion(Version);
this.Author = Author;
this.Link = Link;
}

/// <summary>
Expand All @@ -45,6 +49,16 @@ public BepInPlugin(string GUID, string Name, string Version)
/// </summary>
public Version Version { get; protected set; }

/// <summary>
/// The author of the plugin.
/// </summary>
public string Author { get; protected set; }

/// <summary>
/// The link to the plugin's website or repository.
/// </summary>
public string Link { get; protected set; }

private static Version TryParseLongVersion(string version)
{
if (Version.TryParse(version, out var v))
Expand All @@ -70,9 +84,12 @@ internal static BepInPlugin FromCecilType(TypeDefinition td)
if (attr == null)
return null;

return new BepInPlugin((string) attr.ConstructorArguments[0].Value,
(string) attr.ConstructorArguments[1].Value,
(string) attr.ConstructorArguments[2].Value);
return new BepInPlugin(
(string) attr.ConstructorArguments[0].Value,
(string) attr.ConstructorArguments[1].Value,
(string) attr.ConstructorArguments[2].Value,
attr.ConstructorArguments.Count > 3 ? (string) attr.ConstructorArguments[3].Value : null,
attr.ConstructorArguments.Count > 4 ? (string) attr.ConstructorArguments[4].Value : null);
}
}

Expand Down
10 changes: 9 additions & 1 deletion BepInEx.Core/Contract/PluginInfo.cs
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,9 @@ void ICacheable.Save(BinaryWriter bw)
bw.Write(Metadata.Name);
bw.Write(Metadata.Version.ToString());

bw.Write(Metadata.Author ?? string.Empty);
bw.Write(Metadata.Link ?? string.Empty);

var processList = Processes.ToList();
bw.Write(processList.Count);
foreach (var bepInProcess in processList)
Expand All @@ -79,7 +82,12 @@ void ICacheable.Load(BinaryReader br)
TypeName = br.ReadString();
Location = br.ReadString();

Metadata = new BepInPlugin(br.ReadString(), br.ReadString(), br.ReadString());
Metadata = new BepInPlugin(
br.ReadString(),
br.ReadString(),
br.ReadString(),
br.ReadString(),
br.ReadString());

var processListCount = br.ReadInt32();
var processList = new List<BepInProcess>(processListCount);
Expand Down
25 changes: 21 additions & 4 deletions BepInEx.Preloader.Core/Patching/Attributes.cs
Original file line number Diff line number Diff line change
Expand Up @@ -14,11 +14,15 @@ public class PatcherPluginInfoAttribute : Attribute
/// <param name="GUID">The unique identifier of the plugin. Should not change between plugin versions.</param>
/// <param name="Name">The user friendly name of the plugin. Is able to be changed between versions.</param>
/// <param name="Version">The specific version of the plugin.</param>
public PatcherPluginInfoAttribute(string GUID, string Name, string Version)
/// <param name="Author">The author of the plugin.</param>
/// <param name="Link">The link to the plugin's website or repository.</param>
public PatcherPluginInfoAttribute(string GUID, string Name, string Version, string Author = null, string Link = null)

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

also breaks binary compatibility

{
this.GUID = GUID;
this.Name = Name;
this.Version = TryParseLongVersion(Version);
this.Author = Author;
this.Link = Link;
}

/// <summary>
Expand All @@ -38,6 +42,16 @@ public PatcherPluginInfoAttribute(string GUID, string Name, string Version)
/// </summary>
public Version Version { get; protected set; }

/// <summary>
/// The author of the plugin.
/// </summary>
public string Author { get; protected set; }

/// <summary>
/// The link to the plugin's website or repository.
/// </summary>
public string Link { get; protected set; }

private static Version TryParseLongVersion(string version)
{
if (Version.TryParse(version, out var v))
Expand All @@ -63,9 +77,12 @@ internal static PatcherPluginInfoAttribute FromCecilType(TypeDefinition td)
if (attr == null)
return null;

return new PatcherPluginInfoAttribute((string) attr.ConstructorArguments[0].Value,
(string) attr.ConstructorArguments[1].Value,
(string) attr.ConstructorArguments[2].Value);
return new PatcherPluginInfoAttribute(
(string) attr.ConstructorArguments[0].Value,
(string) attr.ConstructorArguments[1].Value,
(string) attr.ConstructorArguments[2].Value,
attr.ConstructorArguments.Count > 3 ? (string) attr.ConstructorArguments[3].Value : null,
attr.ConstructorArguments.Count > 4 ? (string) attr.ConstructorArguments[4].Value : null);
}

internal static PatcherPluginInfoAttribute FromType(Type type)
Expand Down
Loading