Skip to content

🏛️ Arsitektur & Analisis Injeksi Mixin

📌 Pemberitahuan Sumber Repositori: Dokumentasi dalam Wiki ini mencerminkan kondisi kode sumber terkini dalam repositori, yang mungkin mencakup komit terbaru yang belum dirilis atau fitur dalam pengembangan sebelum rilis publik di CurseForge dan Modrinth.


🔬 Gambaran Arsitektur Tingkat Tinggi & Siklus Hidup

True Sleep mencegat siklus tidur vanilla di tingkat server, menggantikan lompatan instan dengan loop akselerasi tick yang dikendalikan oleh 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 ]

🧩 Daftar Lengkap Injeksi Mixin & Deskriptor Metodenya

Kelas MixinKelas Target MinecraftTitik InjeksiMetode yang Di-hookTujuan & Fungsi
BedRuleMixinnet.minecraft.world.attribute.BedRule$Rule@At("HEAD") (Cancellable)test(Level)Menimpa pemeriksaan WHEN_DARK dengan truesleep:sleep_threshold.
ServerLevelMixinnet.minecraft.server.level.ServerLevel@At("INVOKE") (Redirect)areEnoughSleeping / areEnoughDeepSleepingMengembalikan false untuk menekan lompatan instan vanilla.
ServerLevelMixinnet.minecraft.server.level.ServerLevel@At("TAIL")tick(BooleanSupplier)Memeriksa kondisi tidur dan menggerakkan TimeWarpManager.tick().
LevelMixinnet.minecraft.world.level.Level@At("INVOKE") (Redirect)TickingBlockEntity.tick()Menjalankan multi-tick mesin dan hopper terhubung berdasarkan stride.
MobMixinnet.minecraft.world.entity.Mob@At("HEAD") (Cancellable)tick()Membatalkan AI gerakan mob yang beku dan memproses penuaan biologis.
EntityMixinnet.minecraft.world.entity.Entity@At("HEAD")baseTick()Mengisi pasokan oksigen agar tidak tenggelam saat drown_immunity aktif.
LivingEntityMixinnet.minecraft.world.entity.LivingEntity@At("HEAD")baseTick()Memajukan durasi efek ramuan aktif sebesar stride - 1 tick.
MobEffectInstanceMixinnet.minecraft.world.effect.MobEffectInstanceInterface Injectiontruesleep$ageEffect(int)Menghabiskan efek ramuan bertingkat tanpa terjadi rekursi berulang.
VibrationSystemListenerMixinnet.minecraft.world.level.gameevent.vibrations.VibrationSystem$Listener@At("HEAD") (Cancellable)handleGameEvent(...)Meredam getaran Warden selama percepatan waktu aktif.
client.HudMixinnet.minecraft.client.gui.Hud@At("HEAD") (Cancellable)extractSleepOverlay(...)Menghapus layar hitam tidur vanilla.
client.SkyRendererMixinnet.minecraft.client.renderer.SkyRenderer@At("TAIL")extractRenderState(...)Menghaluskan sudut langit dengan faktor 0.35 untuk visual sinematik.

⚡ Caching Jalur Cepat Tanpa Alokasi Memori (Zero-Allocation)

Pada kecepatan tinggi ($50\text{ TPS} \times 50\text{ langkah} = 2{,}500\text{ iterasi/s}$), alokasi memori dapat memicu lag Garbage Collection (GC).

True Sleep menggunakan cache statis non-blocking di semua jalur penting:

  1. truesleep$unfreezeCache: Menyimpan instance GameRule per EntityType<?>, menghindari pembuatan string.
  2. truesleep$WORKER_CACHE: Menyimpan hasil pengecekan tag #truesleep:worker_mobs.
  3. truesleep$PRODUCTION_MACHINE_CACHE: Menyimpan tipe blok dari #truesleep:accelerated_machines.
  4. Snapshot GameRule TimeWarpManager: Mengambil nilai boolean sekali per tick alih-alih berulang kali di dalam loop.

Official documentation & web portal for Dasik Igaijinn mods.