# mcbro12345/fishingclues architecture

> Architecture diagram of the GitHub repository mcbro12345/fishingclues, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-27). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/mcbro12345/fishingclues
- Repository: https://github.com/mcbro12345/fishingclues

## Overview

Fishing Clues is a Dalamud plugin that augments FFXIV’s Fishing Log with a spoiler-conscious journal and an unrestricted fish guide. The main workflow starts when a player opens the journal; the window manager builds journal content and presents it in the native UI, with discovery, catch-condition, and availability information supporting fish selection. Players can also search fish from item context menus or replace the vanilla Fishing Log. The README documents maps, caught/uncaught tracking, and detailed catch clues. Some subsystem links are based on documented capabilities and tree paths because their implementation was not sampled.

Main entry points: [`FishingClues/Game/Data/FishDataService.cs`](https://github.com/mcbro12345/fishingclues/blob/main/FishingClues/Game/Data/FishDataService.cs) (Fish data service), [`FishingClues/Plugin.cs`](https://github.com/mcbro12345/fishingclues/blob/main/FishingClues/Plugin.cs) (Plugin lifecycle), [`FishingClues/UI/WindowManager.cs`](https://github.com/mcbro12345/fishingclues/blob/main/FishingClues/UI/WindowManager.cs) (Window manager), [`FishingClues/UI/Windows/NativeJournalWindow.cs`](https://github.com/mcbro12345/fishingclues/blob/main/FishingClues/UI/Windows/NativeJournalWindow.cs) (Fishing journal)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_entry["Plugin entry"]
  node_plugin["Plugin lifecycle<br/>[Plugin.cs]"]
  node_config["Configuration<br/>[Configuration.cs]"]
  node_services["Game services<br/>[Services.cs]"]
end

subgraph group_domain["Fishing data"]
  node_fishdata["Fish data service<br/>[FishDataService.cs]"]
  node_refresh["Data refresh<br/>[FishDataRefresh.cs]"]
  node_models["Fish and guide models<br/>[FishModels.cs]"]
  node_journalmodels["Journal models<br/>[JournalModels.cs]"]
  node_journal["Journal builder<br/>[JournalBuilder.cs]"]
  node_discovery["Fishing discovery"]
  node_notes["Fishing log reader"]
  node_weather["Eorzea weather<br/>[EorzeaWeather.cs]"]
  node_store[("Fish data cache<br/>[FishDataService.cs]")]
end

subgraph group_logic["Fishing logic"]
  node_availability["Availability windows"]
  node_intuition["Intuition status"]
  node_formatter["Catch details"]
  node_guide_details["Guide details"]
  node_replacement["Vanilla log replacement"]
  node_context["Item context actions"]
end

subgraph group_ui["Windows and UI"]
  node_manager["Window manager<br/>[WindowManager.cs]"]
  node_native["Fishing journal"]
  node_guide["All-fish guide"]
  node_settings["Settings window"]
  node_diagnostics["Diagnostics window"]
  node_session["Journal session state"]
  node_rows["Fish list rows"]
  node_map["Journal map"]
end

node_player(("Player"))
node_ffxiv["FFXIV client"]
node_remote["Fish data source"]

node_player -->|"opens plugin"| node_plugin
node_plugin -->|"initializes"| node_services
node_plugin -->|"creates"| node_manager
node_plugin -->|"creates"| node_fishdata
node_plugin -->|"creates"| node_journal
node_plugin -->|"creates"| node_replacement
node_plugin -->|"creates"| node_context
node_plugin -->|"loads and saves"| node_config
node_manager -->|"opens journal"| node_native
node_manager -->|"requests journal"| node_journal
node_manager -->|"retains view state"| node_session
node_manager -->|"opens guide"| node_guide
node_manager -->|"opens settings"| node_settings
node_manager -->|"opens diagnostics"| node_diagnostics
node_native -->|"presents fish"| node_rows
node_native -->|"shows locations"| node_map
node_native -->|"shows windows"| node_availability
node_native -->|"shows catch details"| node_formatter
node_native -->|"respects discovery"| node_discovery
node_journal -->|"reads fish data"| node_fishdata
node_journal -->|"reads fishing log"| node_notes
node_journal -->|"uses discovery"| node_discovery
node_fishdata -->|"reads and writes cache"| node_store
node_fishdata -->|"requests download"| node_refresh
node_refresh -.->|"downloads records"| node_remote
node_fishdata -->|"loads records"| node_models
node_availability -->|"reads conditions"| node_fishdata
node_availability -->|"checks weather"| node_weather
node_availability -->|"checks active buff"| node_intuition
node_intuition -->|"reads player status"| node_ffxiv
node_formatter -->|"reads catch data"| node_fishdata
node_guide -->|"requests details"| node_guide_details
node_guide_details -->|"finds fish locations"| node_journal
node_guide_details -->|"reads fish information"| node_fishdata
node_guide_details -->|"formats requirements"| node_formatter
node_replacement -->|"opens custom journal"| node_manager
node_replacement -->|"intercepts fishing log"| node_ffxiv
node_context -->|"opens fish search"| node_guide
node_context -->|"opens clue window"| node_manager
node_context -->|"checks fish records"| node_fishdata
node_settings -->|"updates preferences"| node_config
node_settings -->|"requests refresh"| node_fishdata
node_diagnostics -->|"shows diagnostics"| node_plugin

click node_plugin "https://github.com/mcbro12345/fishingclues/blob/main/FishingClues/Plugin.cs"
click node_config "https://github.com/mcbro12345/fishingclues/blob/main/FishingClues/Base/Configuration.cs"
click node_services "https://github.com/mcbro12345/fishingclues/blob/main/FishingClues/Base/Services.cs"
click node_manager "https://github.com/mcbro12345/fishingclues/blob/main/FishingClues/UI/WindowManager.cs"
click node_native "https://github.com/mcbro12345/fishingclues/blob/main/FishingClues/UI/Windows/NativeJournalWindow.cs"
click node_guide "https://github.com/mcbro12345/fishingclues/blob/main/FishingClues/UI/Windows/DalamudClueWindow.cs"
click node_settings "https://github.com/mcbro12345/fishingclues/blob/main/FishingClues/UI/Windows/DalamudSettingsWindow.cs"
click node_diagnostics "https://github.com/mcbro12345/fishingclues/blob/main/FishingClues/UI/Windows/DiagnosticWindow.cs"
click node_session "https://github.com/mcbro12345/fishingclues/blob/main/FishingClues/UI/Windows/NativeJournalSessionState.cs"
click node_rows "https://github.com/mcbro12345/fishingclues/blob/main/FishingClues/UI/Components/FishEntryRowNode.cs"
click node_map "https://github.com/mcbro12345/fishingclues/blob/main/FishingClues/UI/Windows/NativeJournalWindow.Map.cs"
click node_fishdata "https://github.com/mcbro12345/fishingclues/blob/main/FishingClues/Game/Data/FishDataService.cs"
click node_refresh "https://github.com/mcbro12345/fishingclues/blob/main/FishingClues/Game/Data/FishDataRefresh.cs"
click node_models "https://github.com/mcbro12345/fishingclues/blob/main/FishingClues/Game/Models/FishModels.cs"
click node_journalmodels "https://github.com/mcbro12345/fishingclues/blob/main/FishingClues/Game/Models/JournalModels.cs"
click node_journal "https://github.com/mcbro12345/fishingclues/blob/main/FishingClues/Game/Data/JournalBuilder.cs"
click node_discovery "https://github.com/mcbro12345/fishingclues/blob/main/FishingClues/Game/Data/FishingDiscovery.cs"
click node_notes "https://github.com/mcbro12345/fishingclues/blob/main/FishingClues/Game/Data/FishingNoteAddon.cs"
click node_weather "https://github.com/mcbro12345/fishingclues/blob/main/FishingClues/Game/Data/EorzeaWeather.cs"
click node_availability "https://github.com/mcbro12345/fishingclues/blob/main/FishingClues/Game/Logic/AvailabilityService.cs"
click node_intuition "https://github.com/mcbro12345/fishingclues/blob/main/FishingClues/Game/Logic/IntuitionService.cs"
click node_formatter "https://github.com/mcbro12345/fishingclues/blob/main/FishingClues/Game/Logic/FishDetailsFormatter.cs"
click node_guide_details "https://github.com/mcbro12345/fishingclues/blob/main/FishingClues/Game/Logic/GuideDetailsService.cs"
click node_replacement "https://github.com/mcbro12345/fishingclues/blob/main/FishingClues/Game/Logic/NormalLogReplacementController.cs"
click node_context "https://github.com/mcbro12345/fishingclues/blob/main/FishingClues/Game/Logic/ItemContextMenuService.cs"
click node_store "https://github.com/mcbro12345/fishingclues/blob/main/FishingClues/Game/Data/FishDataService.cs"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_plugin,node_config,node_services,node_ffxiv toneBlue
class node_fishdata,node_refresh,node_models,node_journalmodels,node_journal,node_discovery,node_notes,node_weather,node_store toneAmber
class node_availability,node_intuition,node_formatter,node_guide_details,node_replacement,node_context toneMint
class node_manager,node_native,node_guide,node_settings,node_diagnostics,node_session,node_rows,node_map toneRose
class node_player,node_remote toneIndigo
```

## Components

### Plugin entry

- [Plugin lifecycle](https://github.com/mcbro12345/fishingclues/blob/main/FishingClues/Plugin.cs): `FishingClues/Plugin.cs`
- [Configuration](https://github.com/mcbro12345/fishingclues/blob/main/FishingClues/Base/Configuration.cs): `FishingClues/Base/Configuration.cs`
- [Game services](https://github.com/mcbro12345/fishingclues/blob/main/FishingClues/Base/Services.cs): `FishingClues/Base/Services.cs`

### Fishing data

- [Fish data service](https://github.com/mcbro12345/fishingclues/blob/main/FishingClues/Game/Data/FishDataService.cs): `FishingClues/Game/Data/FishDataService.cs`
- [Data refresh](https://github.com/mcbro12345/fishingclues/blob/main/FishingClues/Game/Data/FishDataRefresh.cs): `FishingClues/Game/Data/FishDataRefresh.cs`
- [Fish and guide models](https://github.com/mcbro12345/fishingclues/blob/main/FishingClues/Game/Models/FishModels.cs): `FishingClues/Game/Models/FishModels.cs`
- [Journal models](https://github.com/mcbro12345/fishingclues/blob/main/FishingClues/Game/Models/JournalModels.cs): `FishingClues/Game/Models/JournalModels.cs`
- [Journal builder](https://github.com/mcbro12345/fishingclues/blob/main/FishingClues/Game/Data/JournalBuilder.cs): `FishingClues/Game/Data/JournalBuilder.cs`
- [Fishing discovery](https://github.com/mcbro12345/fishingclues/blob/main/FishingClues/Game/Data/FishingDiscovery.cs): `FishingClues/Game/Data/FishingDiscovery.cs`
- [Fishing log reader](https://github.com/mcbro12345/fishingclues/blob/main/FishingClues/Game/Data/FishingNoteAddon.cs): `FishingClues/Game/Data/FishingNoteAddon.cs`
- [Eorzea weather](https://github.com/mcbro12345/fishingclues/blob/main/FishingClues/Game/Data/EorzeaWeather.cs): `FishingClues/Game/Data/EorzeaWeather.cs`
- [Fish data cache](https://github.com/mcbro12345/fishingclues/blob/main/FishingClues/Game/Data/FishDataService.cs): `FishingClues/Game/Data/FishDataService.cs`

### Fishing logic

- [Availability windows](https://github.com/mcbro12345/fishingclues/blob/main/FishingClues/Game/Logic/AvailabilityService.cs): `FishingClues/Game/Logic/AvailabilityService.cs`
- [Intuition status](https://github.com/mcbro12345/fishingclues/blob/main/FishingClues/Game/Logic/IntuitionService.cs): `FishingClues/Game/Logic/IntuitionService.cs`
- [Catch details](https://github.com/mcbro12345/fishingclues/blob/main/FishingClues/Game/Logic/FishDetailsFormatter.cs): `FishingClues/Game/Logic/FishDetailsFormatter.cs`
- [Guide details](https://github.com/mcbro12345/fishingclues/blob/main/FishingClues/Game/Logic/GuideDetailsService.cs): `FishingClues/Game/Logic/GuideDetailsService.cs`
- [Vanilla log replacement](https://github.com/mcbro12345/fishingclues/blob/main/FishingClues/Game/Logic/NormalLogReplacementController.cs): `FishingClues/Game/Logic/NormalLogReplacementController.cs`
- [Item context actions](https://github.com/mcbro12345/fishingclues/blob/main/FishingClues/Game/Logic/ItemContextMenuService.cs): `FishingClues/Game/Logic/ItemContextMenuService.cs`

### Windows and UI

- [Window manager](https://github.com/mcbro12345/fishingclues/blob/main/FishingClues/UI/WindowManager.cs): `FishingClues/UI/WindowManager.cs`
- [Fishing journal](https://github.com/mcbro12345/fishingclues/blob/main/FishingClues/UI/Windows/NativeJournalWindow.cs): `FishingClues/UI/Windows/NativeJournalWindow.cs`
- [All-fish guide](https://github.com/mcbro12345/fishingclues/blob/main/FishingClues/UI/Windows/DalamudClueWindow.cs): `FishingClues/UI/Windows/DalamudClueWindow.cs`
- [Settings window](https://github.com/mcbro12345/fishingclues/blob/main/FishingClues/UI/Windows/DalamudSettingsWindow.cs): `FishingClues/UI/Windows/DalamudSettingsWindow.cs`
- [Diagnostics window](https://github.com/mcbro12345/fishingclues/blob/main/FishingClues/UI/Windows/DiagnosticWindow.cs): `FishingClues/UI/Windows/DiagnosticWindow.cs`
- [Journal session state](https://github.com/mcbro12345/fishingclues/blob/main/FishingClues/UI/Windows/NativeJournalSessionState.cs): `FishingClues/UI/Windows/NativeJournalSessionState.cs`
- [Fish list rows](https://github.com/mcbro12345/fishingclues/blob/main/FishingClues/UI/Components/FishEntryRowNode.cs): `FishingClues/UI/Components/FishEntryRowNode.cs`
- [Journal map](https://github.com/mcbro12345/fishingclues/blob/main/FishingClues/UI/Windows/NativeJournalWindow.Map.cs): `FishingClues/UI/Windows/NativeJournalWindow.Map.cs`

### Other components

- **Player**
- **FFXIV client**
- **Fish data source**

## Connections

- Player → Plugin lifecycle: opens plugin
- Plugin lifecycle → Game services: initializes
- Plugin lifecycle → Window manager: creates
- Plugin lifecycle → Fish data service: creates
- Plugin lifecycle → Journal builder: creates
- Plugin lifecycle → Vanilla log replacement: creates
- Plugin lifecycle → Item context actions: creates
- Plugin lifecycle → Configuration: loads and saves
- Window manager → Fishing journal: opens journal
- Window manager → Journal builder: requests journal
- Window manager → Journal session state: retains view state
- Window manager → All-fish guide: opens guide
- Window manager → Settings window: opens settings
- Window manager → Diagnostics window: opens diagnostics
- Fishing journal → Fish list rows: presents fish
- Fishing journal → Journal map: shows locations
- Fishing journal → Availability windows: shows windows
- Fishing journal → Catch details: shows catch details
- Fishing journal → Fishing discovery: respects discovery
- Journal builder → Fish data service: reads fish data
- Journal builder → Fishing log reader: reads fishing log
- Journal builder → Fishing discovery: uses discovery
- Fish data service → Fish data cache: reads and writes cache
- Fish data service → Data refresh: requests download
- Data refresh → Fish data source: downloads records
- Fish data service → Fish and guide models: loads records
- Availability windows → Fish data service: reads conditions
- Availability windows → Eorzea weather: checks weather
- Availability windows → Intuition status: checks active buff
- Intuition status → FFXIV client: reads player status
- Catch details → Fish data service: reads catch data
- All-fish guide → Guide details: requests details
- Guide details → Journal builder: finds fish locations
- Guide details → Fish data service: reads fish information
- Guide details → Catch details: formats requirements
- Vanilla log replacement → Window manager: opens custom journal
- Vanilla log replacement → FFXIV client: intercepts fishing log
- Item context actions → All-fish guide: opens fish search
- Item context actions → Window manager: opens clue window
- Item context actions → Fish data service: checks fish records
- Settings window → Configuration: updates preferences
- Settings window → Fish data service: requests refresh
- Diagnostics window → Plugin lifecycle: shows diagnostics
