ModVersionGuard & Keamanan Runtime (MC 26.2)
Dokumen ini menjelaskan pemeriksaan classloader runtime tanpa dependensi eksternal, arsitektur pelindung versi, dan mekanisme perlindungan bytecode di Item Clumps untuk Minecraft 26.2.
📊 Kotak Info Fitur
| Properti | Nilai |
|---|---|
| Nama Sistem | Penjaga Versi Knot ClassLoader |
| Kelas Target | net.instantgratification.item_clumps.util.ModVersionGuard |
| Kelas Terverifikasi | net.minecraft.world.entity.item.ItemEntity |
| Verifikasi Pustaka | net.dasik.social.api.config.ConfigHelper (Membutuhkan DasikLibrary $\ge 1.7.4$) |
| Tujuan Keamanan | Mencegah kerusakan dunia jika dimuat pada API Minecraft yang tidak kompatibel |
🛡️ Arsitektur Knot ClassLoader
Dalam Fabric Loader, kelas-kelas mod dimuat di berbagai classloader terpisah (Knot ClassLoader vs. classloader aplikasi sistem). Pemanggilan Class.forName(name) biasa dapat gagal jika tidak memeriksa loader konteks thread aktif.
Item Clumps menerapkan resolusi classloader dua tahap yang aman:
┌───────────────────────────────────┐
│ ModVersionGuard.checkClass Invoked│
└─────────────────┬─────────────────┘
│
▼
┌───────────────────────────────────┐
│ Query Knot Thread Context Loader │
│ Thread.currentThread() │
│ .getContextClassLoader() │
└─────────────────┬─────────────────┘
│
┌────────────────┴────────────────┐
│ (Success) │ (ClassNotFoundException)
▼ ▼
┌───────────────────────────┐ ┌───────────────────────────┐
│ Game Continues Execution │ │ Fallback to Current Loader│
│ Safe Runtime Verified │ │ ModVersionGuard.class │
└───────────────────────────┘ │ .getClassLoader() │
└─────────────┬─────────────┘
│
┌────────────────┴────────────────┐
│ (Success) │ (ClassNotFoundException)
▼ ▼
┌───────────────────────────┐ ┌───────────────────────────┐
│ Game Continues Execution │ │ Throw Descriptive Warning │
│ Safe Runtime Verified │ │ Halt Corrupted World Load │
└───────────────────────────┘ └───────────────────────────┘💻 Implementasi Kode Sumber Java Asli
Dari ModVersionGuard.java di Minecraft 26.2:
java
// Copyright (C) 2026 Dasik (Rifaditya) | GNU GPLv3
package net.instantgratification.item_clumps.util;
public final class ModVersionGuard {
private ModVersionGuard() {}
public static void checkClass(String modName, String requiredClassName) {
ClassLoader contextLoader = Thread.currentThread().getContextClassLoader();
ClassLoader currentLoader = ModVersionGuard.class.getClassLoader();
try {
if (contextLoader != null) {
Class.forName(requiredClassName, false, contextLoader);
} else {
Class.forName(requiredClassName, false, currentLoader);
}
} catch (ClassNotFoundException e) {
try {
Class.forName(requiredClassName, false, currentLoader);
} catch (ClassNotFoundException e2) {
throw new RuntimeException("\n" +
"=====================================================================\n" +
" [PRE-RELEASE / VERSION GUARD WARNING] " + modName + "\n" +
"---------------------------------------------------------------------\n" +
" CRITICAL: Incompatible Minecraft Game Runtime or Missing Class!\n" +
" Required Class : " + requiredClassName + "\n" +
" Status : UNRESOLVED AT RUNTIME\n\n" +
" Safety Protection:\n" +
" Execution halted to prevent unreleased/incompatible build deployment\n" +
" or broken world state save corruption.\n\n" +
" Troubleshooting Steps:\n" +
" 1. Verify target Minecraft version (26.2+ release drop).\n" +
" 2. Ensure all required dependencies (Fabric API, DasikLibrary) are loaded.\n" +
" 3. Build/Download a verified matching release JAR from Modrinth/CurseForge.\n" +
"=====================================================================");
}
}
}
}