Rebrand fork to Forgeimizer with Craftimizer conflict detector

User-facing rebrand of the Hellion Forge maintenance fork so it installs
as a separate Dalamud plugin slot named Forgeimizer and refuses to load
in parallel with upstream Craftimizer. Internal namespaces stay as
Craftimizer.* — this is a deliberate light-rename so a future upstream
merge stays straightforward.

Manifest and build:
- csproj AssemblyName = Forgeimizer (DLL is now Forgeimizer.dll)
- csproj PackageProjectUrl points at the Hellion Gitea
- csproj Authors dual-credits Asriel Camora and Hellion Forge
- Craftimizer.json renamed to Forgeimizer.json with Name/InternalName/
  Punchline/Description/RepoUrl/IconUrl/ImageUrls/Tags updated to
  Forgeimizer + Hellion-hosted URLs

Conflict detector:
- New Utils/CraftimizerConflictDetector.cs checks
  pluginInterface.InstalledPlugins for an active InternalName=="Craftimizer"
  and throws InvalidOperationException with /xlplugins guidance if found
- Plugin.cs constructor calls the detector before Service.Initialize so
  no Dalamud state is touched on conflict

Other user-facing strings:
- WindowSystem name "Craftimizer" -> "Forgeimizer"
- Settings about-tab header "Craftimizer" -> "Forgeimizer", hyperlink
  retargeted to the Hellion Gitea repo (upstream attribution stays on
  the WorkingRobot author line below)
- Configuration.MacroMateName default "Craftimizer" -> "Forgeimizer"
- /craftimizer slash command gains a /forgeimizer alias (all other
  upstream commands stay unchanged for muscle-memory compatibility)

Docs:
- README rewritten with Forgeimizer title, install section, conflict
  notice, slash command table, dual-holder license footer
- COPYRIGHT title and source-code block updated to call out both the
  rebrand and the SDK 15 migration as Hellion Forge fork maintenance
- NOTICE.md direct-word-to-Asriel section now also covers the rebrand
  scope and the conflict detector language, with explicit invitation
  to flag anything that does not sit right

