F3 Debug Integration
This page documents how Speedometer integrates into Minecraft's client-side debug rendering pipeline using DebugScreenEntries and DebugScreenEntryList.
📊 Debug Integration Infobox
| Property | Value |
|---|---|
| Speedometer Registry Key | Identifier.withDefaultNamespace("speedometer") |
| Native Vanilla Key | Identifier.withDefaultNamespace("player_speed") |
| Interface Implemented | net.minecraft.client.gui.components.debug.DebugScreenEntry |
| Mixin Target 1 | net.minecraft.client.gui.components.debug.DebugScreenEntries |
| Mixin Target 2 | net.minecraft.client.gui.components.debug.DebugScreenEntryList |
| Default Display State | DebugScreenEntryStatus.IN_OVERLAY |
🏗 Architecture Diagram
+----------------------------------------------------------------+
| Minecraft F3 Debug Screen |
+----------------------------------------------------------------+
|
DebugScreenEntries.<clinit>()
|
DebugScreenEntriesMixin
|
+-----------------------+-----------------------+
| |
register() put()
Speedometer ID Player Speed ID
| |
DebugEntrySpeedometer DebugEntryPlayerSpeedWrapper
(Standalone Line) (Consolidated Line)⚙️ Registration Workflow
- Static Class Loading Injection (
DebugScreenEntriesMixin): During tail initialization (<clinit>) ofDebugScreenEntries, Speedometer invokes the private staticregistermethod to addspeedometerto vanilla's entry registry (ENTRIES_BY_ID). - Default Status Initialization (
DebugScreenEntryListMixin): WhenDebugScreenEntryList.rebuildCurrentList()executes, Speedometer verifies ifspeedometerexists inallStatuses. If absent, it automatically registersspeedometerwithDebugScreenEntryStatus.IN_OVERLAY. - Spy Wrapper Replacement: If vanilla natively registers
player_speed(e.g. in Minecraft 26.3+),DebugScreenEntriesMixinreplaces vanilla'sDebugScreenEntryobject inENTRIES_BY_IDwith ourDebugEntryPlayerSpeedWrapper.
