Skip to content

🏛️ Architektur & Mixin-Analyse

📌 Hinweis zum Quellcode des Repositorys: Die Dokumentation in diesem Wiki spiegelt den aktuellen Quellcode-Zustand im Repository wider, der neuere, unveröffentlichte Commits oder Entwicklungsfunktionen vor den öffentlichen Release-Builds auf CurseForge und Modrinth enthalten kann.


🔬 High-Level-Architektur & Ablaufdiagramm

True Sleep fängt den Schlaf-Lebenszyklus auf dem Server ab und ersetzt den Zeitsprung durch eine synchronisierte Beschleunigungsschleife unter TimeWarpManager.

                  [ Player Enters Bed ]


              [ BedRule.Rule.test() Intercept ]
              (Check truesleep:sleep_threshold)


           [ ServerLevel.tick() Sleep Check ]
          (SleepStatus.areEnoughDeepSleeping())

               +------------+------------+
               │                         │
     [ Not All Sleeping ]       [ All Sleeping (Enough) ]
               │                         │
               ▼                         ▼
      [ Initiate Wind-Down ]    [ Engage Time Warp Engine ]
      (15-tick Deceleration)             │
                                         ├─► Set Physical Rate (ENGINE_TPS: 50 TPS)
                                         ├─► Compute Stride: round(VIRTUAL_TPS / ENGINE_TPS)
                                         ├─► Scale RANDOM_TICK_SPEED by Stride
                                         ├─► Multi-Tick Machines & Coupled Hoppers
                                         ├─► Freeze Mob AI / Age Farm Biology
                                         ├─► Apply Sleep Hunger Exhaustion
                                         └─► Smooth Celestial Sun/Moon (Client Lerp)


                                     [ Destination Arrival ]
                                     (Cycle Dist < 20 Ticks)


                                    [ Snap Monotonic Clock ]
                                   (Set Time to WAKE_TIME: 0)


                                       [ Wake Up All Players ]

🧩 Vollständiges Mixin-Inventar & Injektionsdeskriptoren

Mixin-KlasseMinecraft-ZielklasseInjektionspunktMethodeZweck und Funktion
BedRuleMixinnet.minecraft.world.attribute.BedRule$Rule@At("HEAD") (Cancellable)test(Level)Überschreibt WHEN_DARK zugunsten von truesleep:sleep_threshold.
ServerLevelMixinnet.minecraft.server.level.ServerLevel@At("INVOKE") (Redirect)areEnoughSleeping / areEnoughDeepSleepingGibt false zurück, um das abrupte Überspringen der Nacht zu verhindern.
ServerLevelMixinnet.minecraft.server.level.ServerLevel@At("TAIL")tick(BooleanSupplier)Prüft Schlafzustände und treibt TimeWarpManager.tick() an.
LevelMixinnet.minecraft.world.level.Level@At("INVOKE") (Redirect)TickingBlockEntity.tick()Multi-tickt Maschinen und Trichter basierend auf stride.
MobMixinnet.minecraft.world.entity.Mob@At("HEAD") (Cancellable)tick()Pausiert Mob-KI und führt biologische Farmalterung durch.
EntityMixinnet.minecraft.world.entity.Entity@At("HEAD")baseTick()Füllt Atemluft auf, um Ertrinken bei drown_immunity zu verhindern.
LivingEntityMixinnet.minecraft.world.entity.LivingEntity@At("HEAD")baseTick()Lässt Trankeffekte um stride - 1 Ticks altern.
MobEffectInstanceMixinnet.minecraft.world.effect.MobEffectInstanceInterface Injectiontruesleep$ageEffect(int)Lässt kaskadierende Effekte ohne Endlosschleifen altern.
VibrationSystemListenerMixinnet.minecraft.world.level.gameevent.vibrations.VibrationSystem$Listener@At("HEAD") (Cancellable)handleGameEvent(...)Dämpft Warden-Vibrationen während des Zeitraffers.
client.HudMixinnet.minecraft.client.gui.Hud@At("HEAD") (Cancellable)extractSleepOverlay(...)Deaktiviert das schwarze Ausblendfenster beim Schlafen.
client.SkyRendererMixinnet.minecraft.client.renderer.SkyRenderer@At("TAIL")extractRenderState(...)Interpoliert Himmelskörperwinkel mit Faktor 0.35.

⚡ Null-Allokations-Caching auf Hot-Paths

Bei hohen Durchläufen ($50\text{ TPS} \times 50\text{ Stride} = 2{,}500\text{ Iterationen/s}$) belasten Objektallokationen die Garbage Collection (GC).

True Sleep verwendet statische, sperrenfreie Caches:

  1. truesleep$unfreezeCache: Cached GameRule-Instanzen pro EntityType<?>, vermeidet String-Erzeugung.
  2. truesleep$WORKER_CACHE: Speichert Tag-Prüfungen für #truesleep:worker_mobs.
  3. truesleep$PRODUCTION_MACHINE_CACHE: Speichert passende Typen für #truesleep:accelerated_machines.
  4. Feld-Caching in TimeWarpManager: Fragt GameRule-Booleans einmal pro Tick ab statt in Schleifen.

Official documentation & web portal for Dasik Igaijinn mods.