🏛️ アーキテクチャ解析とMixinインジェクション詳細
📌 リポジトリソースコードに関する免責事項: このWikiのドキュメントはリポジトリ内の現在のソースコードの状態を反映しており、CurseForgeおよびModrinthでの公式リリース前の最新コミットや開発中の機能が含まれている場合があります。
🔬 高度なアーキテクチャとライフサイクル遷移
True Sleepはサーバー側でバニラの睡眠処理をインターセプトし、瞬時の時間スキップを 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 ]🧩 Mixinインジェクション一覧とディスクリプタ照合表
| Mixinクラス | 対象Minecraftクラス | インジェクション位置 | フックメソッド | 用途および機能詳細 |
|---|---|---|---|---|
BedRuleMixin | net.minecraft.world.attribute.BedRule$Rule | @At("HEAD") (Cancellable) | test(Level) | WHEN_DARK 判定をオーバーライドし truesleep:sleep_threshold に接続。 |
ServerLevelMixin | net.minecraft.server.level.ServerLevel | @At("INVOKE") (Redirect) | areEnoughSleeping / areEnoughDeepSleeping | false を返してバニラの瞬間スキップ処理を完全に阻止。 |
ServerLevelMixin | net.minecraft.server.level.ServerLevel | @At("TAIL") | tick(BooleanSupplier) | 就寝条件を監視し TimeWarpManager.tick() を実行駆動。 |
LevelMixin | net.minecraft.world.level.Level | @At("INVOKE") (Redirect) | TickingBlockEntity.tick() | 生産マシンと連動ホッパーに対し stride 回数のマルチTickを実行。 |
MobMixin | net.minecraft.world.entity.Mob | @At("HEAD") (Cancellable) | tick() | モブ停止中にAIを停止し、生物学的成長シミュレーションを実施。 |
EntityMixin | net.minecraft.world.entity.Entity | @At("HEAD") | baseTick() | drown_immunity 有効時に酸素を充填し溺死ダメージを阻止。 |
LivingEntityMixin | net.minecraft.world.entity.LivingEntity | @At("HEAD") | baseTick() | 付与されているポーション持続時間を stride - 1 分だけ進行。 |
MobEffectInstanceMixin | net.minecraft.world.effect.MobEffectInstance | Interface Injection | truesleep$ageEffect(int) | 連鎖する隠しポーション効果を無限ループなく安全に消費。 |
VibrationSystemListenerMixin | net.minecraft.world.level.gameevent.vibrations.VibrationSystem$Listener | @At("HEAD") (Cancellable) | handleGameEvent(...) | タイムワープ中にウォーデンが検知する音響振動をミュート抑制。 |
client.HudMixin | net.minecraft.client.gui.Hud | @At("HEAD") (Cancellable) | extractSleepOverlay(...) | 就寝時のバニラ全画面暗転フェードをキャンセル。 |
client.SkyRendererMixin | net.minecraft.client.renderer.SkyRenderer | @At("TAIL") | extractRenderState(...) | 係数0.35の線形補間を適用し、星空の滑らかな回転を描画。 |
⚡ ホットパスにおけるゼロアロケーション(無割当)キャッシュ
超高速動作中($50\text{ TPS} \times 50\text{ ストライド} = 毎秒2{,}500\text{ 反復}$)、ループ内のメモリ確保は激しいGC停止を引き起こします。
True Sleepはすべての重要パスで 静的ロックフリー並行キャッシュ を採用しています:
truesleep$unfreezeCache:EntityType<?>ごとのGameRuleインスタンスをキャッシュし文字列生成を排除。truesleep$WORKER_CACHE:#truesleep:worker_mobsタグの判定結果をキャッシュ。truesleep$PRODUCTION_MACHINE_CACHE:#truesleep:accelerated_machinesのブロック判定をキャッシュ。TimeWarpManagerルールスナップショット: エンティティループ内で都度照会せず、Tickごとに1回だけ判定値を保持。
