# gamermax1254/trafficcraft-traffic-light-countdown architecture

> Architecture diagram of the GitHub repository gamermax1254/trafficcraft-traffic-light-countdown, 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/gamermax1254/trafficcraft-traffic-light-countdown
- Repository: https://github.com/gamermax1254/trafficcraft-traffic-light-countdown

## Overview

TrafficCraft: Traffic Light Countdown is a client-side Fabric addon that overlays remaining phase time on supported TrafficCraft lights. During TrafficCraft light rendering, the mixin selects a timer source: it calculates time from an Own Schedule, or observes color changes and estimates phase timing for Remote control. It filters unsupported phases and short durations, selects a display slot, and renders a color-coded two-digit seven-segment countdown; paused or overflowing values blink as dashes or 99. Tick tracking smooths schedule timing and advances remote-learning cleanup. Wiring is based on the README and sampled Java sources; unsampled metadata and integration details are not inferred.

Main entry points: [`src/main/java/io/github/gamermax1254/tlcountdown/mixin/TrafficLightRendererMixin.java`](https://github.com/gamermax1254/trafficcraft-traffic-light-countdown/blob/main/src/main/java/io/github/gamermax1254/tlcountdown/mixin/TrafficLightRendererMixin.java) (Light Render Hook), [`src/main/java/io/github/gamermax1254/tlcountdown/client/ClientTickTracker.java`](https://github.com/gamermax1254/trafficcraft-traffic-light-countdown/blob/main/src/main/java/io/github/gamermax1254/tlcountdown/client/ClientTickTracker.java) (Client Tick Tracker), [`src/main/java/io/github/gamermax1254/tlcountdown/mixin/TrafficLightBlockEntityAccessor.java`](https://github.com/gamermax1254/trafficcraft-traffic-light-countdown/blob/main/src/main/java/io/github/gamermax1254/tlcountdown/mixin/TrafficLightBlockEntityAccessor.java) (Ticker Accessor), [`src/main/java/io/github/gamermax1254/tlcountdown/client/CountdownTextRenderer.java`](https://github.com/gamermax1254/trafficcraft-traffic-light-countdown/blob/main/src/main/java/io/github/gamermax1254/tlcountdown/client/CountdownTextRenderer.java) (Countdown Renderer)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_integration["Client Integration"]
  node_client_init["Client Initializer"]
  node_render_mixin["Light Render Hook"]
  node_ticker_accessor["Ticker Accessor"]
end

subgraph group_timing["Phase Timing"]
  node_tick_tracker["Client Tick Tracker"]
  node_timer_calculator["Schedule Timer"]
  node_remote_learner["Remote Learner"]
end

subgraph group_display["Countdown Display"]
  node_active_phase["Active Phase<br/>[ActivePhase.java]"]
  node_countdown_renderer["Countdown Renderer"]
  node_seven_segment["Seven-Segment Drawing"]
end

node_minecraft(("Minecraft Client"))
node_trafficcraft["TrafficCraft Renderer"]
node_light["Traffic Light Entity"]

node_client_init -->|"initializes"| node_tick_tracker
node_minecraft -->|"fires client ticks"| node_tick_tracker
node_tick_tracker -->|"ticks cleanup"| node_remote_learner
node_trafficcraft -->|"dispatches render hook"| node_render_mixin
node_render_mixin -->|"reads light state"| node_light
node_render_mixin -->|"reads ticker"| node_ticker_accessor
node_ticker_accessor -->|"accesses ticker"| node_light
node_render_mixin -->|"gets smoothed ticks"| node_tick_tracker
node_render_mixin -->|"calculates schedule time"| node_timer_calculator
node_render_mixin -->|"observes and estimates"| node_remote_learner
node_render_mixin -->|"detects signal color"| node_active_phase
node_render_mixin -->|"renders selected slots"| node_countdown_renderer
node_countdown_renderer -->|"draws digits or dashes"| node_seven_segment

click node_client_init "https://github.com/gamermax1254/trafficcraft-traffic-light-countdown/blob/main/src/main/java/io/github/gamermax1254/tlcountdown/client/TrafficLightCountdownClient.java"
click node_tick_tracker "https://github.com/gamermax1254/trafficcraft-traffic-light-countdown/blob/main/src/main/java/io/github/gamermax1254/tlcountdown/client/ClientTickTracker.java"
click node_render_mixin "https://github.com/gamermax1254/trafficcraft-traffic-light-countdown/blob/main/src/main/java/io/github/gamermax1254/tlcountdown/mixin/TrafficLightRendererMixin.java"
click node_ticker_accessor "https://github.com/gamermax1254/trafficcraft-traffic-light-countdown/blob/main/src/main/java/io/github/gamermax1254/tlcountdown/mixin/TrafficLightBlockEntityAccessor.java"
click node_timer_calculator "https://github.com/gamermax1254/trafficcraft-traffic-light-countdown/blob/main/src/main/java/io/github/gamermax1254/tlcountdown/client/TimerCalculator.java"
click node_remote_learner "https://github.com/gamermax1254/trafficcraft-traffic-light-countdown/blob/main/src/main/java/io/github/gamermax1254/tlcountdown/client/RemoteScheduleLearner.java"
click node_active_phase "https://github.com/gamermax1254/trafficcraft-traffic-light-countdown/blob/main/src/main/java/io/github/gamermax1254/tlcountdown/client/ActivePhase.java"
click node_countdown_renderer "https://github.com/gamermax1254/trafficcraft-traffic-light-countdown/blob/main/src/main/java/io/github/gamermax1254/tlcountdown/client/CountdownTextRenderer.java"
click node_seven_segment "https://github.com/gamermax1254/trafficcraft-traffic-light-countdown/blob/main/src/main/java/io/github/gamermax1254/tlcountdown/client/SevenSegmentRenderer.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_client_init,node_render_mixin,node_ticker_accessor,node_minecraft toneBlue
class node_tick_tracker,node_timer_calculator,node_remote_learner toneAmber
class node_active_phase,node_countdown_renderer,node_seven_segment toneMint
class node_trafficcraft,node_light toneIndigo
```

## Components

### Client Integration

- [Client Initializer](https://github.com/gamermax1254/trafficcraft-traffic-light-countdown/blob/main/src/main/java/io/github/gamermax1254/tlcountdown/client/TrafficLightCountdownClient.java): `src/main/java/io/github/gamermax1254/tlcountdown/client/TrafficLightCountdownClient.java`
- [Light Render Hook](https://github.com/gamermax1254/trafficcraft-traffic-light-countdown/blob/main/src/main/java/io/github/gamermax1254/tlcountdown/mixin/TrafficLightRendererMixin.java): `src/main/java/io/github/gamermax1254/tlcountdown/mixin/TrafficLightRendererMixin.java`
- [Ticker Accessor](https://github.com/gamermax1254/trafficcraft-traffic-light-countdown/blob/main/src/main/java/io/github/gamermax1254/tlcountdown/mixin/TrafficLightBlockEntityAccessor.java): `src/main/java/io/github/gamermax1254/tlcountdown/mixin/TrafficLightBlockEntityAccessor.java`

### Phase Timing

- [Client Tick Tracker](https://github.com/gamermax1254/trafficcraft-traffic-light-countdown/blob/main/src/main/java/io/github/gamermax1254/tlcountdown/client/ClientTickTracker.java): `src/main/java/io/github/gamermax1254/tlcountdown/client/ClientTickTracker.java`
- [Schedule Timer](https://github.com/gamermax1254/trafficcraft-traffic-light-countdown/blob/main/src/main/java/io/github/gamermax1254/tlcountdown/client/TimerCalculator.java): `src/main/java/io/github/gamermax1254/tlcountdown/client/TimerCalculator.java`
- [Remote Learner](https://github.com/gamermax1254/trafficcraft-traffic-light-countdown/blob/main/src/main/java/io/github/gamermax1254/tlcountdown/client/RemoteScheduleLearner.java): `src/main/java/io/github/gamermax1254/tlcountdown/client/RemoteScheduleLearner.java`

### Countdown Display

- [Active Phase](https://github.com/gamermax1254/trafficcraft-traffic-light-countdown/blob/main/src/main/java/io/github/gamermax1254/tlcountdown/client/ActivePhase.java): `src/main/java/io/github/gamermax1254/tlcountdown/client/ActivePhase.java`
- [Countdown Renderer](https://github.com/gamermax1254/trafficcraft-traffic-light-countdown/blob/main/src/main/java/io/github/gamermax1254/tlcountdown/client/CountdownTextRenderer.java): `src/main/java/io/github/gamermax1254/tlcountdown/client/CountdownTextRenderer.java`
- [Seven-Segment Drawing](https://github.com/gamermax1254/trafficcraft-traffic-light-countdown/blob/main/src/main/java/io/github/gamermax1254/tlcountdown/client/SevenSegmentRenderer.java): `src/main/java/io/github/gamermax1254/tlcountdown/client/SevenSegmentRenderer.java`

### Other components

- **Minecraft Client**
- **TrafficCraft Renderer**
- **Traffic Light Entity**

## Connections

- Client Initializer → Client Tick Tracker: initializes
- Minecraft Client → Client Tick Tracker: fires client ticks
- Client Tick Tracker → Remote Learner: ticks cleanup
- TrafficCraft Renderer → Light Render Hook: dispatches render hook
- Light Render Hook → Traffic Light Entity: reads light state
- Light Render Hook → Ticker Accessor: reads ticker
- Ticker Accessor → Traffic Light Entity: accesses ticker
- Light Render Hook → Client Tick Tracker: gets smoothed ticks
- Light Render Hook → Schedule Timer: calculates schedule time
- Light Render Hook → Remote Learner: observes and estimates
- Light Render Hook → Active Phase: detects signal color
- Light Render Hook → Countdown Renderer: renders selected slots
- Countdown Renderer → Seven-Segment Drawing: draws digits or dashes