LICENSE remains unchanged — Asriel Camora's MIT notice is mandatory.
Plugin Version stays at 2.9.1.1; this is a rebrand cycle, not a
version bump.
This commit is contained in:
2026-05-26 20:03:23 +02:00
parent 19c7c784f8
commit 923d421e57
10 changed files with 213 additions and 118 deletions
+1 -1
View File
@@ -139,7 +139,7 @@ public class MacroCopyConfiguration
public int MaxMacroCount { get; set; } = 5;
// CopyToMacroMate
public string MacroMateName { get; set; } = "Craftimizer";
public string MacroMateName { get; set; } = "Forgeimizer";
public string MacroMateParent { get; set; } = string.Empty;
// Add /nextmacro [down]
+3 -2
View File
@@ -1,9 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<Project Sdk="Dalamud.NET.Sdk/15.0.0">
<PropertyGroup>
<Authors>Asriel Camora</Authors>
<Authors>Asriel Camora (original); Jon Kazama / Hellion Forge (fork)</Authors>
<Version>2.9.1.1</Version>
<PackageProjectUrl>https://github.com/WorkingRobot/Craftimizer.git</PackageProjectUrl>
<AssemblyName>Forgeimizer</AssemblyName>
<PackageProjectUrl>https://gitea.hellion-forge.cloud/JonKazama-Hellion/Craftimizer</PackageProjectUrl>
<Configurations>Debug;Release</Configurations>
</PropertyGroup>
-30
View File
@@ -1,30 +0,0 @@
{
"Author": "Asriel",
"Name": "Craftimizer",
"Punchline": "Simulate crafts, create computer-assisted macros, and get mid-craft suggestions from the comfort of your own game!",
"Description": "Allows you to generate macros and simulate all sorts of crafts without having to open another app. Open your crafting log to get started!",
"RepoUrl": "https://github.com/WorkingRobot/Craftimizer",
"InternalName": "Craftimizer",
"ApplicableVersion": "any",
"Tags": [
"crafting",
"doh",
"craft",
"macro",
"solver",
"generator",
"generate",
"simulate",
"sim",
"simulator"
],
"CategoryTags": [
"Jobs"
],
"IconUrl": "https://git.camora.dev/asriel/Craftimizer/raw/branch/main/icon.png",
"ImageUrls": [
"https://git.camora.dev/asriel/Craftimizer/raw/branch/main/Images/RecipeNote.png",
"https://git.camora.dev/asriel/Craftimizer/raw/branch/main/Images/SynthHelper.png",
"https://git.camora.dev/asriel/Craftimizer/raw/branch/main/Images/MacroEditor.png"
]
}
+32
View File
@@ -0,0 +1,32 @@
{
"Author": "Asriel Camora (original); Jon Kazama / Hellion Forge (fork)",
"Name": "Forgeimizer",
"Punchline": "A Hellion Forge plugin. Crafting simulator and macro solver for FFXIV, maintenance fork of Asriel Camora's Craftimizer kept current for Dalamud API 15+.",
"Description": "A Hellion Forge plugin — a maintenance fork of Craftimizer by Asriel Camora, brought back to life on Dalamud SDK 15 for FFXIV 7.5+.\n\nSimulate crafts, create computer-assisted macros, and get mid-craft suggestions from the comfort of your own game. Open your crafting log to get started.\n\nAll features below come from upstream Craftimizer, unchanged in this fork:\n- Crafting simulator with full action state tracking\n- Macro solver (Raphael Rust crate, bundled)\n- Recipe note overlay\n- Synthesis helper window\n- Macro editor and macro list\n\nThis fork:\n- Refuses to load if upstream Craftimizer is active (no parallel hooks)\n- No features added, no design changes vs upstream\n- Will archive if Asriel ships an official SDK 15 update upstream\n\nSource: https://gitea.hellion-forge.cloud/JonKazama-Hellion/Craftimizer",
"RepoUrl": "https://gitea.hellion-forge.cloud/JonKazama-Hellion/Craftimizer",
"InternalName": "Forgeimizer",
"ApplicableVersion": "any",
"Tags": [
"crafting",
"doh",
"craft",
"macro",
"solver",
"generator",
"generate",
"simulate",
"sim",
"simulator",
"hellion",
"forge"
],
"CategoryTags": [
"Jobs"
],
"IconUrl": "https://gitea.hellion-forge.cloud/JonKazama-Hellion/Craftimizer/raw/branch/main/icon.png",
"ImageUrls": [
"https://gitea.hellion-forge.cloud/JonKazama-Hellion/Craftimizer/raw/branch/main/Images/RecipeNote.png",
"https://gitea.hellion-forge.cloud/JonKazama-Hellion/Craftimizer/raw/branch/main/Images/SynthHelper.png",
"https://gitea.hellion-forge.cloud/JonKazama-Hellion/Craftimizer/raw/branch/main/Images/MacroEditor.png"
]
}
+4 -2
View File
@@ -37,9 +37,11 @@ public sealed class Plugin : IDalamudPlugin
public Plugin(IDalamudPluginInterface pluginInterface)
{
CraftimizerConflictDetector.ThrowIfUpstreamLoaded(pluginInterface);
Service.Initialize(this, pluginInterface);
WindowSystem = new("Craftimizer");
WindowSystem = new("Forgeimizer");
Configuration = Configuration.Load();
IconManager = new();
Hooks = new();
@@ -120,7 +122,7 @@ public sealed class Plugin : IDalamudPlugin
public void ExecuteRetrySynthHelper() =>
SynthHelperWindow.AttemptRetry();
[Command(name: "/craftimizer", description: "Open the settings window.")]
[Command(name: "/craftimizer", aliases: "/forgeimizer", description: "Open the settings window.")]
private void OpenSettingsWindowForced() =>
OpenSettingsWindow(true);
@@ -0,0 +1,27 @@
using System.Linq;
using Dalamud.Plugin;
namespace Craftimizer.Utils;
internal static class CraftimizerConflictDetector
{
private const string UpstreamInternalName = "Craftimizer";
public static void ThrowIfUpstreamLoaded(IDalamudPluginInterface pluginInterface)
{
var conflict = pluginInterface.InstalledPlugins.FirstOrDefault(p =>
p.InternalName == UpstreamInternalName && p.IsLoaded
);
if (conflict is null)
return;
throw new System.InvalidOperationException(
"Forgeimizer cannot load while the upstream Craftimizer plugin is active.\n\n"
+ "Both plugins register the same Dalamud hooks (UseAction, IsActionHighlighted) "
+ "and would conflict if loaded together.\n\n"
+ "Action: open /xlplugins, disable the upstream 'Craftimizer' plugin, "
+ "then re-enable Forgeimizer."
);
}
}
+2 -2
View File
@@ -1113,8 +1113,8 @@ public sealed class Settings : Window, IDisposable
using (HeaderFont.Push())
{
ImGuiUtils.AlignCentered(ImGui.CalcTextSize("Craftimizer").X);
ImGuiUtils.Hyperlink("Craftimizer", "https://github.com/WorkingRobot/Craftimizer", false);
ImGuiUtils.AlignCentered(ImGui.CalcTextSize("Forgeimizer").X);
ImGuiUtils.Hyperlink("Forgeimizer", "https://gitea.hellion-forge.cloud/JonKazama-Hellion/Craftimizer", false);
}
using (SubheaderFont.Push())