Skip to content

🧲 Pergerakan Vakum & Pergeseran Fase (MC 26.1.2)

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

Kotak Info FiturParameter Teknis
Kelas Sistemnet.instantgratification.magnet.MagnetMovement
Event PemicuServer Player Tick (PlayerMixin $\rightarrow$ MagnetManager.tick)
Jangkauan Tarik Standar12 blok (ig:magnet_range)
Kecepatan Terminal Standar80% ($0.8\text{ blok/tick} = 16.0\text{ m/detik}$)
Akselerasi Standar10% ($0.10\text{ faktor lerp/tick}$)
Pergeseran Fase (NoClip)Diaktifkan (ig:magnet_noclip = true)
Vektor TargetPosisi Mata Pemain (player.getEyePosition())
Dorongan Offset Tanah$+0.05\text{ m}$ pada sumbu Y saat entity.onGround()

📖 Ikhtisar Sistem

Dalam Minecraft 26.1.2, mesin vakum secara berkesinambungan melacak instans ItemEntity yang valid dalam radius sferis pemain dan menariknya langsung menuju ketinggian mata menggunakan interpolasi lerp.

Dengan Pergeseran Fase (NoClip) aktif, item melintasi dinding dan blok padat secara mulus, mencegah drop terjebak di balik rintangan selama penambangan atau pertempuran.

+-------------+    Garis Pandang OK    +----------------------+    Kecepatan Lerp Diterapkan    +--------------------+
| Item Entity | ---------------------> | Set NoClip (2 Ticks) | ------------------------------> | Posisi Mata Pemain |
+-------------+                        +----------------------+                                 +--------------------+
                                                  |
                                                  v
                                       [Batalkan Dorongan Dinding]
                                       [Bypass Tabrakan Blok]
                                       [Batalkan Gravitasi Dinding]

🧮 Fisika & Matematika Vektor

1. Vektor Satuan Arah

$$\vec{v}{\text{target}} = \vec{p}{\text{eye}} - \vec{p}{\text{entity}}$$ $$\hat{d} = \frac{\vec{v}{\text{target}}}{|\vec{v}_{\text{target}}|}$$

2. Interpolasi Kecepatan

$$\text{Skalar Kecepatan } s = \frac{\text{GameRule}(\text{ig:magnet_speed})}{100.0} = 0.8\text{ blok/tick}$$ $$\vec{u}{\text{target}} = \hat{d} \times s$$ $$\text{Faktor Akselerasi } a = \frac{\text{GameRule}(\text{ig:magnet_acceleration})}{100.0} = 0.10$$ $$\vec{v}{\text{new}} = \vec{v}{\text{current}} + (\vec{u}{\text{target}} - \vec{v}_{\text{current}}) \times a$$

3. Peningkatan Anti-Gesekan Tanah

java
if (entity.onGround()) {
    entity.setOnGround(false);
    entity.setPos(entity.position().add(0, 0.05, 0));
}

🧱 Pergeseran Fase (Mesin NoClip)

  1. Aktivasi Status: ((IMagnetEntity) entity).ig$setMagnetNoClip() mengaktifkan hitungan mundur 2 tick.
  2. Pengambilalihan Fisika (MixinEntity.java):
    • move(MoverType, Vec3): @Inject(at = @At("HEAD")) menyimpan originalNoPhysics dan mengatur entity.noPhysics = true.
    • move(MoverType, Vec3): @Inject(at = @At("RETURN")) mengembalikan entity.noPhysics = originalNoPhysics.
  3. Pencegahan Dorongan Keluar: @Inject(method = "moveTowardsClosestSpace", at = @At("HEAD"), cancellable = true) memblokir gaya dorong dinding vanilla.
  4. Pembatalan Gravitasi di Dalam Dinding: @Inject(method = "applyGravity", at = @At("HEAD"), cancellable = true) membatalkan gravitasi hanya ketika item secara fisik berada di dalam voxel blok.

⚙️ Konfigurasi & GameRules Terkait

GameRuleTipeStandarDeskripsi
ig:magnet_enabledBooleantrueSakelar utama untuk mekanisme vakum.
ig:magnet_rangeInteger12Radius vakum dalam blok (1 hingga 64).
ig:magnet_speedInteger80Persentase kecepatan terminal ($80 = 0.8\text{ b/t}$).
ig:magnet_accelerationInteger10Persentase faktor akselerasi ($10 = 10%\text{ lerp/tick}$).
ig:magnet_noclipBooleantrueMengaktifkan pergeseran fase tembus blok saat ditarik.

🔗 Dokumentasi Wiki Terkait

Official documentation & web portal for Dasik Igaijinn mods.