Files
se-launcher/PluginLoader/Data/ModPlugin.cs

100 lines
2.5 KiB
C#

using System.Reflection;
using System.Xml.Serialization;
using ProtoBuf;
using Sandbox.Graphics.GUI;
using VRage.Game;
using VRage.GameServices;
namespace PluginLoader.Data;
[ProtoContract]
public class ModPlugin : PluginData, ISteamItem
{
private bool isLegacy;
private string modLocation;
public override string Source => "Mod";
[ProtoMember(1)]
[XmlArray]
[XmlArrayItem("Id")]
public ulong[] DependencyIds { get; set; } = new ulong[0];
[XmlIgnore] public ModPlugin[] Dependencies { get; set; } = new ModPlugin[0];
public string ModLocation
{
get
{
if (modLocation != null)
return modLocation;
modLocation = Path.Combine(Path.GetFullPath(@"..\..\..\workshop\content\244850\"), WorkshopId.ToString());
if (Directory.Exists(modLocation) && !Directory.Exists(Path.Combine(modLocation, "Data")))
{
var legacyFile = Directory.EnumerateFiles(modLocation, "*_legacy.bin").FirstOrDefault();
if (legacyFile != null)
{
isLegacy = true;
modLocation = legacyFile;
}
}
return modLocation;
}
}
public bool Exists => Directory.Exists(ModLocation) || (isLegacy && File.Exists(modLocation));
[XmlIgnore] public ulong WorkshopId { get; private set; }
public override string Id
{
get => base.Id;
set
{
base.Id = value;
WorkshopId = ulong.Parse(Id);
}
}
public override Assembly GetAssembly()
{
return null;
}
public override bool TryLoadAssembly(out Assembly a)
{
a = null;
return false;
}
public override void Show()
{
MyGuiSandbox.OpenUrl("https://steamcommunity.com/workshop/filedetails/?id=" + Id,
UrlOpenMode.SteamOrExternalWithConfirm);
}
public MyObjectBuilder_Checkpoint.ModItem GetModItem()
{
var modItem = new MyObjectBuilder_Checkpoint.ModItem(WorkshopId, "Steam");
modItem.SetModData(new WorkshopItem(ModLocation));
return modItem;
}
public MyModContext GetModContext()
{
var modContext = new MyModContext();
modContext.Init(GetModItem());
modContext.Init(WorkshopId.ToString(), null, ModLocation);
return modContext;
}
private class WorkshopItem : MyWorkshopItem
{
public WorkshopItem(string folder)
{
Folder = folder;
}
}
}