💻 Penjelasan Arsitektur & Mixin (Minecraft 26.3)
📌 Penafian Kode Sumber Repositori: Dokumentasi di Wiki ini mencerminkan status kode sumber saat ini di repositori, yang mungkin mencakup komit terbaru yang belum dirilis atau fitur eksperimental sebelum rilis publik di CurseForge dan Modrinth.
📋 Architectural Infobox
| Component | Technical Details |
|---|---|
| Package Root | net.vanillaoutsider.creativeflyspeed |
| Main Mod Initializer | [CreativeFlySpeedFabric.java](file:///Creative%20Fly%20Speed%20v26.3/Creative%20Fly%20Speed%2026.3/src/main/java/net/vanillaoutsider/creativeflyspeed/CreativeFlySpeedFabric.java) |
| GameRule Registry | [CreativeFlySpeedRules.java](file:///Creative%20Fly%20Speed%20v26.3/Creative%20Fly%20Speed%2026.3/src/main/java/net/vanillaoutsider/creativeflyspeed/CreativeFlySpeedRules.java) |
| Mixin Target Class | net.minecraft.server.level.ServerPlayer |
| Bytecode Injector | @Inject(method = "tick", at = @At("HEAD")) |
| Library Dependency | net.dasik:dasik-library:1.8.36 |
🏗️ Architectural Flow & Package Hierarchy
net.vanillaoutsider.creativeflyspeed/
├── CreativeFlySpeedFabric.java # Mod initialization & GameRule registration
├── CreativeFlySpeedFabricClient.java # Client-side lifecycle stub
├── CreativeFlySpeedRules.java # Dynamic GameRule constants and registration
└── mixin/
└── ServerPlayerMixin.java # Per-tick abilities evaluation & epsilon syncFlow Diagram
[ ServerPlayer.tick() ]
│
▼
[ ServerPlayerMixin.onTick() ]
│
├── Check gameMode (CREATIVE / SPECTATOR)
├── Compute targetSpeed = 0.05f * (permille / 1000f)
│
▼
[ Epsilon Guard: |current - target| > 1e-6f ? ]
├── NO ──> (Zero packets sent, return immediately)
└── YES ──> abilities.setFlyingSpeed(targetSpeed)
player.onUpdateAbilities() (Dispatches sync packet)