CommandReference/SamplePlugin/Plugin.cs

109 lines
3.5 KiB
C#

using System;
using System.IO;
using Dalamud.Game.Command;
using Dalamud.Interface.Windowing;
using Dalamud.IoC;
using Dalamud.Plugin;
using Dalamud.Plugin.Services;
using Dalamud.Utility;
using SamplePlugin.Windows;
namespace SamplePlugin
{
public sealed class Plugin : IDalamudPlugin
{
public static string Name => "Sample Plugin";
private const string CommandName = "/pmycommand";
[PluginService]
private DalamudPluginInterface pluginInterface { get; set; } = null!;
private ICommandManager commandManager { get; init; }
public Configuration configuration { get; init; }
internal WindowSystem windowSystem = new("SamplePlugin");
private ConfigWindow ConfigWindow { get; init; }
private MainWindow MainWindow { get; init; }
public Plugin(
[RequiredVersion("1.0")] DalamudPluginInterface pluginInterface,
[RequiredVersion("1.0")] ICommandManager commandManager,
[RequiredVersion("1.0")] IPluginLog log
)
{
this.pluginInterface = pluginInterface;
this.commandManager = commandManager;
var pluginList = pluginInterface.InstalledPlugins;
foreach (var plugin in pluginList)
{
var assemblyName = plugin.GetType().Assembly.GetName().Name;
if (
!assemblyName.IsNullOrWhitespace()
&& !assemblyName.Equals(plugin.InternalName, StringComparison.Ordinal)
)
{
log.Warning(
"Miss-match: Name: {plugin} AssName: {assemblyName}",
plugin.Name,
assemblyName
);
}
}
configuration =
pluginInterface.GetPluginConfig() as Configuration ?? new Configuration();
configuration.Initialize(this.pluginInterface);
// you might normally want to embed resources and load them from the manifest stream
var imagePath = Path.Combine(
this.pluginInterface.AssemblyLocation.Directory?.FullName!,
"goat.png"
);
var goatImage = this.pluginInterface.UiBuilder.LoadImage(imagePath);
ConfigWindow = new ConfigWindow(this);
MainWindow = new MainWindow(this, goatImage);
windowSystem.AddWindow(ConfigWindow);
windowSystem.AddWindow(MainWindow);
_ = this.commandManager.AddHandler(
CommandName,
new CommandInfo(OnCommand)
{
HelpMessage = "A useful message to display in /xlhelp"
}
);
this.pluginInterface.UiBuilder.Draw += DrawUI;
this.pluginInterface.UiBuilder.OpenConfigUi += DrawConfigUI;
}
public void Dispose()
{
this.windowSystem.RemoveAllWindows();
ConfigWindow.Dispose();
MainWindow.Dispose();
this.commandManager.RemoveHandler(CommandName);
}
private void OnCommand(string command, string args)
{
// in response to the slash command, just display our main ui
MainWindow.IsOpen = true;
}
private void DrawUI()
{
this.windowSystem.Draw();
}
public void DrawConfigUI()
{
ConfigWindow.IsOpen = true;
}
}
}