Compare commits
2 Commits
19c7c784f8
...
a52b9e8d76
| Author | SHA1 | Date | |
|---|---|---|---|
| a52b9e8d76 | |||
| 923d421e57 |
@@ -1,4 +1,4 @@
|
|||||||
Craftimizer — Hellion fork of the FFXIV crafting plugin by Asriel Camora
|
Forgeimizer — Hellion Forge fork of Craftimizer by Asriel Camora
|
||||||
|
|
||||||
═══════════════════════════════════════════════════════════════════
|
═══════════════════════════════════════════════════════════════════
|
||||||
Source code
|
Source code
|
||||||
@@ -8,15 +8,21 @@ Copyright (c) 2023 Asriel Camora
|
|||||||
Original author of Craftimizer (https://github.com/WorkingRobot/Craftimizer).
|
Original author of Craftimizer (https://github.com/WorkingRobot/Craftimizer).
|
||||||
The entire architecture, simulator, solver, recipe data layer,
|
The entire architecture, simulator, solver, recipe data layer,
|
||||||
synthesis hooks, macro engine, and every UI window are Asriel's
|
synthesis hooks, macro engine, and every UI window are Asriel's
|
||||||
work. This fork would not exist without it.
|
work. Forgeimizer would not exist without it.
|
||||||
|
|
||||||
Copyright (c) 2026 Hellion Online Media
|
Copyright (c) 2026 Hellion Online Media
|
||||||
Hellion fork maintenance: Dalamud SDK 14 → 15 migration for the
|
Hellion Forge fork maintenance:
|
||||||
FFXIV 7.5 / Dalamud API 15 cycle. Scope: the ValueType → AtkValueType
|
1. Rebrand to Forgeimizer (AssemblyName, InternalName, plugin
|
||||||
rename in FFXIVClientStructs, the local IEndObject interface that
|
manifest, WindowSystem name, conflict detector, /forgeimizer
|
||||||
replaces the removed Dalamud ImRaii.IEndObject, the typed ImRaii
|
slash command alias).
|
||||||
disposable returns (TabItemDisposable, ColorDisposable), and the
|
2. Dalamud SDK 14 → 15 migration for the FFXIV 7.5 / Dalamud
|
||||||
ImRaii.TabItem ref-bool lifetime fix. No functional changes.
|
API 15 cycle. Scope: the ValueType → AtkValueType rename in
|
||||||
|
FFXIVClientStructs, the local IEndObject interface that
|
||||||
|
replaces the removed Dalamud ImRaii.IEndObject, the typed
|
||||||
|
ImRaii disposable returns (TabItemDisposable, ColorDisposable),
|
||||||
|
and the ImRaii.TabItem ref-bool lifetime fix.
|
||||||
|
|
||||||
|
No functional changes to crafting logic, solver, or UI behaviour.
|
||||||
|
|
||||||
Source code is licensed under the MIT License. The full Licence text
|
Source code is licensed under the MIT License. The full Licence text
|
||||||
lives in the LICENSE file at the root of this repository.
|
lives in the LICENSE file at the root of this repository.
|
||||||
@@ -33,10 +39,12 @@ Copyright (c) 2026 Florian Eck
|
|||||||
separate permission from the copyright holder.
|
separate permission from the copyright holder.
|
||||||
|
|
||||||
Copyright (c) 2023 Asriel Camora
|
Copyright (c) 2023 Asriel Camora
|
||||||
Designer of the Craftimizer plugin icon (icon.png), the embedded
|
Designer of the original Craftimizer plugin icon (icon.png), the
|
||||||
graphics (Craftimizer/Graphics/*.png), and the documentation
|
embedded graphics (Craftimizer/Graphics/*.png), and the
|
||||||
screenshots (Images/*.png). Asset reuse follows the MIT Licence
|
documentation screenshots (Images/*.png). Forgeimizer continues
|
||||||
above.
|
to use these assets unchanged as both attribution to the upstream
|
||||||
|
author and as the Dalamud plugin icon. Asset reuse follows the
|
||||||
|
MIT Licence above.
|
||||||
|
|
||||||
═══════════════════════════════════════════════════════════════════
|
═══════════════════════════════════════════════════════════════════
|
||||||
Bundled binary assets
|
Bundled binary assets
|
||||||
|
|||||||
@@ -139,7 +139,7 @@ public class MacroCopyConfiguration
|
|||||||
public int MaxMacroCount { get; set; } = 5;
|
public int MaxMacroCount { get; set; } = 5;
|
||||||
|
|
||||||
// CopyToMacroMate
|
// CopyToMacroMate
|
||||||
public string MacroMateName { get; set; } = "Craftimizer";
|
public string MacroMateName { get; set; } = "Forgeimizer";
|
||||||
public string MacroMateParent { get; set; } = string.Empty;
|
public string MacroMateParent { get; set; } = string.Empty;
|
||||||
|
|
||||||
// Add /nextmacro [down]
|
// Add /nextmacro [down]
|
||||||
|
|||||||
@@ -1,9 +1,10 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<Project Sdk="Dalamud.NET.Sdk/15.0.0">
|
<Project Sdk="Dalamud.NET.Sdk/15.0.0">
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<Authors>Asriel Camora</Authors>
|
<Authors>Asriel Camora (original); Jon Kazama / Hellion Forge (fork)</Authors>
|
||||||
<Version>2.9.1.1</Version>
|
<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>
|
<Configurations>Debug;Release</Configurations>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
|
|||||||
@@ -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"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
@@ -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"
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -37,9 +37,11 @@ public sealed class Plugin : IDalamudPlugin
|
|||||||
|
|
||||||
public Plugin(IDalamudPluginInterface pluginInterface)
|
public Plugin(IDalamudPluginInterface pluginInterface)
|
||||||
{
|
{
|
||||||
|
CraftimizerConflictDetector.ThrowIfUpstreamLoaded(pluginInterface);
|
||||||
|
|
||||||
Service.Initialize(this, pluginInterface);
|
Service.Initialize(this, pluginInterface);
|
||||||
|
|
||||||
WindowSystem = new("Craftimizer");
|
WindowSystem = new("Forgeimizer");
|
||||||
Configuration = Configuration.Load();
|
Configuration = Configuration.Load();
|
||||||
IconManager = new();
|
IconManager = new();
|
||||||
Hooks = new();
|
Hooks = new();
|
||||||
@@ -120,7 +122,7 @@ public sealed class Plugin : IDalamudPlugin
|
|||||||
public void ExecuteRetrySynthHelper() =>
|
public void ExecuteRetrySynthHelper() =>
|
||||||
SynthHelperWindow.AttemptRetry();
|
SynthHelperWindow.AttemptRetry();
|
||||||
|
|
||||||
[Command(name: "/craftimizer", description: "Open the settings window.")]
|
[Command(name: "/craftimizer", aliases: "/forgeimizer", description: "Open the settings window.")]
|
||||||
private void OpenSettingsWindowForced() =>
|
private void OpenSettingsWindowForced() =>
|
||||||
OpenSettingsWindow(true);
|
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."
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1113,8 +1113,8 @@ public sealed class Settings : Window, IDisposable
|
|||||||
|
|
||||||
using (HeaderFont.Push())
|
using (HeaderFont.Push())
|
||||||
{
|
{
|
||||||
ImGuiUtils.AlignCentered(ImGui.CalcTextSize("Craftimizer").X);
|
ImGuiUtils.AlignCentered(ImGui.CalcTextSize("Forgeimizer").X);
|
||||||
ImGuiUtils.Hyperlink("Craftimizer", "https://github.com/WorkingRobot/Craftimizer", false);
|
ImGuiUtils.Hyperlink("Forgeimizer", "https://gitea.hellion-forge.cloud/JonKazama-Hellion/Craftimizer", false);
|
||||||
}
|
}
|
||||||
|
|
||||||
using (SubheaderFont.Push())
|
using (SubheaderFont.Push())
|
||||||
|
|||||||
@@ -2,41 +2,52 @@
|
|||||||
|
|
||||||
## Acknowledgements
|
## Acknowledgements
|
||||||
|
|
||||||
This Craftimizer fork is built on
|
Forgeimizer is built on
|
||||||
[Craftimizer](https://github.com/WorkingRobot/Craftimizer) by
|
[Craftimizer](https://github.com/WorkingRobot/Craftimizer) by
|
||||||
**[Asriel Camora](https://github.com/WorkingRobot)**, who built and
|
**[Asriel Camora](https://github.com/WorkingRobot)**, who built and
|
||||||
maintained the plugin for years. The entire architecture, the crafting
|
maintained the plugin for years. The entire architecture, the crafting
|
||||||
simulator, the macro solver, the recipe data layer, the synthesis helper,
|
simulator, the macro solver, the recipe data layer, the synthesis helper,
|
||||||
and every UI window come from Asriel's work. Without Craftimizer, this
|
and every UI window come from Asriel's work. Without Craftimizer, Forgeimizer
|
||||||
fork would not exist.
|
would not exist.
|
||||||
|
|
||||||
If this fork is useful to you, the credit for that belongs in large
|
If Forgeimizer is useful to you, the credit for that belongs in large part
|
||||||
part to Asriel.
|
to Asriel.
|
||||||
|
|
||||||
## A direct word to Asriel
|
## A direct word to Asriel
|
||||||
|
|
||||||
Hi. I am Jon. I forked Craftimizer because the upstream `main` branch
|
Hi. I am Jon. I forked Craftimizer because the upstream `main` branch had
|
||||||
had not received an update past FFXIV 7.4, and I wanted a working
|
not received an update past FFXIV 7.4, and I wanted a working crafting
|
||||||
crafting plugin for personal use that still loads on the current Dalamud
|
plugin for personal use that still loads on the current Dalamud API. This
|
||||||
API. This is not a "do it better" fork. The opposite is true. I would
|
is not a "do it better" fork. The opposite is true. I would have happily
|
||||||
have happily kept using upstream if it had stayed current.
|
kept using upstream if it had stayed current.
|
||||||
|
|
||||||
What this fork adds is purely a Dalamud SDK 14 → 15 migration cycle.
|
What this fork adds is purely:
|
||||||
Concretely, three changes in `FFXIVClientStructs` and Dalamud's `ImRaii`
|
|
||||||
namespace were renamed or removed; this fork ports the affected call
|
|
||||||
sites to the new symbol names and adds a local `IEndObject` interface to
|
|
||||||
replace the nested one Dalamud removed. No new features, no design
|
|
||||||
departures, no rebranding of internal namespaces. Where I had to modify
|
|
||||||
your sources I kept the edits minimal, isolated to the lines the SDK 15
|
|
||||||
compiler refused, and revertible.
|
|
||||||
|
|
||||||
If you pick Craftimizer back up and ship an upstream SDK 15 update, this
|
1. A Dalamud SDK 14 → 15 migration cycle. Three changes in
|
||||||
fork folds back into a pure mirror and the recommendation will be to
|
`FFXIVClientStructs` and Dalamud's `ImRaii` namespace were renamed or
|
||||||
switch back to your build.
|
removed; this fork ports the affected call sites to the new symbol
|
||||||
|
names and adds a local `IEndObject` interface to replace the nested
|
||||||
|
one Dalamud removed.
|
||||||
|
2. A user-facing rename to **Forgeimizer** so the plugin installs into
|
||||||
|
its own Dalamud slot and does not collide with your build in the
|
||||||
|
plugin list. A conflict detector hard-blocks the load if your
|
||||||
|
upstream `Craftimizer` plugin is active. Internal namespaces stay as
|
||||||
|
`Craftimizer.*`, the source tree structure is identical, and the
|
||||||
|
only renamed strings are the assembly name, the manifest, the window
|
||||||
|
system name, the about-tab title, the MacroMate default name, and a
|
||||||
|
`/forgeimizer` slash-command alias next to your `/craftimizer`.
|
||||||
|
|
||||||
|
No new features, no design departures, no rebranding of internal
|
||||||
|
namespaces. Where I had to modify your sources I kept the edits minimal,
|
||||||
|
isolated to the lines the SDK 15 compiler refused, and revertible.
|
||||||
|
|
||||||
|
If you pick Craftimizer back up and ship an upstream SDK 15 update,
|
||||||
|
Forgeimizer folds back into a pure mirror and the recommendation will be
|
||||||
|
to switch back to your build.
|
||||||
|
|
||||||
If anything in this fork ever steps on something you would not be okay
|
If anything in this fork ever steps on something you would not be okay
|
||||||
with — attribution, naming, anything else — please reach out and I will
|
with — attribution, the `Forgeimizer` naming, the conflict detector
|
||||||
fix it. Genuinely.
|
language, anything else — please reach out and I will fix it. Genuinely.
|
||||||
|
|
||||||
## Why this fork exists
|
## Why this fork exists
|
||||||
|
|
||||||
@@ -47,9 +58,12 @@ API jump from level 14 to 15 in early 2026, and Craftimizer stopped
|
|||||||
loading from then on. My personal crafting workflow depends on it, so I
|
loading from then on. My personal crafting workflow depends on it, so I
|
||||||
took the maintenance burden on for a while.
|
took the maintenance burden on for a while.
|
||||||
|
|
||||||
This fork is maintained for personal and friend-circle use under Hellion
|
Forgeimizer is maintained for personal and friend-circle use under Hellion
|
||||||
Forge. It is not a competing project and does not target the broader
|
Forge. It is not a competing project and does not target the broader
|
||||||
Craftimizer user base.
|
Craftimizer user base. The rename to Forgeimizer exists so users who
|
||||||
|
install through the Hellion Forge custom repo can run it side-by-side with
|
||||||
|
the upstream Craftimizer install in the Dalamud plugin list without one
|
||||||
|
silently shadowing the other.
|
||||||
|
|
||||||
## Why this fork is not upstreamed
|
## Why this fork is not upstreamed
|
||||||
|
|
||||||
@@ -58,13 +72,14 @@ quiet for months and there is no signal that maintenance bandwidth is
|
|||||||
available on Asriel's side. A drive-by SDK-15-bump PR with no maintainer
|
available on Asriel's side. A drive-by SDK-15-bump PR with no maintainer
|
||||||
to land it would sit open indefinitely and create the wrong impression
|
to land it would sit open indefinitely and create the wrong impression
|
||||||
that the change has been reviewed. If upstream becomes active again and
|
that the change has been reviewed. If upstream becomes active again and
|
||||||
wants the migration, the change set is small enough (+23 / -19 lines,
|
wants the migration, the change set is small enough (the SDK 15 patch is
|
||||||
seven files) to merge by hand in minutes.
|
+23 / −19 lines across seven files; the rebrand is roughly a dozen lines
|
||||||
|
on top) to merge by hand in minutes.
|
||||||
|
|
||||||
## Maintainer contact
|
## Maintainer contact
|
||||||
|
|
||||||
If something in this fork causes problems, especially if it relates back
|
If something in Forgeimizer causes problems, especially if it relates
|
||||||
to upstream Craftimizer or to attribution:
|
back to upstream Craftimizer or to attribution:
|
||||||
|
|
||||||
- **Gitea Issues:**
|
- **Gitea Issues:**
|
||||||
[JonKazama-Hellion/Craftimizer/issues](https://gitea.hellion-forge.cloud/JonKazama-Hellion/Craftimizer/issues)
|
[JonKazama-Hellion/Craftimizer/issues](https://gitea.hellion-forge.cloud/JonKazama-Hellion/Craftimizer/issues)
|
||||||
@@ -76,9 +91,11 @@ or takedown questions, email is the fastest path.
|
|||||||
|
|
||||||
## Trademarks and naming
|
## Trademarks and naming
|
||||||
|
|
||||||
"Craftimizer" is the name Asriel chose for the upstream plugin. This
|
"Craftimizer" is the name Asriel chose for the upstream plugin. The
|
||||||
fork keeps the name as a reference to the origin and does not rebrand
|
Forgeimizer rebrand keeps Craftimizer prominently named in the manifest
|
||||||
the user-facing identity. The Hellion brand is mine.
|
description, the about-tab attribution, this NOTICE, and the COPYRIGHT
|
||||||
|
block, so the fork relationship is unambiguous. The Hellion brand is
|
||||||
|
mine.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
# Craftimizer (Hellion Fork)
|
# Forgeimizer
|
||||||
|
|
||||||
[](LICENSE)
|
[](LICENSE)
|
||||||
[](https://github.com/goatcorp/Dalamud)
|
[](https://github.com/goatcorp/Dalamud)
|
||||||
@@ -10,50 +10,57 @@
|
|||||||
<img src="docs/images/hellion-forge.png" alt="Hellion Forge" width="180" />
|
<img src="docs/images/hellion-forge.png" alt="Hellion Forge" width="180" />
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
**Version 2.9.1.1 (Hellion fork)** — a maintenance fork of
|
**Version 2.9.1.1** — a Hellion Forge maintenance fork of
|
||||||
[Craftimizer](https://github.com/WorkingRobot/Craftimizer) by
|
[Craftimizer](https://github.com/WorkingRobot/Craftimizer) by
|
||||||
[Asriel Camora](https://github.com/WorkingRobot), brought back to life on
|
[Asriel Camora](https://github.com/WorkingRobot), brought back to life on
|
||||||
Dalamud SDK 15 for FFXIV 7.5+.
|
Dalamud SDK 15 for FFXIV 7.5+. Installs as a standalone plugin under the name
|
||||||
|
**Forgeimizer**, refuses to load while upstream Craftimizer is active.
|
||||||
|
|
||||||
Upstream Craftimizer received its last update for FFXIV 7.4 in late 2025 and
|
Upstream Craftimizer received its last update for FFXIV 7.4 in late 2025 and
|
||||||
has been dormant since. With the Dalamud API jump from level 14 to 15 in
|
has been dormant since. With the Dalamud API jump from level 14 to 15 in
|
||||||
early 2026, the plugin stopped loading. This fork is a narrow API-compatibility
|
early 2026, the plugin stopped loading. Forgeimizer is a narrow
|
||||||
cycle that gets it back on its feet for personal and friend-circle use. No
|
API-compatibility cycle that gets the crafting plugin back on its feet for
|
||||||
features added, no design changes, no behavior departures from upstream. If
|
personal and friend-circle use. No features added, no design changes, no
|
||||||
Asriel ships an official SDK 15 update upstream, this fork folds back into a
|
behavior departures from upstream. If Asriel ships an official SDK 15 update
|
||||||
pure mirror and the recommendation will be to switch back.
|
upstream, Forgeimizer folds back into a pure mirror and the recommendation
|
||||||
|
will be to switch back.
|
||||||
|
|
||||||
## Acknowledgements
|
## Acknowledgements
|
||||||
|
|
||||||
Every line of crafting logic, every solver heuristic, the entire simulator, the
|
Every line of crafting logic, every solver heuristic, the entire simulator,
|
||||||
recipe data layer, the synthesis hooks, and all UI windows are
|
the recipe data layer, the synthesis hooks, and all UI windows are
|
||||||
**[Asriel Camora](https://github.com/WorkingRobot)**'s work. This fork only
|
**[Asriel Camora](https://github.com/WorkingRobot)**'s work. Forgeimizer only
|
||||||
unblocks the API path. Full acknowledgement in [NOTICE.md](NOTICE.md).
|
unblocks the API path and changes the user-facing plugin identity. Full
|
||||||
|
acknowledgement in [NOTICE.md](NOTICE.md).
|
||||||
|
|
||||||
This fork is maintained under **Hellion Forge**, the modding and plugin line of
|
Forgeimizer is maintained under **Hellion Forge**, the modding and plugin
|
||||||
[Hellion Online Media](https://hellion-media.de).
|
line of [Hellion Online Media](https://hellion-media.de).
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## What this fork changes
|
## What this fork changes
|
||||||
|
|
||||||
| Area | Upstream (last 2.9.1.1) | This fork |
|
| Area | Upstream Craftimizer 2.9.1.1 | Forgeimizer |
|
||||||
| ----------------------------------------------- | ---------------------------------------- | ---------------------------------------------------------------------------------------- |
|
| ----------------------------------------------- | ---------------------------------------- | ---------------------------------------------------------------------------------------- |
|
||||||
|
| Plugin display name (Dalamud installer) | `Craftimizer` | **`Forgeimizer`** |
|
||||||
|
| InternalName (config slot) | `Craftimizer` | **`Forgeimizer`** (separate `pluginConfigs/Forgeimizer/`) |
|
||||||
|
| Assembly | `Craftimizer.dll` | **`Forgeimizer.dll`** |
|
||||||
|
| Conflict handling | n/a | Throws `InvalidOperationException` on load if upstream `Craftimizer` is active |
|
||||||
| Dalamud SDK | 14.0.1 | **15.0.0** |
|
| Dalamud SDK | 14.0.1 | **15.0.0** |
|
||||||
| Dalamud API Level | 14 (manifest unset, packager-inferred) | **15** (packager-set) |
|
| Dalamud API Level | 14 | **15** |
|
||||||
| `FFXIVClientStructs.FFXIV.Component.GUI` type | `ValueType` | `AtkValueType` (upstream rename) |
|
| `FFXIVClientStructs.FFXIV.Component.GUI` type | `ValueType` | `AtkValueType` (upstream rename) |
|
||||||
| `Dalamud.Interface.Utility.Raii.ImRaii` nested | `IEndObject`, `Color` (removed in SDK15) | local `IEndObject` interface in `ImRaii2.cs`; typed `ImRaii.*Disposable` returns |
|
| `Dalamud.Interface.Utility.Raii.ImRaii` nested | `IEndObject`, `Color` (removed in SDK15) | local `IEndObject` interface in `ImRaii2.cs`; typed `ImRaii.*Disposable` returns |
|
||||||
| `Settings.TabItem` ref-bool lifetime | `var open = true; TabItem(label, ref open, flags)` (rejected by SDK 15 escape analysis) | `TabItem(label, flags)` overload (no ref) |
|
| `Settings.TabItem` ref-bool lifetime | `var open = true; TabItem(label, ref open, flags)` (rejected by SDK 15 escape analysis) | `TabItem(label, flags)` overload (no ref) |
|
||||||
|
|
||||||
Diff total: **+23 / −19 lines** across seven files. The change set is
|
Internal namespaces (`Craftimizer.*`) are intentionally left alone. This is a
|
||||||
intentionally minimal so a future upstream merge stays trivial.
|
deliberate light-rename so a future upstream merge stays simple.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Tech Stack
|
## Tech Stack
|
||||||
|
|
||||||
| Category | Technology |
|
| Category | Technology |
|
||||||
| ---------- | ----------------------------------------------------- |
|
| ---------- | ------------------------------------------------------- |
|
||||||
| Platform | Dalamud Plugin (API Level 15) |
|
| Platform | Dalamud Plugin (API Level 15) |
|
||||||
| Language | C# / .NET 10 (`net10.0-windows`) |
|
| Language | C# / .NET 10 (`net10.0-windows`) |
|
||||||
| Build | Dalamud.NET.Sdk 15.0.0 |
|
| Build | Dalamud.NET.Sdk 15.0.0 |
|
||||||
@@ -63,7 +70,15 @@ intentionally minimal so a future upstream merge stays trivial.
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Build
|
## Install
|
||||||
|
|
||||||
|
### From custom repository (recommended, friend-circle install)
|
||||||
|
|
||||||
|
> Coming once the release pipeline lands. Once active, point Dalamud at
|
||||||
|
> the `repo.json` URL from this repository root and `Forgeimizer` shows
|
||||||
|
> up in the **All Plugins** list.
|
||||||
|
|
||||||
|
### From source (dev install)
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
git clone ssh://git@gitea.hellion-forge.cloud:2222/JonKazama-Hellion/Craftimizer.git
|
git clone ssh://git@gitea.hellion-forge.cloud:2222/JonKazama-Hellion/Craftimizer.git
|
||||||
@@ -71,19 +86,42 @@ cd Craftimizer
|
|||||||
dotnet build Craftimizer.sln -c Release
|
dotnet build Craftimizer.sln -c Release
|
||||||
```
|
```
|
||||||
|
|
||||||
The plugin DLL plus the manifest land in `Craftimizer/bin/x64/Release/`. Point
|
The plugin DLL plus manifest land in `Craftimizer/bin/x64/Release/`. Point
|
||||||
Dalamud's **Dev Plugin Locations** at that folder (`/xlsettings` →
|
Dalamud's **Dev Plugin Locations** at that folder (`/xlsettings` →
|
||||||
**Experimental**) to load it as a dev plugin.
|
**Experimental**) to load it as a dev plugin.
|
||||||
|
|
||||||
|
### Conflict with upstream Craftimizer
|
||||||
|
|
||||||
|
Forgeimizer refuses to load if upstream Craftimizer is also active. Both
|
||||||
|
plugins hook the same FFXIV `UseAction` and `IsActionHighlighted` paths, and
|
||||||
|
running them in parallel would corrupt either's state. The Forgeimizer
|
||||||
|
constructor throws an `InvalidOperationException` with a clear message
|
||||||
|
pointing at `/xlplugins` if it detects an active Craftimizer install.
|
||||||
|
|
||||||
|
Disable upstream Craftimizer in `/xlplugins` before enabling Forgeimizer.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Project Status
|
## Project Status
|
||||||
|
|
||||||
**Experimental Hellion fork — personal-use only.** No distribution channel,
|
**Experimental Hellion fork — small-circle use.** Custom repo and release
|
||||||
no custom repo, no release pipeline. This may change if the fork grows beyond
|
pipeline are next on the roadmap. If upstream Craftimizer resumes active
|
||||||
a single-user maintenance build, but for now: clone, build, dev-load.
|
maintenance, Forgeimizer archives and the recommendation will be to switch
|
||||||
|
back upstream.
|
||||||
|
|
||||||
If upstream resumes active maintenance, this fork archives.
|
---
|
||||||
|
|
||||||
|
## Slash Commands
|
||||||
|
|
||||||
|
All upstream Craftimizer slash commands work unchanged, plus one alias:
|
||||||
|
|
||||||
|
| Command | What it does |
|
||||||
|
| -------------------------------------- | ------------------------------------------------ |
|
||||||
|
| `/craftimizer` *or* **`/forgeimizer`** | Open the settings window |
|
||||||
|
| `/crafteditor` *or* `/macroeditor` | Open the crafting macro editor |
|
||||||
|
| `/craftaction` | Execute the next suggested action in synth helper |
|
||||||
|
| `/craftretry` | Click "Retry" in the synthesis helper |
|
||||||
|
| `/craftmacros` *or* `/macrolist` | Open the crafting macros window |
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -94,8 +132,8 @@ If upstream resumes active maintenance, this fork archives.
|
|||||||
- Discord DM: `@j.j_kazama`
|
- Discord DM: `@j.j_kazama`
|
||||||
- Email (business): <kontakt@hellion-media.de>
|
- Email (business): <kontakt@hellion-media.de>
|
||||||
|
|
||||||
For anything that relates back to upstream Craftimizer or to attribution, see
|
For anything that relates back to upstream Craftimizer or to attribution,
|
||||||
the contact path in [NOTICE.md](NOTICE.md).
|
see the contact path in [NOTICE.md](NOTICE.md).
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -106,14 +144,14 @@ Copyright details with dual-holder block in [COPYRIGHT](COPYRIGHT). Personal
|
|||||||
acknowledgement to the upstream author in [NOTICE.md](NOTICE.md).
|
acknowledgement to the upstream author in [NOTICE.md](NOTICE.md).
|
||||||
|
|
||||||
© 2023 [Asriel Camora](https://github.com/WorkingRobot) for the original
|
© 2023 [Asriel Camora](https://github.com/WorkingRobot) for the original
|
||||||
Craftimizer plugin. © 2026 Hellion Online Media for the Dalamud SDK 15
|
Craftimizer plugin. © 2026 Hellion Online Media for the Forgeimizer
|
||||||
fork-maintenance modifications.
|
rebrand and the Dalamud SDK 15 fork-maintenance modifications.
|
||||||
|
|
||||||
### FFXIV Disclaimer
|
### FFXIV Disclaimer
|
||||||
|
|
||||||
FINAL FANTASY XIV © SQUARE ENIX CO., LTD. All rights reserved. Craftimizer
|
FINAL FANTASY XIV © SQUARE ENIX CO., LTD. All rights reserved. Craftimizer
|
||||||
and this fork are unofficial, fan-made plugins and are not affiliated with,
|
and Forgeimizer are unofficial, fan-made plugins and are not affiliated
|
||||||
supported by, sponsored by, or approved by Square Enix.
|
with, supported by, sponsored by, or approved by Square Enix.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user