Skip to content

Архитектура пакетов и миксины

В этом техническом справочнике подробно описана иерархия пакетов, структура исходного кода и точки внедрения миксинов.


📊 Архитектурная диаграмма пакетов

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

Класс MixinЦелевой класс MinecraftЦелевой метод / точкаТип инъекцииНазначение
DebugScreenEntriesMixinnet.minecraft.client.gui.components.debug.DebugScreenEntries<clinit> @At("TAIL")@InjectРегистрирует идентификатор записи speedometer и оборачивает нативную запись player_speed, если она есть.
DebugScreenEntriesMixinnet.minecraft.client.gui.components.debug.DebugScreenEntriesregister@InvokerВызывает приватный ванильный метод register(Identifier, DebugScreenEntry).
DebugScreenEntryListMixinnet.minecraft.client.gui.components.debug.DebugScreenEntryListrebuildCurrentList @At("HEAD")@InjectГарантирует, что статус speedometer по умолчанию равен DebugScreenEntryStatus.IN_OVERLAY.

🔒 Потокобезопасность и гарантия неблокирующей работы

  • Все инъекции Mixin выполняются исключительно в потоке рендеринга клиента Minecraft.
  • Неблокирующая реализация без блокировок гарантирует отсутствие просадок кадров ($<0.001\text{ мс}$).

🔗 Связанные страницы

Official documentation & web portal for Dasik Igaijinn mods.