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