chore: bootstrap Anvil repo skeleton
First commit on feature/v0.1.0 establishes the Hellion Forge plugin scaffold: - .gitattributes: Linux-first LF defaults, Windows-script CRLF exceptions, binary markers for fonts / images / archives. Pre-empts the Forgeimizer pre-push hook crash that was caused by Asriels CRLF default. - .editorconfig: Hellion Forge .NET conventions (private fields _camelCase, Allman braces, var-preferred). - .gitignore: VisualStudio baseline + secrets bucket + Anvil.Tests excluded (build-suite lives in the local Hellion Build test repo). - LICENSE: MIT, Hellion Online Media 2026. - NOTICE.md: goodwill attribution to Craftimizer and clean-room anonymisation note. - PRIVACY.md: zero-telemetry statement matching 00-Anvil-Scope. - README.md: v0.1.0 status + planned-feature outline + custom-repo URL. - Anvil.sln + Anvil/Anvil.csproj: Dalamud.NET.Sdk/15.0.0, x64 platform pinned (forge-wide rule), Microsoft.Extensions.Hosting stack closed-range pin to 10.0.7 matching HellionChat v1.5.0. No DalamudPackager.targets override - SDK 15 default packager handles images / icon / image_urls. - Anvil/Anvil.yaml: plugin manifest with explicit icon_url / image_urls (top-level fields required for SDK 15 default packager) and a v0.1.0 changelog entry that names RecipeData as the first module.
This commit is contained in:
+182
@@ -0,0 +1,182 @@
|
||||
# ##############################################################
|
||||
# #
|
||||
# # .editorconfig – Hellion Forge / Anvil
|
||||
# #
|
||||
# # Überarbeitet: Mai 2026
|
||||
# #
|
||||
# # Strategie:
|
||||
# # - Standard-.NET-Conventions (private Fields = _camelCase)
|
||||
# # - CSharpier übernimmt die meiste Formatierung
|
||||
# # - Hier: Naming, IDE-Hints, Backup-Format-Regeln
|
||||
# #
|
||||
# # ##############################################################
|
||||
|
||||
root = true
|
||||
|
||||
|
||||
# =====================================================
|
||||
# Defaults (alle Files)
|
||||
# =====================================================
|
||||
|
||||
[*]
|
||||
indent_style = space
|
||||
tab_width = 4
|
||||
indent_size = 4
|
||||
charset = utf-8
|
||||
end_of_line = lf
|
||||
trim_trailing_whitespace = true
|
||||
insert_final_newline = true
|
||||
|
||||
|
||||
# =====================================================
|
||||
# Markdown: Trailing Spaces erlaubt (2 Spaces = <br>)
|
||||
# =====================================================
|
||||
|
||||
[*.md]
|
||||
trim_trailing_whitespace = false
|
||||
|
||||
|
||||
# =====================================================
|
||||
# JSON / YAML: 2-Space-Indent
|
||||
# =====================================================
|
||||
|
||||
[*.{yaml,yml}]
|
||||
indent_size = 2
|
||||
|
||||
[*.{json,jsonc}]
|
||||
indent_size = 2
|
||||
|
||||
|
||||
# =====================================================
|
||||
# .NET / Resources: 4-Space-Indent
|
||||
# =====================================================
|
||||
|
||||
[*.{cs,csx}]
|
||||
indent_size = 4
|
||||
|
||||
[*.{xml,xsd,resx,resw,nuspec,config}]
|
||||
indent_size = 4
|
||||
|
||||
|
||||
# ##############################################################
|
||||
# #
|
||||
# # C# Sektion: Style, Naming, Format
|
||||
# #
|
||||
# ##############################################################
|
||||
|
||||
[*.{cs,csx}]
|
||||
|
||||
|
||||
# =====================================================
|
||||
# C# Style – var-Präferenz
|
||||
# =====================================================
|
||||
|
||||
csharp_style_var_for_built_in_types = true:suggestion
|
||||
csharp_style_var_when_type_is_apparent = true:suggestion
|
||||
csharp_style_var_elsewhere = true:suggestion
|
||||
|
||||
|
||||
# =====================================================
|
||||
# C# Style – Sonstiges
|
||||
# =====================================================
|
||||
|
||||
csharp_style_prefer_utf8_string_literals = true:suggestion
|
||||
|
||||
csharp_preferred_modifier_order = public, private, protected, internal, file, new, static, abstract, virtual, sealed, readonly, override, extern, unsafe, volatile, async, required:suggestion
|
||||
|
||||
csharp_new_line_before_members_in_object_initializers = false
|
||||
|
||||
|
||||
# =====================================================
|
||||
# C# Format – Braces (Allman)
|
||||
# =====================================================
|
||||
|
||||
csharp_new_line_before_open_brace = all
|
||||
csharp_new_line_before_else = true
|
||||
csharp_new_line_before_catch = true
|
||||
csharp_new_line_before_finally = true
|
||||
|
||||
|
||||
# =====================================================
|
||||
# C# Format – Switch-Einrückung
|
||||
# =====================================================
|
||||
|
||||
csharp_indent_case_contents = true
|
||||
csharp_indent_switch_labels = true
|
||||
|
||||
|
||||
# =====================================================
|
||||
# .NET Style – Qualification (kein "this." nötig)
|
||||
# =====================================================
|
||||
|
||||
dotnet_style_qualification_for_field = false:suggestion
|
||||
dotnet_style_qualification_for_property = false:suggestion
|
||||
dotnet_style_qualification_for_method = false:suggestion
|
||||
dotnet_style_qualification_for_event = false:suggestion
|
||||
|
||||
|
||||
# =====================================================
|
||||
# .NET Style – Predefined Types (int statt Int32 etc.)
|
||||
# =====================================================
|
||||
|
||||
dotnet_style_predefined_type_for_locals_parameters_members = true:suggestion
|
||||
dotnet_style_predefined_type_for_member_access = true:suggestion
|
||||
|
||||
|
||||
# =====================================================
|
||||
# .NET Style – Accessibility-Modifier erzwingen
|
||||
# =====================================================
|
||||
|
||||
dotnet_style_require_accessibility_modifiers = for_non_interface_members:suggestion
|
||||
|
||||
|
||||
# ##############################################################
|
||||
# #
|
||||
# # Naming Conventions (.NET-Standard)
|
||||
# #
|
||||
# # Private Instance Fields: _camelCase
|
||||
# # Private Static Fields: _camelCase
|
||||
# # Private Constants: PascalCase
|
||||
# # Private Static Readonly: PascalCase
|
||||
# #
|
||||
# ##############################################################
|
||||
|
||||
dotnet_naming_style.underscore_camel_case_style.capitalization = camel_case
|
||||
dotnet_naming_style.underscore_camel_case_style.required_prefix = _
|
||||
|
||||
dotnet_naming_style.pascal_case_style.capitalization = pascal_case
|
||||
|
||||
|
||||
dotnet_naming_rule.private_instance_fields.severity = warning
|
||||
dotnet_naming_rule.private_instance_fields.symbols = private_instance_fields_symbols
|
||||
dotnet_naming_rule.private_instance_fields.style = underscore_camel_case_style
|
||||
|
||||
dotnet_naming_symbols.private_instance_fields_symbols.applicable_kinds = field
|
||||
dotnet_naming_symbols.private_instance_fields_symbols.applicable_accessibilities = private
|
||||
|
||||
|
||||
dotnet_naming_rule.private_static_fields.severity = warning
|
||||
dotnet_naming_rule.private_static_fields.symbols = private_static_fields_symbols
|
||||
dotnet_naming_rule.private_static_fields.style = underscore_camel_case_style
|
||||
|
||||
dotnet_naming_symbols.private_static_fields_symbols.applicable_kinds = field
|
||||
dotnet_naming_symbols.private_static_fields_symbols.applicable_accessibilities = private
|
||||
dotnet_naming_symbols.private_static_fields_symbols.required_modifiers = static
|
||||
|
||||
|
||||
dotnet_naming_rule.private_constants.severity = warning
|
||||
dotnet_naming_rule.private_constants.symbols = private_constants_symbols
|
||||
dotnet_naming_rule.private_constants.style = pascal_case_style
|
||||
|
||||
dotnet_naming_symbols.private_constants_symbols.applicable_kinds = field
|
||||
dotnet_naming_symbols.private_constants_symbols.applicable_accessibilities = private
|
||||
dotnet_naming_symbols.private_constants_symbols.required_modifiers = const
|
||||
|
||||
|
||||
dotnet_naming_rule.private_static_readonly.severity = warning
|
||||
dotnet_naming_rule.private_static_readonly.symbols = private_static_readonly_symbols
|
||||
dotnet_naming_rule.private_static_readonly.style = pascal_case_style
|
||||
|
||||
dotnet_naming_symbols.private_static_readonly_symbols.applicable_kinds = field
|
||||
dotnet_naming_symbols.private_static_readonly_symbols.applicable_accessibilities = private
|
||||
dotnet_naming_symbols.private_static_readonly_symbols.required_modifiers = static, readonly
|
||||
+136
@@ -0,0 +1,136 @@
|
||||
##############################################################
|
||||
##
|
||||
## .gitattributes – Hellion Forge / Anvil
|
||||
##
|
||||
## Setup: Linux-First Development
|
||||
## (Hauptentwicklung auf Linux, Target = Dalamud/Windows)
|
||||
## Überarbeitet: Mai 2026
|
||||
##
|
||||
## Strategie:
|
||||
## - Default: Alles LF (Linux-Konvention)
|
||||
## - Windows-Batch-Scripts: CRLF (technische Pflicht!)
|
||||
## - PowerShell: CRLF (Sicherheit für Windows PS 5.1)
|
||||
## - Binärdateien: explizit markiert (gegen Korruption)
|
||||
##
|
||||
##############################################################
|
||||
|
||||
|
||||
# =====================================================
|
||||
# Default: Auto-Detect, alles auf LF normalisieren
|
||||
# =====================================================
|
||||
|
||||
* text=auto eol=lf
|
||||
|
||||
|
||||
# =====================================================
|
||||
# Source Code (LF)
|
||||
# =====================================================
|
||||
|
||||
*.cs text eol=lf
|
||||
*.csx text eol=lf
|
||||
|
||||
|
||||
# =====================================================
|
||||
# Configs & Daten (LF)
|
||||
# =====================================================
|
||||
|
||||
*.json text eol=lf
|
||||
*.yml text eol=lf
|
||||
*.yaml text eol=lf
|
||||
*.xml text eol=lf
|
||||
*.md text eol=lf
|
||||
*.txt text eol=lf
|
||||
*.config text eol=lf
|
||||
*.editorconfig text eol=lf
|
||||
.gitignore text eol=lf
|
||||
.gitattributes text eol=lf
|
||||
|
||||
|
||||
# =====================================================
|
||||
# Visual Studio / MSBuild Project Files (LF)
|
||||
# =====================================================
|
||||
|
||||
*.sln text eol=lf
|
||||
*.csproj text eol=lf
|
||||
*.props text eol=lf
|
||||
*.targets text eol=lf
|
||||
|
||||
|
||||
# =====================================================
|
||||
# Resources & Lokalisierung (LF)
|
||||
# =====================================================
|
||||
|
||||
*.resx text eol=lf
|
||||
*.resw text eol=lf
|
||||
|
||||
|
||||
# =====================================================
|
||||
# Linux/Mac-Scripts (LF – Pflicht)
|
||||
# =====================================================
|
||||
|
||||
*.sh text eol=lf
|
||||
*.bash text eol=lf
|
||||
*.zsh text eol=lf
|
||||
|
||||
|
||||
# =====================================================
|
||||
# >>> AUSNAHMEN <<<
|
||||
# Windows-Scripts brauchen ZWINGEND CRLF.
|
||||
# =====================================================
|
||||
|
||||
*.bat text eol=crlf
|
||||
*.cmd text eol=crlf
|
||||
|
||||
*.ps1 text eol=crlf
|
||||
*.psm1 text eol=crlf
|
||||
*.psd1 text eol=crlf
|
||||
|
||||
|
||||
# =====================================================
|
||||
# Binäre Build-Artefakte
|
||||
# =====================================================
|
||||
|
||||
*.dll binary
|
||||
*.exe binary
|
||||
*.pdb binary
|
||||
*.so binary
|
||||
*.dylib binary
|
||||
*.nupkg binary
|
||||
*.snupkg binary
|
||||
|
||||
|
||||
# =====================================================
|
||||
# Bilder (binary)
|
||||
# =====================================================
|
||||
|
||||
*.png binary
|
||||
*.jpg binary
|
||||
*.jpeg binary
|
||||
*.gif binary
|
||||
*.ico binary
|
||||
*.bmp binary
|
||||
*.tiff binary
|
||||
*.webp binary
|
||||
|
||||
# SVG ist eigentlich XML – als Text behandeln
|
||||
*.svg text eol=lf
|
||||
|
||||
|
||||
# =====================================================
|
||||
# Fonts (binary)
|
||||
# =====================================================
|
||||
|
||||
*.ttf binary
|
||||
*.otf binary
|
||||
*.woff binary
|
||||
*.woff2 binary
|
||||
|
||||
|
||||
# =====================================================
|
||||
# Archive (binary)
|
||||
# =====================================================
|
||||
|
||||
*.zip binary
|
||||
*.7z binary
|
||||
*.tar binary
|
||||
*.gz binary
|
||||
+247
@@ -0,0 +1,247 @@
|
||||
##############################################################
|
||||
##
|
||||
## .gitignore – Hellion Forge / Anvil
|
||||
##
|
||||
## Basis: github/gitignore VisualStudio.gitignore
|
||||
## Überarbeitet: Mai 2026
|
||||
##
|
||||
##############################################################
|
||||
|
||||
|
||||
# =====================================================
|
||||
# [!! KRITISCH !!] Secrets, Keys & Credentials
|
||||
# =====================================================
|
||||
|
||||
.env
|
||||
.env.*
|
||||
.env.bak*
|
||||
.envrc
|
||||
!.env.example
|
||||
!.env.sample
|
||||
|
||||
*.pem
|
||||
*.key
|
||||
*.p12
|
||||
*.pfx
|
||||
*.cer
|
||||
*.crt
|
||||
*.csr
|
||||
*.gpg
|
||||
*.asc
|
||||
|
||||
id_rsa
|
||||
id_ed25519
|
||||
id_ecdsa
|
||||
known_hosts
|
||||
|
||||
auth.json
|
||||
.npmrc
|
||||
secrets.json
|
||||
|
||||
appsettings.*.local.json
|
||||
appsettings.Local.json
|
||||
local.settings.json
|
||||
|
||||
*.dmp
|
||||
*.mdmp
|
||||
crash.log
|
||||
|
||||
|
||||
# =====================================================
|
||||
# Projekt-spezifisch (Anvil)
|
||||
# =====================================================
|
||||
|
||||
# Lokale Entwicklungsumgebung
|
||||
.vscode/
|
||||
scripts/setup-dev-env.sh
|
||||
|
||||
# Build-Suite lives in separate local repo (Hellion Build test/AnvilTests)
|
||||
Anvil.Tests/
|
||||
TestResults
|
||||
|
||||
# Packaging
|
||||
pack/
|
||||
|
||||
# Claude Code lokales Setup (nicht committed)
|
||||
/.claude/
|
||||
/CLAUDE.md
|
||||
|
||||
# Cycle-Working-Notes (im Vault gepflegt)
|
||||
/docs/cycle-notes/
|
||||
|
||||
|
||||
# =====================================================
|
||||
# OS-spezifische Files
|
||||
# =====================================================
|
||||
|
||||
# macOS
|
||||
.DS_Store
|
||||
.AppleDouble
|
||||
.LSOverride
|
||||
._*
|
||||
|
||||
# Windows
|
||||
Thumbs.db
|
||||
ehthumbs.db
|
||||
Desktop.ini
|
||||
$RECYCLE.BIN/
|
||||
|
||||
# Linux
|
||||
.directory
|
||||
.Trash-*
|
||||
|
||||
|
||||
# =====================================================
|
||||
# Editor & IDE
|
||||
# =====================================================
|
||||
|
||||
# JetBrains
|
||||
.idea/
|
||||
|
||||
# Vim / Neovim
|
||||
*.swp
|
||||
*.swo
|
||||
*.swn
|
||||
|
||||
# Sublime Text
|
||||
*.sublime-workspace
|
||||
*.sublime-project
|
||||
|
||||
|
||||
# =====================================================
|
||||
# IDE & Editor – User-spezifische Files (VS)
|
||||
# =====================================================
|
||||
|
||||
*.rsuser
|
||||
*.suo
|
||||
*.user
|
||||
*.userosscache
|
||||
*.sln.docstates
|
||||
|
||||
.vs/
|
||||
|
||||
|
||||
# =====================================================
|
||||
# Build Output
|
||||
# =====================================================
|
||||
|
||||
[Dd]ebug/
|
||||
[Dd]ebugPublic/
|
||||
[Rr]elease/
|
||||
[Rr]eleases/
|
||||
x64/
|
||||
x86/
|
||||
[Bb]in/
|
||||
[Oo]bj/
|
||||
[Ll]og/
|
||||
[Ll]ogs/
|
||||
|
||||
project.lock.json
|
||||
project.fragment.lock.json
|
||||
artifacts/
|
||||
|
||||
|
||||
# =====================================================
|
||||
# Build-Artefakte
|
||||
# =====================================================
|
||||
|
||||
*.obj
|
||||
*.pch
|
||||
*.pdb
|
||||
*.ipdb
|
||||
*.rsp
|
||||
*.tmp
|
||||
*.tmp_proj
|
||||
*.log
|
||||
*.binlog
|
||||
*.vspscc
|
||||
*.vssscc
|
||||
|
||||
|
||||
# =====================================================
|
||||
# Test Results
|
||||
# =====================================================
|
||||
|
||||
[Tt]est[Rr]esult*/
|
||||
|
||||
*.VisualState.xml
|
||||
TestResult.xml
|
||||
|
||||
BenchmarkDotNet.Artifacts/
|
||||
|
||||
*.received.*
|
||||
*.received.txt
|
||||
|
||||
|
||||
# =====================================================
|
||||
# Code Coverage
|
||||
# =====================================================
|
||||
|
||||
coverage*.json
|
||||
coverage*.xml
|
||||
coverage*.info
|
||||
|
||||
*.coverage
|
||||
*.coveragexml
|
||||
|
||||
|
||||
# =====================================================
|
||||
# Cache Files
|
||||
# =====================================================
|
||||
|
||||
*.aps
|
||||
*.opendb
|
||||
*.cachefile
|
||||
*.lscache
|
||||
|
||||
*.[Cc]ache
|
||||
!?*.[Cc]ache/
|
||||
|
||||
|
||||
# =====================================================
|
||||
# NuGet & Dependencies
|
||||
# =====================================================
|
||||
|
||||
*.nupkg
|
||||
*.snupkg
|
||||
**/[Pp]ackages/*
|
||||
!**/[Pp]ackages/build/
|
||||
*.nuget.props
|
||||
*.nuget.targets
|
||||
|
||||
node_modules/
|
||||
|
||||
|
||||
# =====================================================
|
||||
# Publish & Deploy
|
||||
# =====================================================
|
||||
|
||||
publish/
|
||||
|
||||
*.[Pp]ublish.xml
|
||||
*.pubxml
|
||||
*.publishproj
|
||||
|
||||
|
||||
# =====================================================
|
||||
# AI / LLM Tooling
|
||||
# =====================================================
|
||||
|
||||
.cursor/
|
||||
.cursorignore
|
||||
.aider*
|
||||
.continue/
|
||||
.continuerc.json
|
||||
.windsurf/
|
||||
.cody/
|
||||
|
||||
prompts/local/
|
||||
|
||||
|
||||
# =====================================================
|
||||
# Misc / Temp / Backup
|
||||
# =====================================================
|
||||
|
||||
~$*
|
||||
*~
|
||||
*.publishsettings
|
||||
@@ -0,0 +1,21 @@
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio Version 17
|
||||
VisualStudioVersion = 17.0.31903.59
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Anvil", "Anvil\Anvil.csproj", "{4F8E3A2C-1B0D-4F1A-9C7E-A1B2C3D4E5F6}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|x64 = Debug|x64
|
||||
Release|x64 = Release|x64
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{4F8E3A2C-1B0D-4F1A-9C7E-A1B2C3D4E5F6}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{4F8E3A2C-1B0D-4F1A-9C7E-A1B2C3D4E5F6}.Debug|x64.Build.0 = Debug|x64
|
||||
{4F8E3A2C-1B0D-4F1A-9C7E-A1B2C3D4E5F6}.Release|x64.ActiveCfg = Release|x64
|
||||
{4F8E3A2C-1B0D-4F1A-9C7E-A1B2C3D4E5F6}.Release|x64.Build.0 = Release|x64
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
EndGlobal
|
||||
@@ -0,0 +1,72 @@
|
||||
<Project Sdk="Dalamud.NET.Sdk/15.0.0">
|
||||
<PropertyGroup>
|
||||
<Version>0.1.0</Version>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Nullable>enable</Nullable>
|
||||
<LangVersion>latest</LangVersion>
|
||||
<!-- Forge-wide Platform pin: solution-build defaults respect this; the
|
||||
Forgeimizer v0.1.0 cycle showed that omitting it lets CI silently
|
||||
fall back to AnyCPU and writes outputs into the wrong subtree. -->
|
||||
<Platforms>x64</Platforms>
|
||||
<PlatformTarget>x64</PlatformTarget>
|
||||
<!-- Lock package versions so a casual restore does not surprise-bump
|
||||
transitive dependencies between cycles. -->
|
||||
<RestorePackagesWithLockFile>true</RestorePackagesWithLockFile>
|
||||
<AssemblyName>Anvil</AssemblyName>
|
||||
<RootNamespace>Anvil</RootNamespace>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<!-- Generic Host DI container, mirroring the HellionChat v1.5.0 pattern
|
||||
(Lightless-Sync stack pin at 10.0.7). Closed ranges keep major
|
||||
bumps from sneaking in through lock-file regeneration. -->
|
||||
<PackageReference
|
||||
Include="Microsoft.Extensions.DependencyInjection"
|
||||
Version="[10.0.7, 11.0.0)"
|
||||
/>
|
||||
<PackageReference
|
||||
Include="Microsoft.Extensions.Hosting"
|
||||
Version="[10.0.7, 11.0.0)"
|
||||
/>
|
||||
<PackageReference
|
||||
Include="Microsoft.Extensions.Logging"
|
||||
Version="[10.0.7, 11.0.0)"
|
||||
/>
|
||||
<PackageReference
|
||||
Include="Microsoft.Extensions.Options"
|
||||
Version="[10.0.7, 11.0.0)"
|
||||
/>
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<!-- Build-suite (Anvil.Tests in the local Hellion Build test repo)
|
||||
needs InternalsVisibleTo to reach the LuminaRecipeAdapter and
|
||||
mechanic-table classes without making them public. -->
|
||||
<InternalsVisibleTo Include="Anvil.Tests" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Compile Update="Localization\AnvilStrings.Designer.cs">
|
||||
<DesignTime>True</DesignTime>
|
||||
<AutoGen>True</AutoGen>
|
||||
<DependentUpon>AnvilStrings.resx</DependentUpon>
|
||||
</Compile>
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<EmbeddedResource Update="Localization\AnvilStrings.resx">
|
||||
<Generator>ResXFileCodeGenerator</Generator>
|
||||
<LastGenOutput>AnvilStrings.Designer.cs</LastGenOutput>
|
||||
</EmbeddedResource>
|
||||
</ItemGroup>
|
||||
|
||||
<!-- Plugin icon + screenshots: SDK 15 default packager picks these up via
|
||||
images/* and the icon_url / image_urls fields in Anvil.yaml. Do NOT
|
||||
add a DalamudPackager.targets override - the SDK 15 default handles
|
||||
icon + images correctly (lesson from HellionChat v0.5.2 burn). -->
|
||||
<ItemGroup>
|
||||
<None Include="images\**">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</None>
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
@@ -0,0 +1,46 @@
|
||||
name: Anvil
|
||||
author: Jon Kazama (Hellion Forge)
|
||||
punchline: A Hellion Forge plugin — privacy-focused FFXIV crafting helper with simulator, solver, and bookmarks.
|
||||
description: |-
|
||||
Anvil is a clean-room crafting plugin for FINAL FANTASY XIV. It provides
|
||||
a state-machine crafting simulator, a wrapper for the Raphael Rust
|
||||
solver, a recipe-note overlay, a synth-helper overlay, a macro editor,
|
||||
recipe bookmarks, and an opt-in Auto-Craft hook.
|
||||
|
||||
Privacy:
|
||||
- Zero telemetry, no network calls
|
||||
- Bookmarks and settings stay on your machine
|
||||
- Auto-Craft is OFF by default with an explicit warning modal
|
||||
|
||||
Status: v0.1.0 is the first release of the clean-room reimplementation.
|
||||
The module surface is intentionally minimal; the simulator, solver
|
||||
wrapper, macro engine, and full UI follow in v0.2.0+.
|
||||
|
||||
Cosmic Exploration support: planned for v0.2.0 (recipe-flag schema is
|
||||
already in place, mission-flag resolution is deferred).
|
||||
|
||||
Inspired by Craftimizer by Asriel Camora (MIT). Anvil is an independent
|
||||
re-implementation; no code was ported from Craftimizer.
|
||||
repo_url: https://gitea.hellion-forge.cloud/JonKazama-Hellion/Anvil
|
||||
accepts_feedback: true
|
||||
icon_url: https://gitea.hellion-forge.cloud/JonKazama-Hellion/Anvil/raw/branch/main/Anvil/images/icon.png
|
||||
image_urls: []
|
||||
tags:
|
||||
- Crafting
|
||||
- Macros
|
||||
- Solver
|
||||
- UI
|
||||
- Privacy
|
||||
changelog: |-
|
||||
**v0.1.0 — Initial Release (2026-05-27)**
|
||||
|
||||
First Hellion Forge release of Anvil. Module 01 (RecipeData) is in
|
||||
place: catalogues every FFXIV crafting recipe, item, action, buff,
|
||||
condition, and food/medicine from Lumina sheets, surfaces them
|
||||
through a Dalamud-free read-only API, and verifies the load via the
|
||||
`/xlperf` SelfTest step.
|
||||
|
||||
Note: This release is the foundation layer. UI windows, simulator,
|
||||
solver, macros, hooks, and the IPC provider follow in v0.2.0+.
|
||||
|
||||
Inspired by Craftimizer by Asriel Camora (MIT).
|
||||
@@ -0,0 +1,21 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2026 Hellion Online Media
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
@@ -0,0 +1,34 @@
|
||||
# NOTICE
|
||||
|
||||
## Goodwill Attribution
|
||||
|
||||
Anvil is an independent Hellion Forge plugin for FFXIV, built as a clean-room
|
||||
re-implementation. The plugin exists because the upstream Craftimizer plugin
|
||||
went dormant when the Dalamud SDK moved from API level 14 to 15.
|
||||
|
||||
**Inspired by [Craftimizer](https://github.com/WorkingRobot/Craftimizer) by
|
||||
Asriel Camora (MIT).**
|
||||
|
||||
This attribution is a goodwill marker, not a legal requirement. Anvil does not
|
||||
contain Craftimizer source code or paraphrased code patterns. The clean-room
|
||||
pipeline used official FFXIV game mechanics documentation, the
|
||||
[Artisan](https://github.com/PunishXIV/Artisan) plugin (as a mechanics
|
||||
reference for crafting domain values, with the "pattern and values may be
|
||||
adapted, no 1:1 code port" rule), and direct Lumina sheet inspection as the
|
||||
sole sources for the simulator and recipe data.
|
||||
|
||||
## Crafting Domain Patterns
|
||||
|
||||
Crafting mechanic constants (action CP/durability costs, condition multipliers,
|
||||
buff durations) are FFXIV game data and belong to Square Enix. The values were
|
||||
cross-checked against the publicly available datamining repository
|
||||
(`xivapi/ffxiv-datamining`) and against the Artisan plugin's documented
|
||||
constants. The Artisan plugin is GPL-3.0; Anvil does not port its code,
|
||||
only consumes its documented mechanic values which are themselves the
|
||||
underlying game's data.
|
||||
|
||||
## Anonymisation Policy
|
||||
|
||||
Anvil follows the Hellion Forge clean-room policy: no class names, method
|
||||
names, or code structures were imported from any external plugin. Namespace
|
||||
layout, type design, and threading model are independent.
|
||||
+41
@@ -0,0 +1,41 @@
|
||||
# PRIVACY
|
||||
|
||||
Anvil is a zero-telemetry Dalamud plugin. It does not collect, transmit, or
|
||||
log any data to external services.
|
||||
|
||||
## What Anvil reads
|
||||
|
||||
- FFXIV game data via Lumina sheets (recipes, items, actions, buffs,
|
||||
conditions, food) — read-only, in-process.
|
||||
- Plugin state from the local `pluginConfigs/Anvil/` directory (bookmarks,
|
||||
user settings, theme JSON).
|
||||
- Active crafting state via Dalamud's `IGameInteropProvider` hooks (`UseAction`,
|
||||
`IsActionHighlighted`) — exclusively to power the in-game UI; nothing is
|
||||
persisted from the hook data.
|
||||
|
||||
## What Anvil does NOT do
|
||||
|
||||
- No network calls (no analytics, no auto-update, no usage statistics).
|
||||
- No telemetry, no error reporting to any external endpoint.
|
||||
- No cloud-stored macros or bookmarks. Everything is local-first.
|
||||
- No third-party tracking SDKs of any kind.
|
||||
|
||||
## Optional features that touch other plugins (local IPC only)
|
||||
|
||||
- Anvil exposes IPC channels (`Anvil.Theme.*`, `Anvil.Macros.*`,
|
||||
`Anvil.Crafting.*`) so other Hellion Forge plugins can read theme state,
|
||||
macro lists, and crafting status. Cross-plugin reads happen in-process via
|
||||
Dalamud's `ICallGateProvider`; no data leaves the user's machine.
|
||||
- MacroMate-IPC export, when triggered, sends macro text to the local
|
||||
MacroMate plugin via Dalamud-internal IPC.
|
||||
|
||||
## Auto-Craft (opt-in)
|
||||
|
||||
The Auto-Craft feature is OFF by default. When enabled, it executes crafting
|
||||
actions automatically via the `UseAction` hook. It does not send any
|
||||
information about the actions back to the plugin or to any service.
|
||||
|
||||
## Contact
|
||||
|
||||
For privacy questions: open an issue at the Anvil repository or use the
|
||||
Hellion Forge Discord support channel referenced in the plugin manifest.
|
||||
@@ -0,0 +1,55 @@
|
||||
# Anvil
|
||||
|
||||
An independent Hellion Forge plugin for FINAL FANTASY XIV crafting.
|
||||
|
||||
Anvil is a privacy-focused, zero-telemetry crafting helper for Dalamud
|
||||
(API level 15+). It provides a crafting simulator, a solver wrapper,
|
||||
recipe bookmarks, and an opt-in Auto-Craft hook.
|
||||
|
||||
> Status: **v0.1.0 — early development.** The crafting simulator, solver
|
||||
> wrapper, macro engine, hooks, IPC provider, bookmark store, and UI
|
||||
> layers are being built module-by-module under the Anvil clean-room
|
||||
> pipeline. The Recipe Data layer (module 01) is the first ground-up
|
||||
> piece.
|
||||
|
||||
## Features (planned)
|
||||
|
||||
- Crafting Simulator — state machine for FFXIV crafting steps, conditions,
|
||||
buffs, and actions, with full Cosmic Exploration schema support.
|
||||
- Solver Wrapper — bridge to the Raphael Rust solver (bundled binary).
|
||||
- Recipe Note Overlay — anchors next to FFXIV's recipe-note addon.
|
||||
- Synth Helper Overlay — live next-action hint during synthesis.
|
||||
- Macro Editor — compose, replay, export to FFXIV macros and MacroMate.
|
||||
- Recipe Bookmarks — local list with notes, tags, and quick-open.
|
||||
- Auto-Craft (opt-in) — `UseAction` hook with explicit warning modal.
|
||||
- IPC Provider — exposes theme, macros, and crafting status to other
|
||||
Hellion Forge plugins.
|
||||
- Bilingual EN/DE UI with Hellion Anvil-Boutique styling
|
||||
(Forge-Bronze on dark surface).
|
||||
|
||||
## Privacy
|
||||
|
||||
Zero telemetry. No network calls. Everything stays on your machine. See
|
||||
[PRIVACY.md](PRIVACY.md) for the full statement.
|
||||
|
||||
## Attribution
|
||||
|
||||
Anvil is a clean-room re-implementation, not a fork. The plugin is
|
||||
inspired by [Craftimizer](https://github.com/WorkingRobot/Craftimizer)
|
||||
by Asriel Camora (MIT) — see [NOTICE.md](NOTICE.md) for the goodwill
|
||||
attribution.
|
||||
|
||||
## License
|
||||
|
||||
[MIT](LICENSE) — Copyright (c) 2026 Hellion Online Media.
|
||||
|
||||
## Install
|
||||
|
||||
The custom Dalamud repository URL for Anvil is:
|
||||
|
||||
```
|
||||
https://gitea.hellion-forge.cloud/JonKazama-Hellion/Anvil/raw/branch/main/repo.json
|
||||
```
|
||||
|
||||
Add this URL under Dalamud → Settings → Experimental → Custom Plugin
|
||||
Repositories, then install **Anvil** from the plugin installer.
|
||||
Reference in New Issue
Block a user