# xenos-core/maxtac architecture

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

- Interactive diagram: https://gitdiagram.com/xenos-core/maxtac
- Repository: https://github.com/xenos-core/maxtac

## Overview

MaxTac is a modular Folia/CanvasMC server guard; its implemented feature is lagguard. The main workflow samples region load and activity, selects an eligible sector, captures evidence, then either alerts staff or applies configured remediation and records/notifies the incident. Staff can inspect flags, region status, and player counts through commands. The README documents Discord alerts and detailed logging; those capabilities are represented, though their full implementation was not sampled. Arrows use README or indexed source references; dashed edges mark optional or incompletely verified integrations.

Main entry points: [`src/main/java/fun/noxel/maxtac/lagguard/LagGuardModule.java`](https://github.com/xenos-core/maxtac/blob/main/src/main/java/fun/noxel/maxtac/lagguard/LagGuardModule.java) (Lagguard module), [`src/main/java/fun/noxel/maxtac/lagguard/ActionService.java`](https://github.com/xenos-core/maxtac/blob/main/src/main/java/fun/noxel/maxtac/lagguard/ActionService.java) (Action service), [`src/main/java/fun/noxel/maxtac/MaxTacPlugin.java`](https://github.com/xenos-core/maxtac/blob/main/src/main/java/fun/noxel/maxtac/MaxTacPlugin.java) (Plugin lifecycle), [`src/main/java/fun/noxel/maxtac/lagguard/LagCommands.java`](https://github.com/xenos-core/maxtac/blob/main/src/main/java/fun/noxel/maxtac/lagguard/LagCommands.java) (Lagguard commands)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_core["Plugin core"]
  node_plugin["Plugin lifecycle<br/>[MaxTacPlugin.java]"]
  node_modules["Module manager<br/>[ModuleManager.java]"]
  node_commands["Command router<br/>[MaxTacCommand.java]"]
  node_corecommands["Core commands<br/>[CoreCommands.java]"]
  node_io["Async file writes<br/>[IoQueue.java]"]
  node_messages["Message formatting<br/>[Messages.java]"]
end

subgraph group_monitoring["Region monitoring"]
  node_lagmodule["Lagguard module"]
  node_settings["Lag settings<br/>[LagSettings.java]"]
  node_monitor["Region monitor<br/>[Monitor.java]"]
  node_internals["Folia sampling"]
  node_activity[("Activity tracker")]
  node_activityevents["Activity listeners"]
end

subgraph group_response["Incident response"]
  node_sector["Sector scanner<br/>[SectorScanner.java]"]
  node_actions["Action service<br/>[ActionService.java]"]
  node_freeze[("Redstone freeze<br/>[FreezeManager.java]")]
  node_freezelistener["Freeze listeners"]
  node_notifier["Notifications<br/>[Notifier.java]"]
  node_discord{{"Discord webhook"}}
end

subgraph group_records["Evidence and commands"]
  node_flagdata["Flag evidence model<br/>[Flag.java]"]
  node_flaglog[("Incident log<br/>[FlagLog.java]")]
  node_counts[("Player flag counts<br/>[FlagCounts.java]")]
  node_lagcommands["Lagguard commands<br/>[LagCommands.java]"]
end

node_player(("Player or staff"))

node_plugin -->|"creates"| node_modules
node_plugin -->|"registers"| node_lagmodule
node_plugin -->|"installs"| node_commands
node_plugin -->|"registers"| node_corecommands
node_plugin -->|"creates"| node_io
node_plugin -->|"creates"| node_notifier
node_modules -->|"enables"| node_lagmodule
node_commands -->|"accepts commands"| node_player
node_commands -->|"dispatches subcommands"| node_modules
node_lagmodule -->|"loads"| node_settings
node_lagmodule -->|"starts"| node_monitor
node_lagmodule -->|"initializes"| node_activity
node_lagmodule -->|"registers"| node_activityevents
node_lagmodule -->|"initializes"| node_freeze
node_lagmodule -->|"registers"| node_freezelistener
node_lagmodule -->|"registers"| node_lagcommands
node_monitor -->|"samples load"| node_internals
node_monitor -->|"selects sector"| node_sector
node_activityevents -->|"records events"| node_activity
node_actions -->|"scans and removes"| node_sector
node_actions -->|"freezes chunks"| node_freeze
node_freezelistener -->|"checks freezes"| node_freeze
node_actions -->|"creates evidence"| node_flagdata
node_actions -->|"broadcasts alerts"| node_notifier
node_actions -.->|"posts optionally"| node_discord
node_actions -->|"adds incident"| node_flaglog
node_actions -->|"increments players"| node_counts
node_flaglog -->|"writes asynchronously"| node_io
node_counts -->|"writes asynchronously"| node_io
node_lagcommands -->|"reads incidents"| node_flaglog
node_lagcommands -->|"reads counts"| node_counts
node_lagcommands -->|"runs tests"| node_actions
node_lagcommands -.->|"serves results"| node_player
node_flaglog -->|"stores records"| node_flagdata
node_messages -.->|"formats messages"| node_player

click node_plugin "https://github.com/xenos-core/maxtac/blob/main/src/main/java/fun/noxel/maxtac/MaxTacPlugin.java"
click node_modules "https://github.com/xenos-core/maxtac/blob/main/src/main/java/fun/noxel/maxtac/module/ModuleManager.java"
click node_commands "https://github.com/xenos-core/maxtac/blob/main/src/main/java/fun/noxel/maxtac/command/MaxTacCommand.java"
click node_corecommands "https://github.com/xenos-core/maxtac/blob/main/src/main/java/fun/noxel/maxtac/command/CoreCommands.java"
click node_lagmodule "https://github.com/xenos-core/maxtac/blob/main/src/main/java/fun/noxel/maxtac/lagguard/LagGuardModule.java"
click node_settings "https://github.com/xenos-core/maxtac/blob/main/src/main/java/fun/noxel/maxtac/lagguard/LagSettings.java"
click node_monitor "https://github.com/xenos-core/maxtac/blob/main/src/main/java/fun/noxel/maxtac/lagguard/Monitor.java"
click node_internals "https://github.com/xenos-core/maxtac/blob/main/src/main/java/fun/noxel/maxtac/lagguard/FoliaInternals.java"
click node_activity "https://github.com/xenos-core/maxtac/blob/main/src/main/java/fun/noxel/maxtac/lagguard/ActivityTracker.java"
click node_activityevents "https://github.com/xenos-core/maxtac/blob/main/src/main/java/fun/noxel/maxtac/lagguard/ActivityListener.java"
click node_sector "https://github.com/xenos-core/maxtac/blob/main/src/main/java/fun/noxel/maxtac/lagguard/SectorScanner.java"
click node_actions "https://github.com/xenos-core/maxtac/blob/main/src/main/java/fun/noxel/maxtac/lagguard/ActionService.java"
click node_freeze "https://github.com/xenos-core/maxtac/blob/main/src/main/java/fun/noxel/maxtac/lagguard/FreezeManager.java"
click node_freezelistener "https://github.com/xenos-core/maxtac/blob/main/src/main/java/fun/noxel/maxtac/lagguard/FreezeListener.java"
click node_notifier "https://github.com/xenos-core/maxtac/blob/main/src/main/java/fun/noxel/maxtac/core/Notifier.java"
click node_flagdata "https://github.com/xenos-core/maxtac/blob/main/src/main/java/fun/noxel/maxtac/lagguard/Flag.java"
click node_flaglog "https://github.com/xenos-core/maxtac/blob/main/src/main/java/fun/noxel/maxtac/lagguard/FlagLog.java"
click node_counts "https://github.com/xenos-core/maxtac/blob/main/src/main/java/fun/noxel/maxtac/lagguard/FlagCounts.java"
click node_lagcommands "https://github.com/xenos-core/maxtac/blob/main/src/main/java/fun/noxel/maxtac/lagguard/LagCommands.java"
click node_io "https://github.com/xenos-core/maxtac/blob/main/src/main/java/fun/noxel/maxtac/core/IoQueue.java"
click node_messages "https://github.com/xenos-core/maxtac/blob/main/src/main/java/fun/noxel/maxtac/core/Messages.java"

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_modules,node_commands,node_corecommands,node_io,node_messages toneBlue
class node_lagmodule,node_settings,node_monitor,node_internals,node_activity,node_activityevents toneAmber
class node_sector,node_actions,node_freeze,node_freezelistener,node_notifier,node_discord toneMint
class node_flagdata,node_flaglog,node_counts,node_lagcommands toneRose
class node_player toneIndigo
```

## Components

### Plugin core

- [Plugin lifecycle](https://github.com/xenos-core/maxtac/blob/main/src/main/java/fun/noxel/maxtac/MaxTacPlugin.java): `src/main/java/fun/noxel/maxtac/MaxTacPlugin.java`
- [Module manager](https://github.com/xenos-core/maxtac/blob/main/src/main/java/fun/noxel/maxtac/module/ModuleManager.java): `src/main/java/fun/noxel/maxtac/module/ModuleManager.java`
- [Command router](https://github.com/xenos-core/maxtac/blob/main/src/main/java/fun/noxel/maxtac/command/MaxTacCommand.java): `src/main/java/fun/noxel/maxtac/command/MaxTacCommand.java`
- [Core commands](https://github.com/xenos-core/maxtac/blob/main/src/main/java/fun/noxel/maxtac/command/CoreCommands.java): `src/main/java/fun/noxel/maxtac/command/CoreCommands.java`
- [Async file writes](https://github.com/xenos-core/maxtac/blob/main/src/main/java/fun/noxel/maxtac/core/IoQueue.java): `src/main/java/fun/noxel/maxtac/core/IoQueue.java`
- [Message formatting](https://github.com/xenos-core/maxtac/blob/main/src/main/java/fun/noxel/maxtac/core/Messages.java): `src/main/java/fun/noxel/maxtac/core/Messages.java`

### Region monitoring

- [Lagguard module](https://github.com/xenos-core/maxtac/blob/main/src/main/java/fun/noxel/maxtac/lagguard/LagGuardModule.java): `src/main/java/fun/noxel/maxtac/lagguard/LagGuardModule.java`
- [Lag settings](https://github.com/xenos-core/maxtac/blob/main/src/main/java/fun/noxel/maxtac/lagguard/LagSettings.java): `src/main/java/fun/noxel/maxtac/lagguard/LagSettings.java`
- [Region monitor](https://github.com/xenos-core/maxtac/blob/main/src/main/java/fun/noxel/maxtac/lagguard/Monitor.java): `src/main/java/fun/noxel/maxtac/lagguard/Monitor.java`
- [Folia sampling](https://github.com/xenos-core/maxtac/blob/main/src/main/java/fun/noxel/maxtac/lagguard/FoliaInternals.java): `src/main/java/fun/noxel/maxtac/lagguard/FoliaInternals.java`
- [Activity tracker](https://github.com/xenos-core/maxtac/blob/main/src/main/java/fun/noxel/maxtac/lagguard/ActivityTracker.java): `src/main/java/fun/noxel/maxtac/lagguard/ActivityTracker.java`
- [Activity listeners](https://github.com/xenos-core/maxtac/blob/main/src/main/java/fun/noxel/maxtac/lagguard/ActivityListener.java): `src/main/java/fun/noxel/maxtac/lagguard/ActivityListener.java`

### Incident response

- [Sector scanner](https://github.com/xenos-core/maxtac/blob/main/src/main/java/fun/noxel/maxtac/lagguard/SectorScanner.java): `src/main/java/fun/noxel/maxtac/lagguard/SectorScanner.java`
- [Action service](https://github.com/xenos-core/maxtac/blob/main/src/main/java/fun/noxel/maxtac/lagguard/ActionService.java): `src/main/java/fun/noxel/maxtac/lagguard/ActionService.java`
- [Redstone freeze](https://github.com/xenos-core/maxtac/blob/main/src/main/java/fun/noxel/maxtac/lagguard/FreezeManager.java): `src/main/java/fun/noxel/maxtac/lagguard/FreezeManager.java`
- [Freeze listeners](https://github.com/xenos-core/maxtac/blob/main/src/main/java/fun/noxel/maxtac/lagguard/FreezeListener.java): `src/main/java/fun/noxel/maxtac/lagguard/FreezeListener.java`
- [Notifications](https://github.com/xenos-core/maxtac/blob/main/src/main/java/fun/noxel/maxtac/core/Notifier.java): `src/main/java/fun/noxel/maxtac/core/Notifier.java`
- **Discord webhook**

### Evidence and commands

- [Flag evidence model](https://github.com/xenos-core/maxtac/blob/main/src/main/java/fun/noxel/maxtac/lagguard/Flag.java): `src/main/java/fun/noxel/maxtac/lagguard/Flag.java`
- [Incident log](https://github.com/xenos-core/maxtac/blob/main/src/main/java/fun/noxel/maxtac/lagguard/FlagLog.java): `src/main/java/fun/noxel/maxtac/lagguard/FlagLog.java`
- [Player flag counts](https://github.com/xenos-core/maxtac/blob/main/src/main/java/fun/noxel/maxtac/lagguard/FlagCounts.java): `src/main/java/fun/noxel/maxtac/lagguard/FlagCounts.java`
- [Lagguard commands](https://github.com/xenos-core/maxtac/blob/main/src/main/java/fun/noxel/maxtac/lagguard/LagCommands.java): `src/main/java/fun/noxel/maxtac/lagguard/LagCommands.java`

### Other components

- **Player or staff**

## Connections

- Plugin lifecycle → Module manager: creates (evidence: `src/main/java/fun/noxel/maxtac/MaxTacPlugin.java`)
- Plugin lifecycle → Lagguard module: registers (evidence: `src/main/java/fun/noxel/maxtac/MaxTacPlugin.java`)
- Plugin lifecycle → Command router: installs (evidence: `src/main/java/fun/noxel/maxtac/MaxTacPlugin.java`)
- Plugin lifecycle → Core commands: registers (evidence: `src/main/java/fun/noxel/maxtac/MaxTacPlugin.java`)
- Plugin lifecycle → Async file writes: creates (evidence: `src/main/java/fun/noxel/maxtac/MaxTacPlugin.java`)
- Plugin lifecycle → Notifications: creates (evidence: `src/main/java/fun/noxel/maxtac/MaxTacPlugin.java`)
- Module manager → Lagguard module: enables (evidence: `src/main/java/fun/noxel/maxtac/lagguard/LagGuardModule.java`)
- Command router → Player or staff: accepts commands (evidence: `src/main/java/fun/noxel/maxtac/command/MaxTacCommand.java`)
- Command router → Module manager: dispatches subcommands (evidence: `src/main/java/fun/noxel/maxtac/command/MaxTacCommand.java`)
- Lagguard module → Lag settings: loads (evidence: `src/main/java/fun/noxel/maxtac/lagguard/LagGuardModule.java`)
- Lagguard module → Region monitor: starts (evidence: `src/main/java/fun/noxel/maxtac/lagguard/LagGuardModule.java`)
- Lagguard module → Activity tracker: initializes (evidence: `src/main/java/fun/noxel/maxtac/lagguard/LagGuardModule.java`)
- Lagguard module → Activity listeners: registers (evidence: `src/main/java/fun/noxel/maxtac/lagguard/LagGuardModule.java`)
- Lagguard module → Redstone freeze: initializes (evidence: `src/main/java/fun/noxel/maxtac/lagguard/LagGuardModule.java`)
- Lagguard module → Freeze listeners: registers (evidence: `src/main/java/fun/noxel/maxtac/lagguard/LagGuardModule.java`)
- Lagguard module → Lagguard commands: registers (evidence: `src/main/java/fun/noxel/maxtac/lagguard/LagGuardModule.java`)
- Region monitor → Folia sampling: samples load (evidence: `src/main/java/fun/noxel/maxtac/lagguard/Monitor.java`)
- Region monitor → Sector scanner: selects sector (evidence: `src/main/java/fun/noxel/maxtac/lagguard/Monitor.java`)
- Activity listeners → Activity tracker: records events (evidence: `src/main/java/fun/noxel/maxtac/lagguard/ActivityListener.java`)
- Action service → Sector scanner: scans and removes (evidence: `src/main/java/fun/noxel/maxtac/lagguard/ActionService.java`)
- Action service → Redstone freeze: freezes chunks (evidence: `src/main/java/fun/noxel/maxtac/lagguard/ActionService.java`)
- Freeze listeners → Redstone freeze: checks freezes (evidence: `src/main/java/fun/noxel/maxtac/lagguard/FreezeListener.java`)
- Action service → Flag evidence model: creates evidence (evidence: `src/main/java/fun/noxel/maxtac/lagguard/ActionService.java`)
- Action service → Notifications: broadcasts alerts (evidence: `src/main/java/fun/noxel/maxtac/lagguard/ActionService.java`)
- Action service → Discord webhook: posts optionally (evidence: `src/main/java/fun/noxel/maxtac/lagguard/ActionService.java`)
- Action service → Incident log: adds incident (evidence: `src/main/java/fun/noxel/maxtac/lagguard/ActionService.java`)
- Action service → Player flag counts: increments players (evidence: `src/main/java/fun/noxel/maxtac/lagguard/ActionService.java`)
- Incident log → Async file writes: writes asynchronously (evidence: `src/main/java/fun/noxel/maxtac/lagguard/FlagLog.java`)
- Player flag counts → Async file writes: writes asynchronously (evidence: `src/main/java/fun/noxel/maxtac/lagguard/FlagCounts.java`)
- Lagguard commands → Incident log: reads incidents (evidence: `src/main/java/fun/noxel/maxtac/lagguard/LagCommands.java`)
- Lagguard commands → Player flag counts: reads counts (evidence: `src/main/java/fun/noxel/maxtac/lagguard/LagCommands.java`)
- Lagguard commands → Action service: runs tests (evidence: `src/main/java/fun/noxel/maxtac/lagguard/LagCommands.java`)
- Lagguard commands → Player or staff: serves results (evidence: `README.md`)
- Incident log → Flag evidence model: stores records (evidence: `src/main/java/fun/noxel/maxtac/lagguard/FlagLog.java`)
- Message formatting → Player or staff: formats messages (evidence: `README.md`)
