Skip to content

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

PropertiNilai
Nama SistemPenjaga Versi Knot ClassLoader
Kelas Targetnet.instantgratification.item_clumps.util.ModVersionGuard
Kelas Terverifikasinet.minecraft.world.entity.item.ItemEntity
Verifikasi Pustakanet.dasik.social.api.config.ConfigHelper (Membutuhkan DasikLibrary $\ge 1.7.4$)
Tujuan KeamananMencegah 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" +
                    "=====================================================================");
            }
        }
    }
}

🔗 Dokumentasi Terkait (MC 26.2)

Official documentation & web portal for Dasik Igaijinn mods.