Architektur & Mixin-Übersicht
Diese technische Referenz beschreibt die Pakethierarchie, Quellcode-Struktur und Mixin-Injektionspunkte.
📊 Paketarchitektur-Diagramm
text
net.vanillaoutsider.speedometer
├── SpeedometerMod.java <-- Constants & Identifier definitions
├── client
│ ├── SpeedometerClient.java <-- ClientModInitializer entrypoint
│ ├── DebugEntrySpeedometer.java <-- Custom DebugScreenEntry implementation
│ └── DebugEntryPlayerSpeedWrapper.java <-- Interceptor spy-wrapper for player_speed
└── mixin
├── DebugScreenEntriesMixin.java <-- Hooks into DebugScreenEntries static init
└── DebugScreenEntryListMixin.java <-- Enforces default IN_OVERLAY status🧩 Mixin-Zielaufschlüsselungstabelle
| Mixin-Klasse | Minecraft-Zielklasse | Zielmethode / Punkt | Injektionstyp | Zweck |
|---|---|---|---|---|
DebugScreenEntriesMixin | net.minecraft.client.gui.components.debug.DebugScreenEntries | <clinit> @At("TAIL") | @Inject | Registriert die Eintrags-ID speedometer und umhüllt den nativen Eintrag player_speed, falls vorhanden. |
DebugScreenEntriesMixin | net.minecraft.client.gui.components.debug.DebugScreenEntries | register | @Invoker | Ruft die private Vanilla-Methode register(Identifier, DebugScreenEntry) auf. |
DebugScreenEntryListMixin | net.minecraft.client.gui.components.debug.DebugScreenEntryList | rebuildCurrentList @At("HEAD") | @Inject | Stellt sicher, dass der Status von speedometer standardmäßig auf DebugScreenEntryStatus.IN_OVERLAY gesetzt ist. |
🔒 Thread-Sicherheit & blockierungsfreie Garantie
- Alle Mixin-Injektionen werden ausschließlich auf dem Client-Render-Thread von Minecraft ausgeführt.
- Die sperrenfreie, nicht blockierende Implementierung garantiert null Frame-Einbrüche ($<0.001\text{ ms}$).
